'use strict'; var obsidian = require('obsidian'); var require$$1 = require('fs'); var require$$2 = require('zlib'); var require$$3 = require('http'); var require$$4 = require('https'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1); var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2); var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3); var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, basedir, module) { return module = { path: basedir, exports: {}, require: function (path, base) { return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); } }, fn(module, module.exports), module.exports; } function commonjsRequire () { throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } /** * Font RegExp helpers. */ const weights = 'bold|bolder|lighter|[1-9]00' , styles = 'italic|oblique' , variants = 'small-caps' , stretches = 'ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded' , units = 'px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q' , string = '\'([^\']+)\'|"([^"]+)"|[\\w\\s-]+'; // [ [ <‘font-style’> || || <‘font-weight’> || <‘font-stretch’> ]? // <‘font-size’> [ / <‘line-height’> ]? <‘font-family’> ] // https://drafts.csswg.org/css-fonts-3/#font-prop const weightRe = new RegExp('(' + weights + ') +', 'i'); const styleRe = new RegExp('(' + styles + ') +', 'i'); const variantRe = new RegExp('(' + variants + ') +', 'i'); const stretchRe = new RegExp('(' + stretches + ') +', 'i'); const sizeFamilyRe = new RegExp( '([\\d\\.]+)(' + units + ') *' + '((?:' + string + ')( *, *(?:' + string + '))*)'); /** * Cache font parsing. */ const cache = {}; const defaultHeight = 16; // pt, common browser default /** * Parse font `str`. * * @param {String} str * @return {Object} Parsed font. `size` is in device units. `unit` is the unit * appearing in the input string. * @api private */ var parseFont = function (str) { // Cached if (cache[str]) return cache[str] // Try for required properties first. const sizeFamily = sizeFamilyRe.exec(str); if (!sizeFamily) return // invalid // Default values and required properties const font = { weight: 'normal', style: 'normal', stretch: 'normal', variant: 'normal', size: parseFloat(sizeFamily[1]), unit: sizeFamily[2], family: sizeFamily[3].replace(/["']/g, '').replace(/ *, */g, ',') }; // Optional, unordered properties. let weight, style, variant, stretch; // Stop search at `sizeFamily.index` let substr = str.substring(0, sizeFamily.index); if ((weight = weightRe.exec(substr))) font.weight = weight[1]; if ((style = styleRe.exec(substr))) font.style = style[1]; if ((variant = variantRe.exec(substr))) font.variant = variant[1]; if ((stretch = stretchRe.exec(substr))) font.stretch = stretch[1]; // Convert to device units. (`font.unit` is the original unit) // TODO: ch, ex switch (font.unit) { case 'pt': font.size /= 0.75; break case 'pc': font.size *= 16; break case 'in': font.size *= 96; break case 'cm': font.size *= 96.0 / 2.54; break case 'mm': font.size *= 96.0 / 25.4; break case '%': // TODO disabled because existing unit tests assume 100 // font.size *= defaultHeight / 100 / 0.75 break case 'em': case 'rem': font.size *= defaultHeight / 0.75; break case 'q': font.size *= 96 / 25.4 / 4; break } return (cache[str] = font) }; /* globals document, ImageData */ var parseFont_1 = parseFont; var createCanvas = function (width, height) { return Object.assign(document.createElement('canvas'), { width: width, height: height }) }; var createImageData = function (array, width, height) { // Browser implementation of ImageData looks at the number of arguments passed switch (arguments.length) { case 0: return new ImageData() case 1: return new ImageData(array) case 2: return new ImageData(array, width) default: return new ImageData(array, width, height) } }; var loadImage = function (src, options) { return new Promise(function (resolve, reject) { const image = Object.assign(document.createElement('img'), options); function cleanup () { image.onload = null; image.onerror = null; } image.onload = function () { cleanup(); resolve(image); }; image.onerror = function () { cleanup(); reject(new Error('Failed to load the image "' + src + '"')); }; image.src = src; }) }; var browser = { parseFont: parseFont_1, createCanvas: createCanvas, createImageData: createImageData, loadImage: loadImage }; var punycode = createCommonjsModule(function (module, exports) { (function(root) { /** Detect free variables */ var freeExports = exports && !exports.nodeType && exports; var freeModule = module && !module.nodeType && module; var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; if ( freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal ) { root = freeGlobal; } /** * The `punycode` object. * @name punycode * @type Object */ var punycode, /** Highest positive signed 32-bit float value */ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 /** Bootstring parameters */ base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700, initialBias = 72, initialN = 128, // 0x80 delimiter = '-', // '\x2D' /** Regular expressions */ regexPunycode = /^xn--/, regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators /** Error messages */ errors = { 'overflow': 'Overflow: input needs wider integers to process', 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 'invalid-input': 'Invalid input' }, /** Convenience shortcuts */ baseMinusTMin = base - tMin, floor = Math.floor, stringFromCharCode = String.fromCharCode, /** Temporary variable */ key; /*--------------------------------------------------------------------------*/ /** * A generic error utility function. * @private * @param {String} type The error type. * @returns {Error} Throws a `RangeError` with the applicable error message. */ function error(type) { throw RangeError(errors[type]); } /** * A generic `Array#map` utility function. * @private * @param {Array} array The array to iterate over. * @param {Function} callback The function that gets called for every array * item. * @returns {Array} A new array of values returned by the callback function. */ function map(array, fn) { var length = array.length; var result = []; while (length--) { result[length] = fn(array[length]); } return result; } /** * A simple `Array#map`-like wrapper to work with domain name strings or email * addresses. * @private * @param {String} domain The domain name or email address. * @param {Function} callback The function that gets called for every * character. * @returns {Array} A new string of characters returned by the callback * function. */ function mapDomain(string, fn) { var parts = string.split('@'); var result = ''; if (parts.length > 1) { // In email addresses, only the domain name should be punycoded. Leave // the local part (i.e. everything up to `@`) intact. result = parts[0] + '@'; string = parts[1]; } // Avoid `split(regex)` for IE8 compatibility. See #17. string = string.replace(regexSeparators, '\x2E'); var labels = string.split('.'); var encoded = map(labels, fn).join('.'); return result + encoded; } /** * Creates an array containing the numeric code points of each Unicode * character in the string. While JavaScript uses UCS-2 internally, * this function will convert a pair of surrogate halves (each of which * UCS-2 exposes as separate characters) into a single code point, * matching UTF-16. * @see `punycode.ucs2.encode` * @see * @memberOf punycode.ucs2 * @name decode * @param {String} string The Unicode input string (UCS-2). * @returns {Array} The new array of code points. */ function ucs2decode(string) { var output = [], counter = 0, length = string.length, value, extra; while (counter < length) { value = string.charCodeAt(counter++); if (value >= 0xD800 && value <= 0xDBFF && counter < length) { // high surrogate, and there is a next character extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { // low surrogate output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { // unmatched surrogate; only append this code unit, in case the next // code unit is the high surrogate of a surrogate pair output.push(value); counter--; } } else { output.push(value); } } return output; } /** * Creates a string based on an array of numeric code points. * @see `punycode.ucs2.decode` * @memberOf punycode.ucs2 * @name encode * @param {Array} codePoints The array of numeric code points. * @returns {String} The new Unicode string (UCS-2). */ function ucs2encode(array) { return map(array, function(value) { var output = ''; if (value > 0xFFFF) { value -= 0x10000; output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); value = 0xDC00 | value & 0x3FF; } output += stringFromCharCode(value); return output; }).join(''); } /** * Converts a basic code point into a digit/integer. * @see `digitToBasic()` * @private * @param {Number} codePoint The basic numeric code point value. * @returns {Number} The numeric value of a basic code point (for use in * representing integers) in the range `0` to `base - 1`, or `base` if * the code point does not represent a value. */ function basicToDigit(codePoint) { if (codePoint - 48 < 10) { return codePoint - 22; } if (codePoint - 65 < 26) { return codePoint - 65; } if (codePoint - 97 < 26) { return codePoint - 97; } return base; } /** * Converts a digit/integer into a basic code point. * @see `basicToDigit()` * @private * @param {Number} digit The numeric value of a basic code point. * @returns {Number} The basic code point whose value (when used for * representing integers) is `digit`, which needs to be in the range * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is * used; else, the lowercase form is used. The behavior is undefined * if `flag` is non-zero and `digit` has no uppercase form. */ function digitToBasic(digit, flag) { // 0..25 map to ASCII a..z or A..Z // 26..35 map to ASCII 0..9 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); } /** * Bias adaptation function as per section 3.4 of RFC 3492. * http://tools.ietf.org/html/rfc3492#section-3.4 * @private */ function adapt(delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); } /** * Converts a Punycode string of ASCII-only symbols to a string of Unicode * symbols. * @memberOf punycode * @param {String} input The Punycode string of ASCII-only symbols. * @returns {String} The resulting string of Unicode symbols. */ function decode(input) { // Don't use UCS-2 var output = [], inputLength = input.length, out, i = 0, n = initialN, bias = initialBias, basic, j, index, oldi, w, k, digit, t, /** Cached calculation results */ baseMinusT; // Handle the basic code points: let `basic` be the number of input code // points before the last delimiter, or `0` if there is none, then copy // the first basic code points to the output. basic = input.lastIndexOf(delimiter); if (basic < 0) { basic = 0; } for (j = 0; j < basic; ++j) { // if it's not a basic code point if (input.charCodeAt(j) >= 0x80) { error('not-basic'); } output.push(input.charCodeAt(j)); } // Main decoding loop: start just after the last delimiter if any basic code // points were copied; start at the beginning otherwise. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { // `index` is the index of the next character to be consumed. // Decode a generalized variable-length integer into `delta`, // which gets added to `i`. The overflow checking is easier // if we increase `i` as we go, then subtract off its starting // value at the end to obtain `delta`. for (oldi = i, w = 1, k = base; /* no condition */; k += base) { if (index >= inputLength) { error('invalid-input'); } digit = basicToDigit(input.charCodeAt(index++)); if (digit >= base || digit > floor((maxInt - i) / w)) { error('overflow'); } i += digit * w; t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (digit < t) { break; } baseMinusT = base - t; if (w > floor(maxInt / baseMinusT)) { error('overflow'); } w *= baseMinusT; } out = output.length + 1; bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`, // incrementing `n` each time, so we'll fix that now: if (floor(i / out) > maxInt - n) { error('overflow'); } n += floor(i / out); i %= out; // Insert `n` at position `i` of the output output.splice(i++, 0, n); } return ucs2encode(output); } /** * Converts a string of Unicode symbols (e.g. a domain name label) to a * Punycode string of ASCII-only symbols. * @memberOf punycode * @param {String} input The string of Unicode symbols. * @returns {String} The resulting Punycode string of ASCII-only symbols. */ function encode(input) { var n, delta, handledCPCount, basicLength, bias, j, m, q, k, t, currentValue, output = [], /** `inputLength` will hold the number of code points in `input`. */ inputLength, /** Cached calculation results */ handledCPCountPlusOne, baseMinusT, qMinusT; // Convert the input in UCS-2 to Unicode input = ucs2decode(input); // Cache the length inputLength = input.length; // Initialize the state n = initialN; delta = 0; bias = initialBias; // Handle the basic code points for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled; // `basicLength` is the number of basic code points. // Finish the basic string - if it is not empty - with a delimiter if (basicLength) { output.push(delimiter); } // Main encoding loop: while (handledCPCount < inputLength) { // All non-basic code points < n have been handled already. Find the next // larger one: for (m = maxInt, j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue >= n && currentValue < m) { m = currentValue; } } // Increase `delta` enough to advance the decoder's state to , // but guard against overflow handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { error('overflow'); } delta += (m - n) * handledCPCountPlusOne; n = m; for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < n && ++delta > maxInt) { error('overflow'); } if (currentValue == n) { // Represent delta as a generalized variable-length integer for (q = delta, k = base; /* no condition */; k += base) { t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (q < t) { break; } qMinusT = q - t; baseMinusT = base - t; output.push( stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) ); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q, 0))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); } /** * Converts a Punycode string representing a domain name or an email address * to Unicode. Only the Punycoded parts of the input will be converted, i.e. * it doesn't matter if you call it on a string that has already been * converted to Unicode. * @memberOf punycode * @param {String} input The Punycoded domain name or email address to * convert to Unicode. * @returns {String} The Unicode representation of the given Punycode * string. */ function toUnicode(input) { return mapDomain(input, function(string) { return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; }); } /** * Converts a Unicode string representing a domain name or an email address to * Punycode. Only the non-ASCII parts of the domain name will be converted, * i.e. it doesn't matter if you call it with a domain that's already in * ASCII. * @memberOf punycode * @param {String} input The domain name or email address to convert, as a * Unicode string. * @returns {String} The Punycode representation of the given domain name or * email address. */ function toASCII(input) { return mapDomain(input, function(string) { return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; }); } /*--------------------------------------------------------------------------*/ /** Define the public API */ punycode = { /** * A string representing the current Punycode.js version number. * @memberOf punycode * @type String */ 'version': '1.3.2', /** * An object of methods to convert from JavaScript's internal character * representation (UCS-2) to Unicode code points, and back. * @see * @memberOf punycode * @type Object */ 'ucs2': { 'decode': ucs2decode, 'encode': ucs2encode }, 'decode': decode, 'encode': encode, 'toASCII': toASCII, 'toUnicode': toUnicode }; /** Expose `punycode` */ // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: if (freeExports && freeModule) { if (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+ freeModule.exports = punycode; } else { // in Narwhal or RingoJS v0.7.0- for (key in punycode) { punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); } } } else { // in Rhino or a web browser root.punycode = punycode; } }(commonjsGlobal)); }); var util = { isString: function(arg) { return typeof(arg) === 'string'; }, isObject: function(arg) { return typeof(arg) === 'object' && arg !== null; }, isNull: function(arg) { return arg === null; }, isNullOrUndefined: function(arg) { return arg == null; } }; // Copyright Joyent, Inc. and other Node contributors. // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } var decode = function(qs, sep, eq, options) { sep = sep || '&'; eq = eq || '='; var obj = {}; if (typeof qs !== 'string' || qs.length === 0) { return obj; } var regexp = /\+/g; qs = qs.split(sep); var maxKeys = 1000; if (options && typeof options.maxKeys === 'number') { maxKeys = options.maxKeys; } var len = qs.length; // maxKeys <= 0 means that we should not limit keys count if (maxKeys > 0 && len > maxKeys) { len = maxKeys; } for (var i = 0; i < len; ++i) { var x = qs[i].replace(regexp, '%20'), idx = x.indexOf(eq), kstr, vstr, k, v; if (idx >= 0) { kstr = x.substr(0, idx); vstr = x.substr(idx + 1); } else { kstr = x; vstr = ''; } k = decodeURIComponent(kstr); v = decodeURIComponent(vstr); if (!hasOwnProperty(obj, k)) { obj[k] = v; } else if (Array.isArray(obj[k])) { obj[k].push(v); } else { obj[k] = [obj[k], v]; } } return obj; }; // Copyright Joyent, Inc. and other Node contributors. var stringifyPrimitive = function(v) { switch (typeof v) { case 'string': return v; case 'boolean': return v ? 'true' : 'false'; case 'number': return isFinite(v) ? v : ''; default: return ''; } }; var encode = function(obj, sep, eq, name) { sep = sep || '&'; eq = eq || '='; if (obj === null) { obj = undefined; } if (typeof obj === 'object') { return Object.keys(obj).map(function(k) { var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; if (Array.isArray(obj[k])) { return obj[k].map(function(v) { return ks + encodeURIComponent(stringifyPrimitive(v)); }).join(sep); } else { return ks + encodeURIComponent(stringifyPrimitive(obj[k])); } }).join(sep); } if (!name) return ''; return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj)); }; var querystring = createCommonjsModule(function (module, exports) { exports.decode = exports.parse = decode; exports.encode = exports.stringify = encode; }); var parse = urlParse; var resolve = urlResolve; var resolveObject = urlResolveObject; var format = urlFormat; var Url_1 = Url; function Url() { this.protocol = null; this.slashes = null; this.auth = null; this.host = null; this.port = null; this.hostname = null; this.hash = null; this.search = null; this.query = null; this.pathname = null; this.path = null; this.href = null; } // Reference: RFC 3986, RFC 1808, RFC 2396 // define these here so at least they only have to be // compiled once on the first module load. var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, // Special case for a simple path URL simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, // RFC 2396: characters reserved for delimiting URLs. // We actually just auto-escape these. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], // RFC 2396: characters not allowed for various reasons. unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), // Allowed by RFCs, but cause of XSS attacks. Always escape these. autoEscape = ['\''].concat(unwise), // Characters that are never ever allowed in a hostname. // Note that any invalid chars are also handled, but these // are the ones that are *expected* to be seen, so we fast-path // them. nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), hostEndingChars = ['/', '?', '#'], hostnameMaxLen = 255, hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, // protocols that can allow "unsafe" and "unwise" chars. unsafeProtocol = { 'javascript': true, 'javascript:': true }, // protocols that never have a hostname. hostlessProtocol = { 'javascript': true, 'javascript:': true }, // protocols that always contain a // bit. slashedProtocol = { 'http': true, 'https': true, 'ftp': true, 'gopher': true, 'file': true, 'http:': true, 'https:': true, 'ftp:': true, 'gopher:': true, 'file:': true }; function urlParse(url, parseQueryString, slashesDenoteHost) { if (url && util.isObject(url) && url instanceof Url) return url; var u = new Url; u.parse(url, parseQueryString, slashesDenoteHost); return u; } Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { if (!util.isString(url)) { throw new TypeError("Parameter 'url' must be a string, not " + typeof url); } // Copy chrome, IE, opera backslash-handling behavior. // Back slashes before the query string get converted to forward slashes // See: https://code.google.com/p/chromium/issues/detail?id=25916 var queryIndex = url.indexOf('?'), splitter = (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', uSplit = url.split(splitter), slashRegex = /\\/g; uSplit[0] = uSplit[0].replace(slashRegex, '/'); url = uSplit.join(splitter); var rest = url; // trim before proceeding. // This is to support parse stuff like " http://foo.com \n" rest = rest.trim(); if (!slashesDenoteHost && url.split('#').length === 1) { // Try fast path regexp var simplePath = simplePathPattern.exec(rest); if (simplePath) { this.path = rest; this.href = rest; this.pathname = simplePath[1]; if (simplePath[2]) { this.search = simplePath[2]; if (parseQueryString) { this.query = querystring.parse(this.search.substr(1)); } else { this.query = this.search.substr(1); } } else if (parseQueryString) { this.search = ''; this.query = {}; } return this; } } var proto = protocolPattern.exec(rest); if (proto) { proto = proto[0]; var lowerProto = proto.toLowerCase(); this.protocol = lowerProto; rest = rest.substr(proto.length); } // figure out if it's got a host // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's // how the browser resolves relative URLs. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { var slashes = rest.substr(0, 2) === '//'; if (slashes && !(proto && hostlessProtocol[proto])) { rest = rest.substr(2); this.slashes = true; } } if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { // there's a hostname. // the first instance of /, ?, ;, or # ends the host. // // If there is an @ in the hostname, then non-host chars *are* allowed // to the left of the last @ sign, unless some host-ending character // comes *before* the @-sign. // URLs are obnoxious. // // ex: // http://a@b@c/ => user:a@b host:c // http://a@b?@c => user:a host:c path:/?@c // v0.12 TODO(isaacs): This is not quite how Chrome does things. // Review our test case against browsers more comprehensively. // find the first instance of any hostEndingChars var hostEnd = -1; for (var i = 0; i < hostEndingChars.length; i++) { var hec = rest.indexOf(hostEndingChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // at this point, either we have an explicit point where the // auth portion cannot go past, or the last @ char is the decider. var auth, atSign; if (hostEnd === -1) { // atSign can be anywhere. atSign = rest.lastIndexOf('@'); } else { // atSign must be in auth portion. // http://a@b/c@d => host:b auth:a path:/c@d atSign = rest.lastIndexOf('@', hostEnd); } // Now we have a portion which is definitely the auth. // Pull that off. if (atSign !== -1) { auth = rest.slice(0, atSign); rest = rest.slice(atSign + 1); this.auth = decodeURIComponent(auth); } // the host is the remaining to the left of the first non-host char hostEnd = -1; for (var i = 0; i < nonHostChars.length; i++) { var hec = rest.indexOf(nonHostChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // if we still have not hit it, then the entire thing is a host. if (hostEnd === -1) hostEnd = rest.length; this.host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); // pull out port. this.parseHost(); // we've indicated that there is a hostname, // so even if it's empty, it has to be present. this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ] // assume that it's an IPv6 address. var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little. if (!ipv6Hostname) { var hostparts = this.hostname.split(/\./); for (var i = 0, l = hostparts.length; i < l; i++) { var part = hostparts[i]; if (!part) continue; if (!part.match(hostnamePartPattern)) { var newpart = ''; for (var j = 0, k = part.length; j < k; j++) { if (part.charCodeAt(j) > 127) { // we replace non-ASCII char with a temporary placeholder // we need this to make sure size of hostname is not // broken by replacing non-ASCII by nothing newpart += 'x'; } else { newpart += part[j]; } } // we test again with ASCII char only if (!newpart.match(hostnamePartPattern)) { var validParts = hostparts.slice(0, i); var notHost = hostparts.slice(i + 1); var bit = part.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); } if (notHost.length) { rest = '/' + notHost.join('.') + rest; } this.hostname = validParts.join('.'); break; } } } } if (this.hostname.length > hostnameMaxLen) { this.hostname = ''; } else { // hostnames are always lower case. this.hostname = this.hostname.toLowerCase(); } if (!ipv6Hostname) { // IDNA Support: Returns a punycoded representation of "domain". // It only converts parts of the domain name that // have non-ASCII characters, i.e. it doesn't matter if // you call it with a domain that already is ASCII-only. this.hostname = punycode.toASCII(this.hostname); } var p = this.port ? ':' + this.port : ''; var h = this.hostname || ''; this.host = h + p; this.href += this.host; // strip [ and ] from the hostname // the host field still retains them, though if (ipv6Hostname) { this.hostname = this.hostname.substr(1, this.hostname.length - 2); if (rest[0] !== '/') { rest = '/' + rest; } } } // now rest is set to the post-host stuff. // chop off any delim chars. if (!unsafeProtocol[lowerProto]) { // First, make 100% sure that any "autoEscape" chars get // escaped, even if encodeURIComponent doesn't think they // need to be. for (var i = 0, l = autoEscape.length; i < l; i++) { var ae = autoEscape[i]; if (rest.indexOf(ae) === -1) continue; var esc = encodeURIComponent(ae); if (esc === ae) { esc = escape(ae); } rest = rest.split(ae).join(esc); } } // chop off from the tail first. var hash = rest.indexOf('#'); if (hash !== -1) { // got a fragment string. this.hash = rest.substr(hash); rest = rest.slice(0, hash); } var qm = rest.indexOf('?'); if (qm !== -1) { this.search = rest.substr(qm); this.query = rest.substr(qm + 1); if (parseQueryString) { this.query = querystring.parse(this.query); } rest = rest.slice(0, qm); } else if (parseQueryString) { // no query string, but parseQueryString still requested this.search = ''; this.query = {}; } if (rest) this.pathname = rest; if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { this.pathname = '/'; } //to support http.request if (this.pathname || this.search) { var p = this.pathname || ''; var s = this.search || ''; this.path = p + s; } // finally, reconstruct the href based on what has been validated. this.href = this.format(); return this; }; // format a parsed object into a url string function urlFormat(obj) { // ensure it's an object, and not a string url. // If it's an obj, this is a no-op. // this way, you can call url_format() on strings // to clean up potentially wonky urls. if (util.isString(obj)) obj = urlParse(obj); if (!(obj instanceof Url)) return Url.prototype.format.call(obj); return obj.format(); } Url.prototype.format = function() { var auth = this.auth || ''; if (auth) { auth = encodeURIComponent(auth); auth = auth.replace(/%3A/i, ':'); auth += '@'; } var protocol = this.protocol || '', pathname = this.pathname || '', hash = this.hash || '', host = false, query = ''; if (this.host) { host = auth + this.host; } else if (this.hostname) { host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']'); if (this.port) { host += ':' + this.port; } } if (this.query && util.isObject(this.query) && Object.keys(this.query).length) { query = querystring.stringify(this.query); } var search = this.search || (query && ('?' + query)) || ''; if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. // unless they had them to begin with. if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) { host = '//' + (host || ''); if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; } else if (!host) { host = ''; } if (hash && hash.charAt(0) !== '#') hash = '#' + hash; if (search && search.charAt(0) !== '?') search = '?' + search; pathname = pathname.replace(/[?#]/g, function(match) { return encodeURIComponent(match); }); search = search.replace('#', '%23'); return protocol + host + pathname + search + hash; }; function urlResolve(source, relative) { return urlParse(source, false, true).resolve(relative); } Url.prototype.resolve = function(relative) { return this.resolveObject(urlParse(relative, false, true)).format(); }; function urlResolveObject(source, relative) { if (!source) return relative; return urlParse(source, false, true).resolveObject(relative); } Url.prototype.resolveObject = function(relative) { if (util.isString(relative)) { var rel = new Url(); rel.parse(relative, false, true); relative = rel; } var result = new Url(); var tkeys = Object.keys(this); for (var tk = 0; tk < tkeys.length; tk++) { var tkey = tkeys[tk]; result[tkey] = this[tkey]; } // hash is always overridden, no matter what. // even href="" will remove it. result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here. if (relative.href === '') { result.href = result.format(); return result; } // hrefs like //foo/bar always cut to the protocol. if (relative.slashes && !relative.protocol) { // take everything except the protocol from relative var rkeys = Object.keys(relative); for (var rk = 0; rk < rkeys.length; rk++) { var rkey = rkeys[rk]; if (rkey !== 'protocol') result[rkey] = relative[rkey]; } //urlParse appends trailing / to urls like http://www.example.com if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) { result.path = result.pathname = '/'; } result.href = result.format(); return result; } if (relative.protocol && relative.protocol !== result.protocol) { // if it's a known url protocol, then changing // the protocol does weird things // first, if it's not file:, then we MUST have a host, // and if there was a path // to begin with, then we MUST have a path. // if it is file:, then the host is dropped, // because that's known to be hostless. // anything else is assumed to be absolute. if (!slashedProtocol[relative.protocol]) { var keys = Object.keys(relative); for (var v = 0; v < keys.length; v++) { var k = keys[v]; result[k] = relative[k]; } result.href = result.format(); return result; } result.protocol = relative.protocol; if (!relative.host && !hostlessProtocol[relative.protocol]) { var relPath = (relative.pathname || '').split('/'); while (relPath.length && !(relative.host = relPath.shift())); if (!relative.host) relative.host = ''; if (!relative.hostname) relative.hostname = ''; if (relPath[0] !== '') relPath.unshift(''); if (relPath.length < 2) relPath.unshift(''); result.pathname = relPath.join('/'); } else { result.pathname = relative.pathname; } result.search = relative.search; result.query = relative.query; result.host = relative.host || ''; result.auth = relative.auth; result.hostname = relative.hostname || relative.host; result.port = relative.port; // to support http.request if (result.pathname || result.search) { var p = result.pathname || ''; var s = result.search || ''; result.path = p + s; } result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; } var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), isRelAbs = ( relative.host || relative.pathname && relative.pathname.charAt(0) === '/' ), mustEndAbs = (isRelAbs || isSourceAbs || (result.host && relative.pathname)), removeAllDots = mustEndAbs, srcPath = result.pathname && result.pathname.split('/') || [], relPath = relative.pathname && relative.pathname.split('/') || [], psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative // links like ../.. should be able // to crawl up to the hostname, as well. This is strange. // result.protocol has already been set by now. // Later on, put the first path part into the host field. if (psychotic) { result.hostname = ''; result.port = null; if (result.host) { if (srcPath[0] === '') srcPath[0] = result.host; else srcPath.unshift(result.host); } result.host = ''; if (relative.protocol) { relative.hostname = null; relative.port = null; if (relative.host) { if (relPath[0] === '') relPath[0] = relative.host; else relPath.unshift(relative.host); } relative.host = null; } mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); } if (isRelAbs) { // it's absolute. result.host = (relative.host || relative.host === '') ? relative.host : result.host; result.hostname = (relative.hostname || relative.hostname === '') ? relative.hostname : result.hostname; result.search = relative.search; result.query = relative.query; srcPath = relPath; // fall through to the dot-handling below. } else if (relPath.length) { // it's relative // throw away the existing file, and take the new path instead. if (!srcPath) srcPath = []; srcPath.pop(); srcPath = srcPath.concat(relPath); result.search = relative.search; result.query = relative.query; } else if (!util.isNullOrUndefined(relative.search)) { // just pull out the search. // like href='?foo'. // Put this after the other two cases because it simplifies the booleans if (psychotic) { result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host //this especially happens in cases like //url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } result.search = relative.search; result.query = relative.query; //to support http.request if (!util.isNull(result.pathname) || !util.isNull(result.search)) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.href = result.format(); return result; } if (!srcPath.length) { // no path at all. easy. // we've already handled the other stuff above. result.pathname = null; //to support http.request if (result.search) { result.path = '/' + result.search; } else { result.path = null; } result.href = result.format(); return result; } // if a url ENDs in . or .., then it must get a trailing slash. // however, if it ends in anything else non-slashy, // then it must NOT get a trailing slash. var last = srcPath.slice(-1)[0]; var hasTrailingSlash = ( (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''); // strip single dots, resolve double dots to parent dir // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = srcPath.length; i >= 0; i--) { last = srcPath[i]; if (last === '.') { srcPath.splice(i, 1); } else if (last === '..') { srcPath.splice(i, 1); up++; } else if (up) { srcPath.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (!mustEndAbs && !removeAllDots) { for (; up--; up) { srcPath.unshift('..'); } } if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { srcPath.unshift(''); } if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { srcPath.push(''); } var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); // put the host back if (psychotic) { result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host //this especially happens in cases like //url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } mustEndAbs = mustEndAbs || (result.host && srcPath.length); if (mustEndAbs && !isAbsolute) { srcPath.unshift(''); } if (!srcPath.length) { result.pathname = null; result.path = null; } else { result.pathname = srcPath.join('/'); } //to support request.http if (!util.isNull(result.pathname) || !util.isNull(result.search)) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.auth = relative.auth || result.auth; result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; }; Url.prototype.parseHost = function() { var host = this.host; var port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ':') { this.port = port.substr(1); } host = host.substr(0, host.length - port.length); } if (host) this.hostname = host; }; var url = { parse: parse, resolve: resolve, resolveObject: resolveObject, format: format, Url: Url_1 }; var pdf = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { module.exports = factory(); })(commonjsGlobal, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __w_pdfjs_require__.m = modules; /******/ /******/ // expose the module cache /******/ __w_pdfjs_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __w_pdfjs_require__.d = function(exports, name, getter) { /******/ if(!__w_pdfjs_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __w_pdfjs_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __w_pdfjs_require__.t = function(value, mode) { /******/ if(mode & 1) value = __w_pdfjs_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __w_pdfjs_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __w_pdfjs_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __w_pdfjs_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __w_pdfjs_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "addLinkAttributes", { enumerable: true, get: function () { return _display_utils.addLinkAttributes; } }); Object.defineProperty(exports, "getFilenameFromUrl", { enumerable: true, get: function () { return _display_utils.getFilenameFromUrl; } }); Object.defineProperty(exports, "LinkTarget", { enumerable: true, get: function () { return _display_utils.LinkTarget; } }); Object.defineProperty(exports, "loadScript", { enumerable: true, get: function () { return _display_utils.loadScript; } }); Object.defineProperty(exports, "PDFDateString", { enumerable: true, get: function () { return _display_utils.PDFDateString; } }); Object.defineProperty(exports, "RenderingCancelledException", { enumerable: true, get: function () { return _display_utils.RenderingCancelledException; } }); Object.defineProperty(exports, "build", { enumerable: true, get: function () { return _api.build; } }); Object.defineProperty(exports, "getDocument", { enumerable: true, get: function () { return _api.getDocument; } }); Object.defineProperty(exports, "LoopbackPort", { enumerable: true, get: function () { return _api.LoopbackPort; } }); Object.defineProperty(exports, "PDFDataRangeTransport", { enumerable: true, get: function () { return _api.PDFDataRangeTransport; } }); Object.defineProperty(exports, "PDFWorker", { enumerable: true, get: function () { return _api.PDFWorker; } }); Object.defineProperty(exports, "version", { enumerable: true, get: function () { return _api.version; } }); Object.defineProperty(exports, "CMapCompressionType", { enumerable: true, get: function () { return _util.CMapCompressionType; } }); Object.defineProperty(exports, "createObjectURL", { enumerable: true, get: function () { return _util.createObjectURL; } }); Object.defineProperty(exports, "createPromiseCapability", { enumerable: true, get: function () { return _util.createPromiseCapability; } }); Object.defineProperty(exports, "createValidAbsoluteUrl", { enumerable: true, get: function () { return _util.createValidAbsoluteUrl; } }); Object.defineProperty(exports, "InvalidPDFException", { enumerable: true, get: function () { return _util.InvalidPDFException; } }); Object.defineProperty(exports, "MissingPDFException", { enumerable: true, get: function () { return _util.MissingPDFException; } }); Object.defineProperty(exports, "OPS", { enumerable: true, get: function () { return _util.OPS; } }); Object.defineProperty(exports, "PasswordResponses", { enumerable: true, get: function () { return _util.PasswordResponses; } }); Object.defineProperty(exports, "PermissionFlag", { enumerable: true, get: function () { return _util.PermissionFlag; } }); Object.defineProperty(exports, "removeNullCharacters", { enumerable: true, get: function () { return _util.removeNullCharacters; } }); Object.defineProperty(exports, "shadow", { enumerable: true, get: function () { return _util.shadow; } }); Object.defineProperty(exports, "UnexpectedResponseException", { enumerable: true, get: function () { return _util.UnexpectedResponseException; } }); Object.defineProperty(exports, "UNSUPPORTED_FEATURES", { enumerable: true, get: function () { return _util.UNSUPPORTED_FEATURES; } }); Object.defineProperty(exports, "Util", { enumerable: true, get: function () { return _util.Util; } }); Object.defineProperty(exports, "VerbosityLevel", { enumerable: true, get: function () { return _util.VerbosityLevel; } }); Object.defineProperty(exports, "AnnotationLayer", { enumerable: true, get: function () { return _annotation_layer.AnnotationLayer; } }); Object.defineProperty(exports, "apiCompatibilityParams", { enumerable: true, get: function () { return _api_compatibility.apiCompatibilityParams; } }); Object.defineProperty(exports, "GlobalWorkerOptions", { enumerable: true, get: function () { return _worker_options.GlobalWorkerOptions; } }); Object.defineProperty(exports, "renderTextLayer", { enumerable: true, get: function () { return _text_layer.renderTextLayer; } }); Object.defineProperty(exports, "SVGGraphics", { enumerable: true, get: function () { return _svg.SVGGraphics; } }); var _display_utils = __w_pdfjs_require__(1); var _api = __w_pdfjs_require__(5); var _util = __w_pdfjs_require__(2); var _annotation_layer = __w_pdfjs_require__(19); var _api_compatibility = __w_pdfjs_require__(9); var _worker_options = __w_pdfjs_require__(12); var _text_layer = __w_pdfjs_require__(20); var _svg = __w_pdfjs_require__(21); { const { isNodeJS } = __w_pdfjs_require__(4); if (isNodeJS) { const PDFNodeStream = __w_pdfjs_require__(22).PDFNodeStream; (0, _api.setPDFNetworkStreamFactory)(params => { return new PDFNodeStream(params); }); } else { const PDFNetworkStream = __w_pdfjs_require__(25).PDFNetworkStream; let PDFFetchStream; if ((0, _display_utils.isFetchSupported)()) { PDFFetchStream = __w_pdfjs_require__(26).PDFFetchStream; } (0, _api.setPDFNetworkStreamFactory)(params => { if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) { return new PDFFetchStream(params); } return new PDFNetworkStream(params); }); } } /***/ }), /* 1 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.addLinkAttributes = addLinkAttributes; exports.getFilenameFromUrl = getFilenameFromUrl; exports.isFetchSupported = isFetchSupported; exports.isValidFetchUrl = isValidFetchUrl; exports.loadScript = loadScript; exports.deprecated = deprecated; exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.BaseCMapReaderFactory = exports.DOMCanvasFactory = exports.BaseCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0; var _util = __w_pdfjs_require__(2); const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; const SVG_NS = "http://www.w3.org/2000/svg"; class BaseCanvasFactory { constructor() { if (this.constructor === BaseCanvasFactory) { (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); } } create(width, height) { (0, _util.unreachable)("Abstract method `create` called."); } reset(canvasAndContext, width, height) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; } destroy(canvasAndContext) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; } } exports.BaseCanvasFactory = BaseCanvasFactory; class DOMCanvasFactory extends BaseCanvasFactory { constructor({ ownerDocument = globalThis.document } = {}) { super(); this._document = ownerDocument; } create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } const canvas = this._document.createElement("canvas"); const context = canvas.getContext("2d"); canvas.width = width; canvas.height = height; return { canvas, context }; } } exports.DOMCanvasFactory = DOMCanvasFactory; class BaseCMapReaderFactory { constructor({ baseUrl = null, isCompressed = false }) { if (this.constructor === BaseCMapReaderFactory) { (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); } this.baseUrl = baseUrl; this.isCompressed = isCompressed; } async fetch({ name }) { if (!this.baseUrl) { throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); } if (!name) { throw new Error("CMap name must be specified."); } const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; return this._fetchData(url, compressionType).catch(reason => { throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); }); } _fetchData(url, compressionType) { (0, _util.unreachable)("Abstract method `_fetchData` called."); } } exports.BaseCMapReaderFactory = BaseCMapReaderFactory; class DOMCMapReaderFactory extends BaseCMapReaderFactory { _fetchData(url, compressionType) { if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) { return fetch(url).then(async response => { if (!response.ok) { throw new Error(response.statusText); } let cMapData; if (this.isCompressed) { cMapData = new Uint8Array(await response.arrayBuffer()); } else { cMapData = (0, _util.stringToBytes)(await response.text()); } return { cMapData, compressionType }; }); } return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.open("GET", url, true); if (this.isCompressed) { request.responseType = "arraybuffer"; } request.onreadystatechange = () => { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { let cMapData; if (this.isCompressed && request.response) { cMapData = new Uint8Array(request.response); } else if (!this.isCompressed && request.responseText) { cMapData = (0, _util.stringToBytes)(request.responseText); } if (cMapData) { resolve({ cMapData, compressionType }); return; } } reject(new Error(request.statusText)); }; request.send(null); }); } } exports.DOMCMapReaderFactory = DOMCMapReaderFactory; class DOMSVGFactory { create(width, height) { (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions"); const svg = document.createElementNS(SVG_NS, "svg:svg"); svg.setAttribute("version", "1.1"); svg.setAttribute("width", width + "px"); svg.setAttribute("height", height + "px"); svg.setAttribute("preserveAspectRatio", "none"); svg.setAttribute("viewBox", "0 0 " + width + " " + height); return svg; } createElement(type) { (0, _util.assert)(typeof type === "string", "Invalid SVG element type"); return document.createElementNS(SVG_NS, type); } } exports.DOMSVGFactory = DOMSVGFactory; class PageViewport { constructor({ viewBox, scale, rotation, offsetX = 0, offsetY = 0, dontFlip = false }) { this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; const centerX = (viewBox[2] + viewBox[0]) / 2; const centerY = (viewBox[3] + viewBox[1]) / 2; let rotateA, rotateB, rotateC, rotateD; rotation = rotation % 360; rotation = rotation < 0 ? rotation + 360 : rotation; switch (rotation) { case 180: rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; break; case 90: rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; break; case 270: rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; break; case 0: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; default: throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } let offsetCanvasX, offsetCanvasY; let width, height; if (rotateA === 0) { offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; width = Math.abs(viewBox[3] - viewBox[1]) * scale; height = Math.abs(viewBox[2] - viewBox[0]) * scale; } else { offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; width = Math.abs(viewBox[2] - viewBox[0]) * scale; height = Math.abs(viewBox[3] - viewBox[1]) * scale; } this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; this.width = width; this.height = height; } clone({ scale = this.scale, rotation = this.rotation, offsetX = this.offsetX, offsetY = this.offsetY, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.viewBox.slice(), scale, rotation, offsetX, offsetY, dontFlip }); } convertToViewportPoint(x, y) { return _util.Util.applyTransform([x, y], this.transform); } convertToViewportRectangle(rect) { const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } convertToPdfPoint(x, y) { return _util.Util.applyInverseTransform([x, y], this.transform); } } exports.PageViewport = PageViewport; class RenderingCancelledException extends _util.BaseException { constructor(msg, type) { super(msg); this.type = type; } } exports.RenderingCancelledException = RenderingCancelledException; const LinkTarget = { NONE: 0, SELF: 1, BLANK: 2, PARENT: 3, TOP: 4 }; exports.LinkTarget = LinkTarget; function addLinkAttributes(link, { url, target, rel, enabled = true } = {}) { (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); const urlNullRemoved = (0, _util.removeNullCharacters)(url); if (enabled) { link.href = link.title = urlNullRemoved; } else { link.href = ""; link.title = `Disabled: ${urlNullRemoved}`; link.onclick = () => { return false; }; } let targetStr = ""; switch (target) { case LinkTarget.NONE: break; case LinkTarget.SELF: targetStr = "_self"; break; case LinkTarget.BLANK: targetStr = "_blank"; break; case LinkTarget.PARENT: targetStr = "_parent"; break; case LinkTarget.TOP: targetStr = "_top"; break; } link.target = targetStr; link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; } function getFilenameFromUrl(url) { const anchor = url.indexOf("#"); const query = url.indexOf("?"); const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); return url.substring(url.lastIndexOf("/", end) + 1, end); } class StatTimer { constructor() { this.started = Object.create(null); this.times = []; } time(name) { if (name in this.started) { (0, _util.warn)(`Timer is already running for ${name}`); } this.started[name] = Date.now(); } timeEnd(name) { if (!(name in this.started)) { (0, _util.warn)(`Timer has not been started for ${name}`); } this.times.push({ name, start: this.started[name], end: Date.now() }); delete this.started[name]; } toString() { const outBuf = []; let longest = 0; for (const time of this.times) { const name = time.name; if (name.length > longest) { longest = name.length; } } for (const time of this.times) { const duration = time.end - time.start; outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); } return outBuf.join(""); } } exports.StatTimer = StatTimer; function isFetchSupported() { return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined"; } function isValidFetchUrl(url, baseUrl) { try { const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url); return protocol === "http:" || protocol === "https:"; } catch (ex) { return false; } } function loadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = src; script.onload = resolve; script.onerror = function () { reject(new Error(`Cannot load script at: ${script.src}`)); }; (document.head || document.documentElement).appendChild(script); }); } function deprecated(details) { console.log("Deprecated API usage: " + details); } let pdfDateStringRegex; class PDFDateString { static toDateObject(input) { if (!input || !(0, _util.isString)(input)) { return null; } if (!pdfDateStringRegex) { pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); } const matches = pdfDateStringRegex.exec(input); if (!matches) { return null; } const year = parseInt(matches[1], 10); let month = parseInt(matches[2], 10); month = month >= 1 && month <= 12 ? month - 1 : 0; let day = parseInt(matches[3], 10); day = day >= 1 && day <= 31 ? day : 1; let hour = parseInt(matches[4], 10); hour = hour >= 0 && hour <= 23 ? hour : 0; let minute = parseInt(matches[5], 10); minute = minute >= 0 && minute <= 59 ? minute : 0; let second = parseInt(matches[6], 10); second = second >= 0 && second <= 59 ? second : 0; const universalTimeRelation = matches[7] || "Z"; let offsetHour = parseInt(matches[8], 10); offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; let offsetMinute = parseInt(matches[9], 10) || 0; offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; if (universalTimeRelation === "-") { hour += offsetHour; minute += offsetMinute; } else if (universalTimeRelation === "+") { hour -= offsetHour; minute -= offsetMinute; } return new Date(Date.UTC(year, month, day, hour, minute, second)); } } exports.PDFDateString = PDFDateString; /***/ }), /* 2 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isBool = isBool; exports.isNum = isNum; exports.isString = isString; exports.isSameOrigin = isSameOrigin; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF8String = stringToUTF8String; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.unreachable = unreachable; exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0; __w_pdfjs_require__(3); const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; const TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; const ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; const AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; const AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; const AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; const AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; const AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; const AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; const AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; const AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; const StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; const FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; const CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; const OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; const UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; let verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl) { if (!url) { return null; } try { const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value, enumerable: true, configurable: true, writable: false }); return value; } const BaseException = function BaseExceptionClosure() { function BaseException(message) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = this.constructor.name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; class PasswordException extends BaseException { constructor(msg, code) { super(msg); this.code = code; } } exports.PasswordException = PasswordException; class UnknownErrorException extends BaseException { constructor(msg, details) { super(msg); this.details = details; } } exports.UnknownErrorException = UnknownErrorException; class InvalidPDFException extends BaseException {} exports.InvalidPDFException = InvalidPDFException; class MissingPDFException extends BaseException {} exports.MissingPDFException = MissingPDFException; class UnexpectedResponseException extends BaseException { constructor(msg, status) { super(msg); this.status = status; } } exports.UnexpectedResponseException = UnexpectedResponseException; class FormatError extends BaseException {} exports.FormatError = FormatError; class AbortException extends BaseException {} exports.AbortException = AbortException; const NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } const strBuf = []; for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); const length = str.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { const length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } let resultLength = 0; for (let i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } let pos = 0; const data = new Uint8Array(resultLength); for (let i = 0; i < length; i++) { let item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } const itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } const IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } const IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"]; class Util { static makeCssRgb(r, g, b) { rgbBuf[1] = r; rgbBuf[3] = g; rgbBuf[5] = b; return rgbBuf.join(""); } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } static getAxialAlignedBoundingBox(r, m) { const p1 = Util.applyTransform(r, m); const p2 = Util.applyTransform(r.slice(2, 4), m); const p3 = Util.applyTransform([r[0], r[3]], m); const p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } static apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; const b = m[0] * transpose[1] + m[1] * transpose[3]; const c = m[2] * transpose[0] + m[3] * transpose[2]; const d = m[2] * transpose[1] + m[3] * transpose[3]; const first = (a + d) / 2; const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; const sx = first + second || 1; const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } static normalizeRect(rect) { const r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } static intersect(rect1, rect2) { function compare(a, b) { return a - b; } const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); const result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } } exports.Util = Util; const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; function stringToPDFString(str) { const length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); } } else { for (let i = 0; i < length; ++i) { const code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([\(\)\\])/g, "\\$1"); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return typeof v === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } return arr1.every(function (element, index) { return element === arr2[index]; }); } function getModificationDate(date = new Date(Date.now())) { const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), (date.getUTCDate() + 1).toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { const capability = Object.create(null); let isSettled = false; Object.defineProperty(capability, "settled", { get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } const createObjectURL = function createObjectURLClosure() { const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; return function createObjectURL(data, contentType, forceDataSchema = false) { if (!forceDataSchema && URL.createObjectURL) { const blob = new Blob([data], { type: contentType }); return URL.createObjectURL(blob); } let buffer = `data:${contentType};base64,`; for (let i = 0, ii = data.length; i < ii; i += 3) { const b1 = data[i] & 0xff; const b2 = data[i + 1] & 0xff; const b3 = data[i + 2] & 0xff; const d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; const d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; /***/ }), /* 3 */ /***/ (function(module, exports, __w_pdfjs_require__) { __w_pdfjs_require__(4); /***/ }), /* 4 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.isNodeJS = void 0; const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 5 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getDocument = getDocument; exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); var _font_loader = __w_pdfjs_require__(6); var _node_utils = __w_pdfjs_require__(7); var _annotation_storage = __w_pdfjs_require__(8); var _api_compatibility = __w_pdfjs_require__(9); var _canvas = __w_pdfjs_require__(10); var _worker_options = __w_pdfjs_require__(12); var _is_node = __w_pdfjs_require__(4); var _message_handler = __w_pdfjs_require__(13); var _metadata = __w_pdfjs_require__(14); var _optional_content_config = __w_pdfjs_require__(16); var _transport_stream = __w_pdfjs_require__(17); var _webgl = __w_pdfjs_require__(18); const DEFAULT_RANGE_CHUNK_SIZE = 65536; const RENDERING_CANCELLED_TIMEOUT = 100; const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; let createPDFNetworkStream; function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { createPDFNetworkStream = pdfNetworkStreamFactory; } function getDocument(src) { const task = new PDFDocumentLoadingTask(); let source; if (typeof src === "string") { source = { url: src }; } else if ((0, _util.isArrayBuffer)(src)) { source = { data: src }; } else if (src instanceof PDFDataRangeTransport) { source = { range: src }; } else { if (typeof src !== "object") { throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object"); } if (!src.url && !src.data && !src.range) { throw new Error("Invalid parameter object: need either .data, .range or .url"); } source = src; } const params = Object.create(null); let rangeTransport = null, worker = null; for (const key in source) { if (key === "url" && typeof window !== "undefined") { params[key] = new URL(source[key], window.location).href; continue; } else if (key === "range") { rangeTransport = source[key]; continue; } else if (key === "worker") { worker = source[key]; continue; } else if (key === "data" && !(source[key] instanceof Uint8Array)) { const pdfBytes = source[key]; if (typeof pdfBytes === "string") { params[key] = (0, _util.stringToBytes)(pdfBytes); } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) { params[key] = new Uint8Array(pdfBytes); } else if ((0, _util.isArrayBuffer)(pdfBytes)) { params[key] = new Uint8Array(pdfBytes); } else { throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property."); } continue; } params[key] = source[key]; } params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; params.ignoreErrors = params.stopAtErrors !== true; params.fontExtraProperties = params.fontExtraProperties === true; params.pdfBug = params.pdfBug === true; if (!Number.isInteger(params.maxImageSize)) { params.maxImageSize = -1; } if (typeof params.isEvalSupported !== "boolean") { params.isEvalSupported = true; } if (typeof params.disableFontFace !== "boolean") { params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; } if (typeof params.ownerDocument === "undefined") { params.ownerDocument = globalThis.document; } if (typeof params.disableRange !== "boolean") { params.disableRange = false; } if (typeof params.disableStream !== "boolean") { params.disableStream = false; } if (typeof params.disableAutoFetch !== "boolean") { params.disableAutoFetch = false; } (0, _util.setVerbosityLevel)(params.verbosity); if (!worker) { const workerParams = { verbosity: params.verbosity, port: _worker_options.GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } const docId = task.docId; worker.promise.then(function () { if (task.destroyed) { throw new Error("Loading aborted"); } const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); const networkStreamPromise = new Promise(function (resolve) { let networkStream; if (rangeTransport) { networkStream = new _transport_stream.PDFDataTransportStream({ length: params.length, initialData: params.initialData, progressiveDone: params.progressiveDone, disableRange: params.disableRange, disableStream: params.disableStream }, rangeTransport); } else if (!params.data) { networkStream = createPDFNetworkStream({ url: params.url, length: params.length, httpHeaders: params.httpHeaders, withCredentials: params.withCredentials, rangeChunkSize: params.rangeChunkSize, disableRange: params.disableRange, disableStream: params.disableStream }); } resolve(networkStream); }); return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { if (task.destroyed) { throw new Error("Loading aborted"); } const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); messageHandler.postMessageTransfers = worker.postMessageTransfers; const transport = new WorkerTransport(messageHandler, task, networkStream, params); task._transport = transport; messageHandler.send("Ready", null); }); }).catch(task._capability.reject); return task; } function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { if (worker.destroyed) { return Promise.reject(new Error("Worker was destroyed")); } if (pdfDataRangeTransport) { source.length = pdfDataRangeTransport.length; source.initialData = pdfDataRangeTransport.initialData; source.progressiveDone = pdfDataRangeTransport.progressiveDone; } return worker.messageHandler.sendWithPromise("GetDocRequest", { docId, apiVersion: '2.6.347', source: { data: source.data, url: source.url, password: source.password, disableAutoFetch: source.disableAutoFetch, rangeChunkSize: source.rangeChunkSize, length: source.length }, maxImageSize: source.maxImageSize, disableFontFace: source.disableFontFace, postMessageTransfers: worker.postMessageTransfers, docBaseUrl: source.docBaseUrl, ignoreErrors: source.ignoreErrors, isEvalSupported: source.isEvalSupported, fontExtraProperties: source.fontExtraProperties }).then(function (workerId) { if (worker.destroyed) { throw new Error("Worker was destroyed"); } return workerId; }); } const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { let nextDocumentId = 0; class PDFDocumentLoadingTask { constructor() { this._capability = (0, _util.createPromiseCapability)(); this._transport = null; this._worker = null; this.docId = "d" + nextDocumentId++; this.destroyed = false; this.onPassword = null; this.onProgress = null; this.onUnsupportedFeature = null; } get promise() { return this._capability.promise; } destroy() { this.destroyed = true; const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); return transportDestroyed.then(() => { this._transport = null; if (this._worker) { this._worker.destroy(); this._worker = null; } }); } } return PDFDocumentLoadingTask; }(); class PDFDataRangeTransport { constructor(length, initialData, progressiveDone = false) { this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; this._readyCapability = (0, _util.createPromiseCapability)(); } addRangeListener(listener) { this._rangeListeners.push(listener); } addProgressListener(listener) { this._progressListeners.push(listener); } addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } onDataRange(begin, chunk) { for (const listener of this._rangeListeners) { listener(begin, chunk); } } onDataProgress(loaded, total) { this._readyCapability.promise.then(() => { for (const listener of this._progressListeners) { listener(loaded, total); } }); } onDataProgressiveRead(chunk) { this._readyCapability.promise.then(() => { for (const listener of this._progressiveReadListeners) { listener(chunk); } }); } onDataProgressiveDone() { this._readyCapability.promise.then(() => { for (const listener of this._progressiveDoneListeners) { listener(); } }); } transportReady() { this._readyCapability.resolve(); } requestDataRange(begin, end) { (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); } abort() {} } exports.PDFDataRangeTransport = PDFDataRangeTransport; class PDFDocumentProxy { constructor(pdfInfo, transport) { this._pdfInfo = pdfInfo; this._transport = transport; } get annotationStorage() { return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); } get numPages() { return this._pdfInfo.numPages; } get fingerprint() { return this._pdfInfo.fingerprint; } getPage(pageNumber) { return this._transport.getPage(pageNumber); } getPageIndex(ref) { return this._transport.getPageIndex(ref); } getDestinations() { return this._transport.getDestinations(); } getDestination(id) { return this._transport.getDestination(id); } getPageLabels() { return this._transport.getPageLabels(); } getPageLayout() { return this._transport.getPageLayout(); } getPageMode() { return this._transport.getPageMode(); } getViewerPreferences() { return this._transport.getViewerPreferences(); } getOpenAction() { return this._transport.getOpenAction(); } getAttachments() { return this._transport.getAttachments(); } getJavaScript() { return this._transport.getJavaScript(); } getOutline() { return this._transport.getOutline(); } getOptionalContentConfig() { return this._transport.getOptionalContentConfig(); } getPermissions() { return this._transport.getPermissions(); } getMetadata() { return this._transport.getMetadata(); } getData() { return this._transport.getData(); } getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } getStats() { return this._transport.getStats(); } cleanup() { return this._transport.startCleanup(); } destroy() { return this.loadingTask.destroy(); } get loadingParams() { return this._transport.loadingParams; } get loadingTask() { return this._transport.loadingTask; } saveDocument(annotationStorage) { return this._transport.saveDocument(annotationStorage); } } exports.PDFDocumentProxy = PDFDocumentProxy; class PDFPageProxy { constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { this._pageIndex = pageIndex; this._pageInfo = pageInfo; this._ownerDocument = ownerDocument; this._transport = transport; this._stats = pdfBug ? new _display_utils.StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this.cleanupAfterRender = false; this.pendingCleanup = false; this._intentStates = new Map(); this.destroyed = false; } get pageNumber() { return this._pageIndex + 1; } get rotate() { return this._pageInfo.rotate; } get ref() { return this._pageInfo.ref; } get userUnit() { return this._pageInfo.userUnit; } get view() { return this._pageInfo.view; } getViewport({ scale, rotation = this.rotate, offsetX = 0, offsetY = 0, dontFlip = false } = {}) { return new _display_utils.PageViewport({ viewBox: this.view, scale, rotation, offsetX, offsetY, dontFlip }); } getAnnotations({ intent = null } = {}) { if (!this.annotationsPromise || this.annotationsIntent !== intent) { this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent); this.annotationsIntent = intent; } return this.annotationsPromise; } render({ canvasContext, viewport, intent = "display", enableWebGL = false, renderInteractiveForms = false, transform = null, imageLayer = null, canvasFactory = null, background = null, annotationStorage = null, optionalContentConfigPromise = null }) { if (this._stats) { this._stats.time("Overall"); } const renderingIntent = intent === "print" ? "print" : "display"; this.pendingCleanup = false; if (!optionalContentConfigPromise) { optionalContentConfigPromise = this._transport.getOptionalContentConfig(); } let intentState = this._intentStates.get(renderingIntent); if (!intentState) { intentState = Object.create(null); this._intentStates.set(renderingIntent, intentState); } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ ownerDocument: this._ownerDocument }); const webGLContext = new _webgl.WebGLContext({ enable: enableWebGL }); if (!intentState.displayReadyCapability) { intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList({ pageIndex: this._pageIndex, intent: renderingIntent, renderInteractiveForms: renderInteractiveForms === true, annotationStorage: annotationStorage && annotationStorage.getAll() || null }); } const complete = error => { const i = intentState.renderTasks.indexOf(internalRenderTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } if (this.cleanupAfterRender || renderingIntent === "print") { this.pendingCleanup = true; } this._tryCleanup(); if (error) { internalRenderTask.capability.reject(error); this._abortOperatorList({ intentState, reason: error }); } else { internalRenderTask.capability.resolve(); } if (this._stats) { this._stats.timeEnd("Rendering"); this._stats.timeEnd("Overall"); } }; const internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext, viewport, transform, imageLayer, background }, objs: this.objs, commonObjs: this.commonObjs, operatorList: intentState.operatorList, pageIndex: this._pageIndex, canvasFactory: canvasFactoryInstance, webGLContext, useRequestAnimationFrame: renderingIntent !== "print", pdfBug: this._pdfBug }); if (!intentState.renderTasks) { intentState.renderTasks = []; } intentState.renderTasks.push(internalRenderTask); const renderTask = internalRenderTask.task; Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { if (this.pendingCleanup) { complete(); return; } if (this._stats) { this._stats.time("Rendering"); } internalRenderTask.initializeGraphics({ transparency, optionalContentConfig }); internalRenderTask.operatorListChanged(); }).catch(complete); return renderTask; } getOperatorList() { function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); const i = intentState.renderTasks.indexOf(opListTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } } } const renderingIntent = "oplist"; let intentState = this._intentStates.get(renderingIntent); if (!intentState) { intentState = Object.create(null); this._intentStates.set(renderingIntent, intentState); } let opListTask; if (!intentState.opListReadCapability) { opListTask = Object.create(null); opListTask.operatorListChanged = operatorListChanged; intentState.opListReadCapability = (0, _util.createPromiseCapability)(); intentState.renderTasks = []; intentState.renderTasks.push(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList({ pageIndex: this._pageIndex, intent: renderingIntent }); } return intentState.opListReadCapability.promise; } streamTextContent({ normalizeWhitespace = false, disableCombineTextItems = false } = {}) { const TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, normalizeWhitespace: normalizeWhitespace === true, combineTextItems: disableCombineTextItems !== true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size(textContent) { return textContent.items.length; } }); } getTextContent(params = {}) { const readableStream = this.streamTextContent(params); return new Promise(function (resolve, reject) { function pump() { reader.read().then(function ({ value, done }) { if (done) { resolve(textContent); return; } Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); } const reader = readableStream.getReader(); const textContent = { items: [], styles: Object.create(null) }; pump(); }); } _destroy() { this.destroyed = true; this._transport.pageCache[this._pageIndex] = null; const waitOn = []; for (const [intent, intentState] of this._intentStates) { this._abortOperatorList({ intentState, reason: new Error("Page was destroyed."), force: true }); if (intent === "oplist") { continue; } for (const internalRenderTask of intentState.renderTasks) { waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } this.objs.clear(); this.annotationsPromise = null; this.pendingCleanup = false; return Promise.all(waitOn); } cleanup(resetStats = false) { this.pendingCleanup = true; return this._tryCleanup(resetStats); } _tryCleanup(resetStats = false) { if (!this.pendingCleanup) { return false; } for (const { renderTasks, operatorList } of this._intentStates.values()) { if (renderTasks.length !== 0 || !operatorList.lastChunk) { return false; } } this._intentStates.clear(); this.objs.clear(); this.annotationsPromise = null; if (resetStats && this._stats) { this._stats = new _display_utils.StatTimer(); } this.pendingCleanup = false; return true; } _startRenderPage(transparency, intent) { const intentState = this._intentStates.get(intent); if (!intentState) { return; } if (this._stats) { this._stats.timeEnd("Page Request"); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.resolve(transparency); } } _renderPageChunk(operatorListChunk, intentState) { for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } intentState.operatorList.lastChunk = operatorListChunk.lastChunk; for (let i = 0; i < intentState.renderTasks.length; i++) { intentState.renderTasks[i].operatorListChanged(); } if (operatorListChunk.lastChunk) { this._tryCleanup(); } } _pumpOperatorList(args) { (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.'); const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args); const reader = readableStream.getReader(); const intentState = this._intentStates.get(args.intent); intentState.streamReader = reader; const pump = () => { reader.read().then(({ value, done }) => { if (done) { intentState.streamReader = null; return; } if (this._transport.destroyed) { return; } this._renderPageChunk(value, intentState); pump(); }, reason => { intentState.streamReader = null; if (this._transport.destroyed) { return; } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (let i = 0; i < intentState.renderTasks.length; i++) { intentState.renderTasks[i].operatorListChanged(); } this._tryCleanup(); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { intentState.opListReadCapability.reject(reason); } else { throw reason; } }); }; pump(); } _abortOperatorList({ intentState, reason, force = false }) { (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.'); if (!intentState.streamReader) { return; } if (!force) { if (intentState.renderTasks.length !== 0) { return; } if (reason instanceof _display_utils.RenderingCancelledException) { intentState.streamReaderCancelTimeout = setTimeout(() => { this._abortOperatorList({ intentState, reason, force: true }); intentState.streamReaderCancelTimeout = null; }, RENDERING_CANCELLED_TIMEOUT); return; } } intentState.streamReader.cancel(new _util.AbortException(reason && reason.message)); intentState.streamReader = null; if (this._transport.destroyed) { return; } for (const [intent, curIntentState] of this._intentStates) { if (curIntentState === intentState) { this._intentStates.delete(intent); break; } } this.cleanup(); } get stats() { return this._stats; } } exports.PDFPageProxy = PDFPageProxy; class LoopbackPort { constructor(defer = true) { this._listeners = []; this._defer = defer; this._deferred = Promise.resolve(undefined); } postMessage(obj, transfers) { function cloneValue(value) { if (typeof value !== "object" || value === null) { return value; } if (cloned.has(value)) { return cloned.get(value); } let buffer, result; if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { const transferable = transfers && transfers.includes(buffer); if (transferable) { result = new value.constructor(buffer, value.byteOffset, value.byteLength); } else { result = new value.constructor(value); } cloned.set(value, result); return result; } result = Array.isArray(value) ? [] : {}; cloned.set(value, result); for (const i in value) { let desc, p = value; while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { p = Object.getPrototypeOf(p); } if (typeof desc.value === "undefined") { continue; } if (typeof desc.value === "function") { if (value.hasOwnProperty && value.hasOwnProperty(i)) { throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`); } continue; } result[i] = cloneValue(desc.value); } return result; } if (!this._defer) { this._listeners.forEach(listener => { listener.call(this, { data: obj }); }); return; } const cloned = new WeakMap(); const e = { data: cloneValue(obj) }; this._deferred.then(() => { this._listeners.forEach(listener => { listener.call(this, e); }); }); } addEventListener(name, listener) { this._listeners.push(listener); } removeEventListener(name, listener) { const i = this._listeners.indexOf(listener); this._listeners.splice(i, 1); } terminate() { this._listeners.length = 0; } } exports.LoopbackPort = LoopbackPort; const PDFWorker = function PDFWorkerClosure() { const pdfWorkerPorts = new WeakMap(); let isWorkerDisabled = false; let fallbackWorkerSrc; let nextFakeWorkerId = 0; let fakeWorkerCapability; if (_is_node.isNodeJS && typeof commonjsRequire === "function") { isWorkerDisabled = true; fallbackWorkerSrc = "./pdf.worker.js"; } else if (typeof document === "object" && "currentScript" in document) { const pdfjsFilePath = document.currentScript && document.currentScript.src; if (pdfjsFilePath) { fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); } } function getWorkerSrc() { if (_worker_options.GlobalWorkerOptions.workerSrc) { return _worker_options.GlobalWorkerOptions.workerSrc; } if (typeof fallbackWorkerSrc !== "undefined") { if (!_is_node.isNodeJS) { (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); } return fallbackWorkerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } function getMainThreadWorkerMessageHandler() { let mainWorkerMessageHandler; try { mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler; } catch (ex) {} return mainWorkerMessageHandler || null; } function setupFakeWorkerGlobal() { if (fakeWorkerCapability) { return fakeWorkerCapability.promise; } fakeWorkerCapability = (0, _util.createPromiseCapability)(); const loader = async function () { const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); if (mainWorkerMessageHandler) { return mainWorkerMessageHandler; } if (_is_node.isNodeJS && typeof commonjsRequire === "function") { const worker = eval("require")(getWorkerSrc()); return worker.WorkerMessageHandler; } await (0, _display_utils.loadScript)(getWorkerSrc()); return window.pdfjsWorker.WorkerMessageHandler; }; loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject); return fakeWorkerCapability.promise; } function createCDNWrapper(url) { const wrapper = "importScripts('" + url + "');"; return URL.createObjectURL(new Blob([wrapper])); } class PDFWorker { constructor({ name = null, port = null, verbosity = (0, _util.getVerbosityLevel)() } = {}) { if (port && pdfWorkerPorts.has(port)) { throw new Error("Cannot use more than one PDFWorker per port"); } this.name = name; this.destroyed = false; this.postMessageTransfers = true; this.verbosity = verbosity; this._readyCapability = (0, _util.createPromiseCapability)(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { pdfWorkerPorts.set(port, this); this._initializeFromPort(port); return; } this._initialize(); } get promise() { return this._readyCapability.promise; } get port() { return this._port; } get messageHandler() { return this._messageHandler; } _initializeFromPort(port) { this._port = port; this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); this._messageHandler.on("ready", function () {}); this._readyCapability.resolve(); } _initialize() { if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { let workerSrc = getWorkerSrc(); try { if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href); } const worker = new Worker(workerSrc); const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); const terminateEarly = () => { worker.removeEventListener("error", onWorkerError); messageHandler.destroy(); worker.terminate(); if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); } else { this._setupFakeWorker(); } }; const onWorkerError = () => { if (!this._webWorker) { terminateEarly(); } }; worker.addEventListener("error", onWorkerError); messageHandler.on("test", data => { worker.removeEventListener("error", onWorkerError); if (this.destroyed) { terminateEarly(); return; } if (data) { this._messageHandler = messageHandler; this._port = worker; this._webWorker = worker; if (!data.supportTransfers) { this.postMessageTransfers = false; } this._readyCapability.resolve(); messageHandler.send("configure", { verbosity: this.verbosity }); } else { this._setupFakeWorker(); messageHandler.destroy(); worker.terminate(); } }); messageHandler.on("ready", data => { worker.removeEventListener("error", onWorkerError); if (this.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { this._setupFakeWorker(); } }); const sendTest = () => { const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]); try { messageHandler.send("test", testObj, [testObj.buffer]); } catch (ex) { (0, _util.warn)("Cannot use postMessage transfers."); testObj[0] = 0; messageHandler.send("test", testObj); } }; sendTest(); return; } catch (e) { (0, _util.info)("The worker has been disabled."); } } this._setupFakeWorker(); } _setupFakeWorker() { if (!isWorkerDisabled) { (0, _util.warn)("Setting up fake worker."); isWorkerDisabled = true; } setupFakeWorkerGlobal().then(WorkerMessageHandler => { if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); return; } const port = new LoopbackPort(); this._port = port; const id = "fake" + nextFakeWorkerId++; const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); WorkerMessageHandler.setup(workerHandler, port); const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); this._messageHandler = messageHandler; this._readyCapability.resolve(); messageHandler.send("configure", { verbosity: this.verbosity }); }).catch(reason => { this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); }); } destroy() { this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } pdfWorkerPorts.delete(this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } static fromPort(params) { if (!params || !params.port) { throw new Error("PDFWorker.fromPort - invalid method signature."); } if (pdfWorkerPorts.has(params.port)) { return pdfWorkerPorts.get(params.port); } return new PDFWorker(params); } static getWorkerSrc() { return getWorkerSrc(); } } return PDFWorker; }(); exports.PDFWorker = PDFWorker; class WorkerTransport { constructor(messageHandler, loadingTask, networkStream, params) { this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new _font_loader.FontLoader({ docId: loadingTask.docId, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), ownerDocument: params.ownerDocument }); this._params = params; this.CMapReaderFactory = new params.CMapReaderFactory({ baseUrl: params.cMapUrl, isCompressed: params.cMapPacked }); this.destroyed = false; this.destroyCapability = null; this._passwordCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.pageCache = []; this.pagePromises = []; this.downloadInfoCapability = (0, _util.createPromiseCapability)(); this.setupMessageHandler(); } destroy() { if (this.destroyCapability) { return this.destroyCapability.promise; } this.destroyed = true; this.destroyCapability = (0, _util.createPromiseCapability)(); if (this._passwordCapability) { this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); } const waitOn = []; this.pageCache.forEach(function (page) { if (page) { waitOn.push(page._destroy()); } }); this.pageCache.length = 0; this.pagePromises.length = 0; const terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); Promise.all(waitOn).then(() => { this.fontLoader.clear(); if (this._networkStream) { this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); } if (this.messageHandler) { this.messageHandler.destroy(); this.messageHandler = null; } this.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } setupMessageHandler() { const { messageHandler, loadingTask } = this; messageHandler.on("GetReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); this._fullReader = this._networkStream.getFullReader(); this._fullReader.onProgress = evt => { this._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = () => { this._fullReader.read().then(function ({ value, done }) { if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; sink.onCancel = reason => { this._fullReader.cancel(reason); sink.ready.catch(readyReason => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", data => { const headersCapability = (0, _util.createPromiseCapability)(); const fullReader = this._fullReader; fullReader.headersReady.then(() => { if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (this._lastProgress && loadingTask.onProgress) { loadingTask.onProgress(this._lastProgress); } fullReader.onProgress = evt => { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: evt.loaded, total: evt.total }); } }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }); messageHandler.on("GetRangeReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); if (!rangeReader) { sink.close(); return; } sink.onPull = () => { rangeReader.read().then(function ({ value, done }) { if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; sink.onCancel = reason => { rangeReader.cancel(reason); sink.ready.catch(readyReason => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("GetDoc", ({ pdfInfo }) => { this._numPages = pdfInfo.numPages; loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); messageHandler.on("DocException", function (ex) { let reason; switch (ex.name) { case "PasswordException": reason = new _util.PasswordException(ex.message, ex.code); break; case "InvalidPDFException": reason = new _util.InvalidPDFException(ex.message); break; case "MissingPDFException": reason = new _util.MissingPDFException(ex.message); break; case "UnexpectedResponseException": reason = new _util.UnexpectedResponseException(ex.message, ex.status); break; case "UnknownErrorException": reason = new _util.UnknownErrorException(ex.message, ex.details); break; } if (!(reason instanceof Error)) { const msg = "DocException - expected a valid Error."; (0, _util.warn)(msg); } loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", exception => { this._passwordCapability = (0, _util.createPromiseCapability)(); if (loadingTask.onPassword) { const updatePassword = password => { this._passwordCapability.resolve({ password }); }; try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { this._passwordCapability.reject(ex); } } else { this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); } return this._passwordCapability.promise; }); messageHandler.on("DataLoaded", data => { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.length, total: data.length }); } this.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", data => { if (this.destroyed) { return; } const page = this.pageCache[data.pageIndex]; page._startRenderPage(data.transparency, data.intent); }); messageHandler.on("commonobj", data => { if (this.destroyed) { return; } const [id, type, exportedData] = data; if (this.commonObjs.has(id)) { return; } switch (type) { case "Font": const params = this._params; if ("error" in exportedData) { const exportedError = exportedData.error; (0, _util.warn)(`Error during font loading: ${exportedError}`); this.commonObjs.resolve(id, exportedError); break; } let fontRegistry = null; if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) { fontRegistry = { registerFont(font, url) { globalThis.FontInspector.fontAdded(font, url); } }; } const font = new _font_loader.FontFaceObject(exportedData, { isEvalSupported: params.isEvalSupported, disableFontFace: params.disableFontFace, ignoreErrors: params.ignoreErrors, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), fontRegistry }); this.fontLoader.bind(font).catch(reason => { return messageHandler.sendWithPromise("FontFallback", { id }); }).finally(() => { if (!params.fontExtraProperties && font.data) { font.data = null; } this.commonObjs.resolve(id, font); }); break; case "FontPath": case "Image": this.commonObjs.resolve(id, exportedData); break; default: throw new Error(`Got unknown common object type ${type}`); } }); messageHandler.on("obj", data => { if (this.destroyed) { return undefined; } const [id, pageIndex, type, imageData] = data; const pageProxy = this.pageCache[pageIndex]; if (pageProxy.objs.has(id)) { return undefined; } switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); const MAX_IMAGE_SIZE_TO_STORE = 8000000; if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { pageProxy.cleanupAfterRender = true; } break; default: throw new Error(`Got unknown object type ${type}`); } return undefined; }); messageHandler.on("DocProgress", data => { if (this.destroyed) { return; } if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.loaded, total: data.total }); } }); messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); messageHandler.on("FetchBuiltInCMap", (data, sink) => { if (this.destroyed) { sink.error(new Error("Worker was destroyed")); return; } let fetched = false; sink.onPull = () => { if (fetched) { sink.close(); return; } fetched = true; this.CMapReaderFactory.fetch(data).then(function (builtInCMap) { sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]); }).catch(function (reason) { sink.error(reason); }); }; }); } _onUnsupportedFeature({ featureId }) { if (this.destroyed) { return; } if (this.loadingTask.onUnsupportedFeature) { this.loadingTask.onUnsupportedFeature(featureId); } } getData() { return this.messageHandler.sendWithPromise("GetData", null); } getPage(pageNumber) { if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { return Promise.reject(new Error("Invalid page request")); } const pageIndex = pageNumber - 1; if (pageIndex in this.pagePromises) { return this.pagePromises[pageIndex]; } const promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex }).then(pageInfo => { if (this.destroyed) { throw new Error("Transport destroyed"); } const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); this.pageCache[pageIndex] = page; return page; }); this.pagePromises[pageIndex] = promise; return promise; } getPageIndex(ref) { return this.messageHandler.sendWithPromise("GetPageIndex", { ref }).catch(function (reason) { return Promise.reject(new Error(reason)); }); } getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex, intent }); } saveDocument(annotationStorage) { return this.messageHandler.sendWithPromise("SaveDocument", { numPages: this._numPages, annotationStorage: annotationStorage && annotationStorage.getAll() || null, filename: this._fullReader ? this._fullReader.filename : null }).finally(() => { if (annotationStorage) { annotationStorage.resetModified(); } }); } getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } return this.messageHandler.sendWithPromise("GetDestination", { id }); } getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } getJavaScript() { return this.messageHandler.sendWithPromise("GetJavaScript", null); } getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } getOptionalContentConfig() { return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { return new _optional_content_config.OptionalContentConfig(results); }); } getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } getMetadata() { return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { return { info: results[0], metadata: results[1] ? new _metadata.Metadata(results[1]) : null, contentDispositionFilename: this._fullReader ? this._fullReader.filename : null }; }); } getStats() { return this.messageHandler.sendWithPromise("GetStats", null); } startCleanup() { return this.messageHandler.sendWithPromise("Cleanup", null).then(() => { for (let i = 0, ii = this.pageCache.length; i < ii; i++) { const page = this.pageCache[i]; if (page) { const cleanupSuccessful = page.cleanup(); if (!cleanupSuccessful) { throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`); } } } this.commonObjs.clear(); this.fontLoader.clear(); }); } get loadingParams() { const params = this._params; return (0, _util.shadow)(this, "loadingParams", { disableAutoFetch: params.disableAutoFetch, disableFontFace: params.disableFontFace }); } } class PDFObjects { constructor() { this._objs = Object.create(null); } _ensureObj(objId) { if (this._objs[objId]) { return this._objs[objId]; } return this._objs[objId] = { capability: (0, _util.createPromiseCapability)(), data: null, resolved: false }; } get(objId, callback = null) { if (callback) { this._ensureObj(objId).capability.promise.then(callback); return null; } const obj = this._objs[objId]; if (!obj || !obj.resolved) { throw new Error(`Requesting object that isn't resolved yet ${objId}.`); } return obj.data; } has(objId) { const obj = this._objs[objId]; return obj ? obj.resolved : false; } resolve(objId, data) { const obj = this._ensureObj(objId); obj.resolved = true; obj.data = data; obj.capability.resolve(data); } clear() { this._objs = Object.create(null); } } class RenderTask { constructor(internalRenderTask) { this._internalRenderTask = internalRenderTask; this.onContinue = null; } get promise() { return this._internalRenderTask.capability.promise; } cancel() { this._internalRenderTask.cancel(); } } const InternalRenderTask = function InternalRenderTaskClosure() { const canvasInRendering = new WeakSet(); class InternalRenderTask { constructor({ callback, params, objs, commonObjs, operatorList, pageIndex, canvasFactory, webGLContext, useRequestAnimationFrame = false, pdfBug = false }) { this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.operatorListIdx = null; this.operatorList = operatorList; this._pageIndex = pageIndex; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; this._pdfBug = pdfBug; this.running = false; this.graphicsReadyCallback = null; this.graphicsReady = false; this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; this.cancelled = false; this.capability = (0, _util.createPromiseCapability)(); this.task = new RenderTask(this); this._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; } get completed() { return this.capability.promise.catch(function () {}); } initializeGraphics({ transparency = false, optionalContentConfig }) { if (this.cancelled) { return; } if (this._canvas) { if (canvasInRendering.has(this._canvas)) { throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); } canvasInRendering.add(this._canvas); } if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) { this.stepper = globalThis.StepperManager.create(this._pageIndex); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } const { canvasContext, viewport, transform, imageLayer, background } = this.params; this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer, optionalContentConfig); this.gfx.beginDrawing({ transform, viewport, transparency, background }); this.operatorListIdx = 0; this.graphicsReady = true; if (this.graphicsReadyCallback) { this.graphicsReadyCallback(); } } cancel(error = null) { this.running = false; this.cancelled = true; if (this.gfx) { this.gfx.endDrawing(); } if (this._canvas) { canvasInRendering.delete(this._canvas); } this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); } operatorListChanged() { if (!this.graphicsReady) { if (!this.graphicsReadyCallback) { this.graphicsReadyCallback = this._continueBound; } return; } if (this.stepper) { this.stepper.updateOperatorList(this.operatorList); } if (this.running) { return; } this._continue(); } _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } _scheduleNext() { if (this._useRequestAnimationFrame) { window.requestAnimationFrame(() => { this._nextBound().catch(this.cancel.bind(this)); }); } else { Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this)); } } async _next() { if (this.cancelled) { return; } this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); if (this.operatorListIdx === this.operatorList.argsArray.length) { this.running = false; if (this.operatorList.lastChunk) { this.gfx.endDrawing(); if (this._canvas) { canvasInRendering.delete(this._canvas); } this.callback(); } } } } return InternalRenderTask; }(); const version = '2.6.347'; exports.version = version; const build = '3be9c65f'; exports.build = build; /***/ }), /* 6 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FontLoader = exports.FontFaceObject = void 0; var _util = __w_pdfjs_require__(2); class BaseFontLoader { constructor({ docId, onUnsupportedFeature, ownerDocument = globalThis.document }) { if (this.constructor === BaseFontLoader) { (0, _util.unreachable)("Cannot initialize BaseFontLoader."); } this.docId = docId; this._onUnsupportedFeature = onUnsupportedFeature; this._document = ownerDocument; this.nativeFontFaces = []; this.styleElement = null; } addNativeFontFace(nativeFontFace) { this.nativeFontFaces.push(nativeFontFace); this._document.fonts.add(nativeFontFace); } insertRule(rule) { let styleElement = this.styleElement; if (!styleElement) { styleElement = this.styleElement = this._document.createElement("style"); styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`; this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); } const styleSheet = styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } clear() { this.nativeFontFaces.forEach(nativeFontFace => { this._document.fonts.delete(nativeFontFace); }); this.nativeFontFaces.length = 0; if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } async bind(font) { if (font.attached || font.missingFile) { return; } font.attached = true; if (this.isFontLoadingAPISupported) { const nativeFontFace = font.createNativeFontFace(); if (nativeFontFace) { this.addNativeFontFace(nativeFontFace); try { await nativeFontFace.loaded; } catch (ex) { this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative }); (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); font.disableFontFace = true; throw ex; } } return; } const rule = font.createFontFaceRule(); if (rule) { this.insertRule(rule); if (this.isSyncFontLoadingSupported) { return; } await new Promise(resolve => { const request = this._queueLoadingCallback(resolve); this._prepareFontLoadEvent([rule], [font], request); }); } } _queueLoadingCallback(callback) { (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); } get isFontLoadingAPISupported() { const supported = typeof this._document !== "undefined" && !!this._document.fonts; return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported); } get isSyncFontLoadingSupported() { (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); } get _loadTestFont() { (0, _util.unreachable)("Abstract method `_loadTestFont`."); } _prepareFontLoadEvent(rules, fontsToLoad, request) { (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); } } let FontLoader; exports.FontLoader = FontLoader; { exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader { constructor(params) { super(params); this.loadingContext = { requests: [], nextRequestId: 0 }; this.loadTestFontId = 0; } get isSyncFontLoadingSupported() { let supported = false; if (typeof navigator === "undefined") { supported = true; } else { const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); if (m && m[1] >= 14) { supported = true; } } return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); } _queueLoadingCallback(callback) { function completeRequest() { (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (context.requests.length > 0 && context.requests[0].done) { const otherRequest = context.requests.shift(); setTimeout(otherRequest.callback, 0); } } const context = this.loadingContext; const request = { id: `pdfjs-font-loading-${context.nextRequestId++}`, done: false, complete: completeRequest, callback }; context.requests.push(request); return request; } get _loadTestFont() { const getLoadTestFont = function () { return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); }; return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont()); } _prepareFontLoadEvent(rules, fonts, request) { function int32(data, offset) { return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; } function spliceString(s, offset, remove, insert) { const chunk1 = s.substring(0, offset); const chunk2 = s.substring(offset + remove); return chunk1 + insert + chunk2; } let i, ii; const canvas = this._document.createElement("canvas"); canvas.width = 1; canvas.height = 1; const ctx = canvas.getContext("2d"); let called = 0; function isFontReady(name, callback) { called++; if (called > 30) { (0, _util.warn)("Load test font never loaded."); callback(); return; } ctx.font = "30px " + name; ctx.fillText(".", 0, 20); const imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; let data = this._loadTestFont; const COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); const CFF_CHECKSUM_OFFSET = 16; const XXXX_VALUE = 0x58585858; let checksum = int32(data, CFF_CHECKSUM_OFFSET); for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; } if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); const url = `url(data:font/opentype;base64,${btoa(data)});`; const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; this.insertRule(rule); const names = []; for (i = 0, ii = fonts.length; i < ii; i++) { names.push(fonts[i].loadedName); } names.push(loadTestFontId); const div = this._document.createElement("div"); div.style.visibility = "hidden"; div.style.width = div.style.height = "10px"; div.style.position = "absolute"; div.style.top = div.style.left = "0px"; for (i = 0, ii = names.length; i < ii; ++i) { const span = this._document.createElement("span"); span.textContent = "Hi"; span.style.fontFamily = names[i]; div.appendChild(span); } this._document.body.appendChild(div); isFontReady(loadTestFontId, () => { this._document.body.removeChild(div); request.complete(); }); } }; } class FontFaceObject { constructor(translatedData, { isEvalSupported = true, disableFontFace = false, ignoreErrors = false, onUnsupportedFeature = null, fontRegistry = null }) { this.compiledGlyphs = Object.create(null); for (const i in translatedData) { this[i] = translatedData[i]; } this.isEvalSupported = isEvalSupported !== false; this.disableFontFace = disableFontFace === true; this.ignoreErrors = ignoreErrors === true; this._onUnsupportedFeature = onUnsupportedFeature; this.fontRegistry = fontRegistry; } createNativeFontFace() { if (!this.data || this.disableFontFace) { return null; } const nativeFontFace = new FontFace(this.loadedName, this.data, {}); if (this.fontRegistry) { this.fontRegistry.registerFont(this); } return nativeFontFace; } createFontFaceRule() { if (!this.data || this.disableFontFace) { return null; } const data = (0, _util.bytesToString)(new Uint8Array(this.data)); const url = `url(data:${this.mimetype};base64,${btoa(data)});`; const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; if (this.fontRegistry) { this.fontRegistry.registerFont(this, url); } return rule; } getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== undefined) { return this.compiledGlyphs[character]; } let cmds, current; try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { if (!this.ignoreErrors) { throw ex; } if (this._onUnsupportedFeature) { this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath }); } (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); return this.compiledGlyphs[character] = function (c, size) {}; } if (this.isEvalSupported && _util.IsEvalSupportedCached.value) { let args, js = ""; for (let i = 0, ii = cmds.length; i < ii; i++) { current = cmds[i]; if (current.args !== undefined) { args = current.args.join(","); } else { args = ""; } js += "c." + current.cmd + "(" + args + ");\n"; } return this.compiledGlyphs[character] = new Function("c", "size", js); } return this.compiledGlyphs[character] = function (c, size) { for (let i = 0, ii = cmds.length; i < ii; i++) { current = cmds[i]; if (current.cmd === "scale") { current.args = [size, -size]; } c[current.cmd].apply(c, current.args); } }; } } exports.FontFaceObject = FontFaceObject; /***/ }), /* 7 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0; var _display_utils = __w_pdfjs_require__(1); var _is_node = __w_pdfjs_require__(4); var _util = __w_pdfjs_require__(2); let NodeCanvasFactory = class { constructor() { (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); } }; exports.NodeCanvasFactory = NodeCanvasFactory; let NodeCMapReaderFactory = class { constructor() { (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); } }; exports.NodeCMapReaderFactory = NodeCMapReaderFactory; if (_is_node.isNodeJS) { exports.NodeCanvasFactory = NodeCanvasFactory = class extends _display_utils.BaseCanvasFactory { create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } const Canvas = browser; const canvas = Canvas.createCanvas(width, height); return { canvas, context: canvas.getContext("2d") }; } }; exports.NodeCMapReaderFactory = NodeCMapReaderFactory = class extends _display_utils.BaseCMapReaderFactory { _fetchData(url, compressionType) { return new Promise((resolve, reject) => { const fs = require$$1__default['default']; fs.readFile(url, (error, data) => { if (error || !data) { reject(new Error(error)); return; } resolve({ cMapData: new Uint8Array(data), compressionType }); }); }); } }; } /***/ }), /* 8 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.AnnotationStorage = void 0; class AnnotationStorage { constructor() { this._storage = new Map(); this._modified = false; this.onSetModified = null; this.onResetModified = null; } getOrCreateValue(key, defaultValue) { if (this._storage.has(key)) { return this._storage.get(key); } this._storage.set(key, defaultValue); return defaultValue; } setValue(key, value) { if (this._storage.get(key) !== value) { this._setModified(); } this._storage.set(key, value); } getAll() { if (this._storage.size === 0) { return null; } return Object.fromEntries(this._storage); } get size() { return this._storage.size; } _setModified() { if (!this._modified) { this._modified = true; if (typeof this.onSetModified === "function") { this.onSetModified(); } } } resetModified() { if (this._modified) { this._modified = false; if (typeof this.onResetModified === "function") { this.onResetModified(); } } } } exports.AnnotationStorage = AnnotationStorage; /***/ }), /* 9 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.apiCompatibilityParams = void 0; var _is_node = __w_pdfjs_require__(4); const compatibilityParams = Object.create(null); { (function checkFontFace() { if (_is_node.isNodeJS) { compatibilityParams.disableFontFace = true; } })(); } const apiCompatibilityParams = Object.freeze(compatibilityParams); exports.apiCompatibilityParams = apiCompatibilityParams; /***/ }), /* 10 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CanvasGraphics = void 0; var _util = __w_pdfjs_require__(2); var _pattern_helper = __w_pdfjs_require__(11); var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; var MAX_GROUP_SIZE = 4096; var MIN_WIDTH_FACTOR = 0.65; var MAX_SIZE_TO_COMPILE = 1000; var FULL_CHUNK_HEIGHT = 16; function addContextCurrentTransform(ctx) { if (!ctx.mozCurrentTransform) { ctx._originalSave = ctx.save; ctx._originalRestore = ctx.restore; ctx._originalRotate = ctx.rotate; ctx._originalScale = ctx.scale; ctx._originalTranslate = ctx.translate; ctx._originalTransform = ctx.transform; ctx._originalSetTransform = ctx.setTransform; ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; ctx._transformStack = []; Object.defineProperty(ctx, "mozCurrentTransform", { get: function getCurrentTransform() { return this._transformMatrix; } }); Object.defineProperty(ctx, "mozCurrentTransformInverse", { get: function getCurrentTransformInverse() { var m = this._transformMatrix; var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5]; var ad_bc = a * d - b * c; var bc_ad = b * c - a * d; return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; } }); ctx.save = function ctxSave() { var old = this._transformMatrix; this._transformStack.push(old); this._transformMatrix = old.slice(0, 6); this._originalSave(); }; ctx.restore = function ctxRestore() { var prev = this._transformStack.pop(); if (prev) { this._transformMatrix = prev; this._originalRestore(); } }; ctx.translate = function ctxTranslate(x, y) { var m = this._transformMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; this._originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { var m = this._transformMatrix; m[0] = m[0] * x; m[1] = m[1] * x; m[2] = m[2] * y; m[3] = m[3] * y; this._originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { var m = this._transformMatrix; this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; ctx._originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { this._transformMatrix = [a, b, c, d, e, f]; ctx._originalSetTransform(a, b, c, d, e, f); }; ctx.rotate = function ctxRotate(angle) { var cosValue = Math.cos(angle); var sinValue = Math.sin(angle); var m = this._transformMatrix; this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; this._originalRotate(angle); }; } } var CachedCanvases = function CachedCanvasesClosure() { function CachedCanvases(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = Object.create(null); } CachedCanvases.prototype = { getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) { var canvasEntry; if (this.cache[id] !== undefined) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } if (trackTransform) { addContextCurrentTransform(canvasEntry.context); } return canvasEntry; }, clear() { for (var id in this.cache) { var canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } }; return CachedCanvases; }(); function compileType3Glyph(imgData) { var POINT_TO_PROCESS_LIMIT = 1000; var width = imgData.width, height = imgData.height; var i, j, j0, width1 = width + 1; var points = new Uint8Array(width1 * (height + 1)); var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); var lineSize = width + 7 & ~7, data0 = imgData.data; var data = new Uint8Array(lineSize * height), pos = 0, ii; for (i = 0, ii = data0.length; i < ii; i++) { var mask = 128, elem = data0[i]; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } var count = 0; pos = 0; if (data[pos] !== 0) { points[0] = 1; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } pos++; } if (data[pos] !== 0) { points[j] = 2; ++count; } for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); for (j = 1; j < width; j++) { sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); if (POINT_TYPES[sum]) { points[j0 + j] = POINT_TYPES[sum]; ++count; } pos++; } if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } } pos = lineSize * (height - 1); j0 = i * width1; if (data[pos] !== 0) { points[j0] = 8; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } pos++; } if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); var outlines = []; for (i = 0; count && i <= height; i++) { var p = i * width1; var end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } var coords = [p % width1, i]; var type = points[p], p0 = p, pp; do { var step = steps[type]; do { p += step; } while (!points[p]); pp = points[p]; if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; } else { type = pp & 0x33 * type >> 4; points[p] &= type >> 2 | type << 2; } coords.push(p % width1); coords.push(p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); outlines.push(coords); --i; } var drawOutline = function (c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.beginPath(); for (let k = 0, kk = outlines.length; k < kk; k++) { var o = outlines[k]; c.moveTo(o[0], o[1]); for (let l = 2, ll = o.length; l < ll; l += 2) { c.lineTo(o[l], o[l + 1]); } } c.fill(); c.beginPath(); c.restore(); }; return drawOutline; } var CanvasExtraState = function CanvasExtraStateClosure() { function CanvasExtraState() { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; this.textMatrix = _util.IDENTITY_MATRIX; this.textMatrixScale = 1; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textRise = 0; this.fillColor = "#000000"; this.strokeColor = "#000000"; this.patternFill = false; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; this.resumeSMaskCtx = null; this.transferMaps = null; } CanvasExtraState.prototype = { clone: function CanvasExtraState_clone() { return Object.create(this); }, setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { this.x = x; this.y = y; } }; return CanvasExtraState; }(); var CanvasGraphics = function CanvasGraphicsClosure() { var EXECUTION_TIME = 15; var EXECUTION_STEPS = 10; function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, optionalContentConfig) { this.ctx = canvasCtx; this.current = new CanvasExtraState(); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; this.imageLayer = imageLayer; this.groupStack = []; this.processingType3 = null; this.baseTransform = null; this.baseTransformStack = []; this.groupLevel = 0; this.smaskStack = []; this.smaskCounter = 0; this.tempSMask = null; this.contentVisible = true; this.markedContentStack = []; this.optionalContentConfig = optionalContentConfig; this.cachedCanvases = new CachedCanvases(this.canvasFactory); if (canvasCtx) { addContextCurrentTransform(canvasCtx); } this._cachedGetSinglePixelWidth = null; } function putBinaryImageData(ctx, imgData, transferMaps = null) { if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0, destPos; var src = imgData.data; var dest = chunkImgData.data; var i, j, thisChunkHeight, elemsInThisChunk; let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; if (transferMaps) { switch (transferMaps.length) { case 1: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[0]; transferMapBlue = transferMaps[0]; transferMapGray = transferMaps[0]; break; case 4: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[1]; transferMapBlue = transferMaps[2]; transferMapGray = transferMaps[3]; break; } } if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { var srcLength = src.byteLength; var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); var dest32DataLength = dest32.length; var fullSrcDiff = width + 7 >> 3; var white = 0xffffffff; var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff; if (transferMapGray) { if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { [white, black] = [black, white]; } } for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { var srcDiff = srcLength - srcPos; let k = 0; var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; var kEndUnrolled = kEnd & ~7; var mask = 0; var srcByte = 0; for (; k < kEndUnrolled; k += 8) { srcByte = src[srcPos++]; dest32[destPos++] = srcByte & 128 ? white : black; dest32[destPos++] = srcByte & 64 ? white : black; dest32[destPos++] = srcByte & 32 ? white : black; dest32[destPos++] = srcByte & 16 ? white : black; dest32[destPos++] = srcByte & 8 ? white : black; dest32[destPos++] = srcByte & 4 ? white : black; dest32[destPos++] = srcByte & 2 ? white : black; dest32[destPos++] = srcByte & 1 ? white : black; } for (; k < kEnd; k++) { if (mask === 0) { srcByte = src[srcPos++]; mask = 128; } dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } while (destPos < dest32DataLength) { dest32[destPos++] = 0; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; if (hasTransferMaps) { for (let k = 0; k < elemsInThisChunk; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); if (hasTransferMaps) { for (let k = 0; k < elemsInThisChunk; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); thisChunkHeight = FULL_CHUNK_HEIGHT; elemsInThisChunk = width * thisChunkHeight; for (i = 0; i < totalChunks; i++) { if (i >= fullChunks) { thisChunkHeight = partialChunkHeight; elemsInThisChunk = width * thisChunkHeight; } destPos = 0; for (j = elemsInThisChunk; j--;) { dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = 255; } if (hasTransferMaps) { for (let k = 0; k < destPos; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error(`bad image kind: ${imgData.kind}`); } } function putBinaryImageMask(ctx, imgData) { var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0; var src = imgData.data; var dest = chunkImgData.data; for (var i = 0; i < totalChunks; i++) { var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; var destPos = 3; for (var j = 0; j < thisChunkHeight; j++) { var mask = 0; for (var k = 0; k < width; k++) { if (!mask) { var elem = src[srcPos++]; mask = 128; } dest[destPos] = elem & mask ? 0 : 255; destPos += 4; mask >>= 1; } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } function copyCtxState(sourceCtx, destCtx) { var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; for (var i = 0, ii = properties.length; i < ii; i++) { var property = properties[i]; if (sourceCtx[property] !== undefined) { destCtx[property] = sourceCtx[property]; } } if (sourceCtx.setLineDash !== undefined) { destCtx.setLineDash(sourceCtx.getLineDash()); destCtx.lineDashOffset = sourceCtx.lineDashOffset; } } function resetCtxToDefault(ctx) { ctx.strokeStyle = "#000000"; ctx.fillStyle = "#000000"; ctx.fillRule = "nonzero"; ctx.globalAlpha = 1; ctx.lineWidth = 1; ctx.lineCap = "butt"; ctx.lineJoin = "miter"; ctx.miterLimit = 10; ctx.globalCompositeOperation = "source-over"; ctx.font = "10px sans-serif"; if (ctx.setLineDash !== undefined) { ctx.setLineDash([]); ctx.lineDashOffset = 0; } } function composeSMaskBackdrop(bytes, r0, g0, b0) { var length = bytes.length; for (var i = 3; i < length; i += 4) { var alpha = bytes[i]; if (alpha === 0) { bytes[i - 3] = r0; bytes[i - 2] = g0; bytes[i - 1] = b0; } else if (alpha < 255) { var alpha_ = 255 - alpha; bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; } } } function composeSMaskAlpha(maskData, layerData, transferMap) { var length = maskData.length; var scale = 1 / 255; for (var i = 3; i < length; i += 4) { var alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; layerData[i] = layerData[i] * alpha * scale | 0; } } function composeSMaskLuminosity(maskData, layerData, transferMap) { var length = maskData.length; for (var i = 3; i < length; i += 4) { var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; } } function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) { var hasBackdrop = !!backdrop; var r0 = hasBackdrop ? backdrop[0] : 0; var g0 = hasBackdrop ? backdrop[1] : 0; var b0 = hasBackdrop ? backdrop[2] : 0; var composeFn; if (subtype === "Luminosity") { composeFn = composeSMaskLuminosity; } else { composeFn = composeSMaskAlpha; } var PIXELS_TO_PROCESS = 1048576; var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); for (var row = 0; row < height; row += chunkSize) { var chunkHeight = Math.min(chunkSize, height - row); var maskData = maskCtx.getImageData(0, row, width, chunkHeight); var layerData = layerCtx.getImageData(0, row, width, chunkHeight); if (hasBackdrop) { composeSMaskBackdrop(maskData.data, r0, g0, b0); } composeFn(maskData.data, layerData.data, transferMap); maskCtx.putImageData(layerData, 0, row); } } function composeSMask(ctx, smask, layerCtx, webGLContext) { var mask = smask.canvas; var maskCtx = smask.context; ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); var backdrop = smask.backdrop || null; if (!smask.transferMap && webGLContext.isEnabled) { const composed = webGLContext.composeSMask({ layer: layerCtx.canvas, mask, properties: { subtype: smask.subtype, backdrop } }); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(composed, smask.offsetX, smask.offsetY); return; } genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); ctx.drawImage(mask, 0, 0); } var LINE_CAP_STYLES = ["butt", "round", "square"]; var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; var NORMAL_CLIP = {}; var EO_CLIP = {}; CanvasGraphics.prototype = { beginDrawing({ transform, viewport, transparency = false, background = null }) { var width = this.ctx.canvas.width; var height = this.ctx.canvas.height; this.ctx.save(); this.ctx.fillStyle = background || "rgb(255, 255, 255)"; this.ctx.fillRect(0, 0, width, height); this.ctx.restore(); if (transparency) { var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); this.compositeCtx = this.ctx; this.transparentCanvas = transparentCanvas.canvas; this.ctx = transparentCanvas.context; this.ctx.save(); this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); } this.ctx.save(); resetCtxToDefault(this.ctx); if (transform) { this.ctx.transform.apply(this.ctx, transform); } this.ctx.transform.apply(this.ctx, viewport.transform); this.baseTransform = this.ctx.mozCurrentTransform.slice(); if (this.imageLayer) { this.imageLayer.beginLayout(); } }, executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { var argsArray = operatorList.argsArray; var fnArray = operatorList.fnArray; var i = executionStartIdx || 0; var argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; var steps = 0; var commonObjs = this.commonObjs; var objs = this.objs; var fnId; while (true) { if (stepper !== undefined && i === stepper.nextBreakPoint) { stepper.breakIt(i, continueCallback); return i; } fnId = fnArray[i]; if (fnId !== _util.OPS.dependency) { this[fnId].apply(this, argsArray[i]); } else { for (const depObjId of argsArray[i]) { const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; if (!objsPool.has(depObjId)) { objsPool.get(depObjId, continueCallback); return i; } } } i++; if (i === argsArrayLen) { return i; } if (chunkOperations && ++steps > EXECUTION_STEPS) { if (Date.now() > endTime) { continueCallback(); return i; } steps = 0; } } }, endDrawing: function CanvasGraphics_endDrawing() { if (this.current.activeSMask !== null) { this.endSMaskGroup(); } this.ctx.restore(); if (this.transparentCanvas) { this.ctx = this.compositeCtx; this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); this.transparentCanvas = null; } this.cachedCanvases.clear(); this.webGLContext.clear(); if (this.imageLayer) { this.imageLayer.endLayout(); } }, setLineWidth: function CanvasGraphics_setLineWidth(width) { this.current.lineWidth = width; this.ctx.lineWidth = width; }, setLineCap: function CanvasGraphics_setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; }, setLineJoin: function CanvasGraphics_setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; }, setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { this.ctx.miterLimit = limit; }, setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { var ctx = this.ctx; if (ctx.setLineDash !== undefined) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } }, setRenderingIntent(intent) {}, setFlatness(flatness) {}, setGState: function CanvasGraphics_setGState(states) { for (var i = 0, ii = states.length; i < ii; i++) { var state = states[i]; var key = state[0]; var value = state[1]; switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value[0], value[1]); break; case "CA": this.current.strokeAlpha = state[1]; break; case "ca": this.current.fillAlpha = state[1]; this.ctx.globalAlpha = state[1]; break; case "BM": this.ctx.globalCompositeOperation = value; break; case "SMask": if (this.current.activeSMask) { if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { this.suspendSMaskGroup(); } else { this.endSMaskGroup(); } } this.current.activeSMask = value ? this.tempSMask : null; if (this.current.activeSMask) { this.beginSMaskGroup(); } this.tempSMask = null; break; case "TR": this.current.transferMaps = value; } } }, beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { var activeSMask = this.current.activeSMask; var drawnWidth = activeSMask.canvas.width; var drawnHeight = activeSMask.canvas.height; var cacheId = "smaskGroupAt" + this.groupLevel; var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var currentCtx = this.ctx; var currentTransform = currentCtx.mozCurrentTransform; this.ctx.save(); var groupCtx = scratchCanvas.context; groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); groupCtx.transform.apply(groupCtx, currentTransform); activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; }, suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); this.ctx.save(); copyCtxState(groupCtx, this.ctx); this.current.resumeSMaskCtx = groupCtx; var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); groupCtx.save(); groupCtx.setTransform(1, 0, 0, 1, 0, 0); groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); groupCtx.restore(); }, resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.current.resumeSMaskCtx; var currentCtx = this.ctx; this.ctx = groupCtx; this.groupStack.push(currentCtx); this.groupLevel++; }, endSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); copyCtxState(groupCtx, this.ctx); var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); }, save: function CanvasGraphics_save() { this.ctx.save(); var old = this.current; this.stateStack.push(old); this.current = old.clone(); this.current.resumeSMaskCtx = null; }, restore: function CanvasGraphics_restore() { if (this.current.resumeSMaskCtx) { this.resumeSMaskGroup(); } if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { this.endSMaskGroup(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); this.ctx.restore(); this.pendingClip = null; this._cachedGetSinglePixelWidth = null; } }, transform: function CanvasGraphics_transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedGetSinglePixelWidth = null; }, constructPath: function CanvasGraphics_constructPath(ops, args) { var ctx = this.ctx; var current = this.current; var x = current.x, y = current.y; for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; var width = args[j++]; var height = args[j++]; if (width === 0 && ctx.lineWidth < this.getSinglePixelWidth()) { width = this.getSinglePixelWidth(); } if (height === 0 && ctx.lineWidth < this.getSinglePixelWidth()) { height = this.getSinglePixelWidth(); } var xw = x + width; var yh = y + height; ctx.moveTo(x, y); ctx.lineTo(xw, y); ctx.lineTo(xw, yh); ctx.lineTo(x, yh); ctx.lineTo(x, y); ctx.closePath(); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); j += 6; break; case _util.OPS.curveTo2: ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); j += 4; break; case _util.OPS.closePath: ctx.closePath(); break; } } current.setCurrentPoint(x, y); }, closePath: function CanvasGraphics_closePath() { this.ctx.closePath(); }, stroke: function CanvasGraphics_stroke(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; var ctx = this.ctx; var strokeColor = this.current.strokeColor; ctx.globalAlpha = this.current.strokeAlpha; if (this.contentVisible) { if (strokeColor && strokeColor.hasOwnProperty("type") && strokeColor.type === "Pattern") { ctx.save(); const transform = ctx.mozCurrentTransform; const scale = _util.Util.singularValueDecompose2dScale(transform)[0]; ctx.strokeStyle = strokeColor.getPattern(ctx, this); ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * scale); ctx.stroke(); ctx.restore(); } else { ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth); ctx.stroke(); } } if (consumePath) { this.consumePath(); } ctx.globalAlpha = this.current.fillAlpha; }, closeStroke: function CanvasGraphics_closeStroke() { this.closePath(); this.stroke(); }, fill: function CanvasGraphics_fill(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var needRestore = false; if (isPatternFill) { ctx.save(); if (this.baseTransform) { ctx.setTransform.apply(ctx, this.baseTransform); } ctx.fillStyle = fillColor.getPattern(ctx, this); needRestore = true; } if (this.contentVisible) { if (this.pendingEOFill) { ctx.fill("evenodd"); this.pendingEOFill = false; } else { ctx.fill(); } } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(); } }, eoFill: function CanvasGraphics_eoFill() { this.pendingEOFill = true; this.fill(); }, fillStroke: function CanvasGraphics_fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); }, eoFillStroke: function CanvasGraphics_eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); }, closeFillStroke: function CanvasGraphics_closeFillStroke() { this.closePath(); this.fillStroke(); }, closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); }, endPath: function CanvasGraphics_endPath() { this.consumePath(); }, clip: function CanvasGraphics_clip() { this.pendingClip = NORMAL_CLIP; }, eoClip: function CanvasGraphics_eoClip() { this.pendingClip = EO_CLIP; }, beginText: function CanvasGraphics_beginText() { this.current.textMatrix = _util.IDENTITY_MATRIX; this.current.textMatrixScale = 1; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; }, endText: function CanvasGraphics_endText() { var paths = this.pendingTextPaths; var ctx = this.ctx; if (paths === undefined) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (var i = 0; i < paths.length; i++) { var path = paths[i]; ctx.setTransform.apply(ctx, path.transform); ctx.translate(path.x, path.y); path.addToPath(ctx, path.fontSize); } ctx.restore(); ctx.clip(); ctx.beginPath(); delete this.pendingTextPaths; }, setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { this.current.charSpacing = spacing; }, setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { this.current.wordSpacing = spacing; }, setHScale: function CanvasGraphics_setHScale(scale) { this.current.textHScale = scale / 100; }, setLeading: function CanvasGraphics_setLeading(leading) { this.current.leading = -leading; }, setFont: function CanvasGraphics_setFont(fontRefName, size) { var fontObj = this.commonObjs.get(fontRefName); var current = this.current; if (!fontObj) { throw new Error(`Can't find font for ${fontRefName}`); } current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX; if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { (0, _util.warn)("Invalid font matrix for font " + fontRefName); } if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } this.current.font = fontObj; this.current.fontSize = size; if (fontObj.isType3Font) { return; } var name = fontObj.loadedName || "sans-serif"; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } var italic = fontObj.italic ? "italic" : "normal"; var typeface = `"${name}", ${fontObj.fallbackName}`; let browserFontSize = size; if (size < MIN_FONT_SIZE) { browserFontSize = MIN_FONT_SIZE; } else if (size > MAX_FONT_SIZE) { browserFontSize = MAX_FONT_SIZE; } this.current.fontSizeScale = size / browserFontSize; this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; }, setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { this.current.textRenderingMode = mode; }, setTextRise: function CanvasGraphics_setTextRise(rise) { this.current.textRise = rise; }, moveText: function CanvasGraphics_moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; }, setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); }, setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.sqrt(a * a + b * b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; }, nextLine: function CanvasGraphics_nextLine() { this.moveText(0, this.current.leading); }, paintChar(character, x, y, patternTransform) { var ctx = this.ctx; var current = this.current; var font = current.font; var textRenderingMode = current.textRenderingMode; var fontSize = current.fontSize / current.fontSizeScale; var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); const patternFill = current.patternFill && !font.missingFile; var addToPath; if (font.disableFontFace || isAddToPathSet || patternFill) { addToPath = font.getPathGenerator(this.commonObjs, character); } if (font.disableFontFace || patternFill) { ctx.save(); ctx.translate(x, y); ctx.beginPath(); addToPath(ctx, fontSize); if (patternTransform) { ctx.setTransform.apply(ctx, patternTransform); } if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fill(); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.stroke(); } ctx.restore(); } else { if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fillText(character, x, y); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.strokeText(character, x, y); } } if (isAddToPathSet) { var paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: ctx.mozCurrentTransform, x, y, fontSize, addToPath }); } }, get isFontSubpixelAAEnabled() { const { context: ctx } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); ctx.scale(1.5, 1); ctx.fillText("I", 0, 10); var data = ctx.getImageData(0, 0, 10, 10).data; var enabled = false; for (var i = 3; i < data.length; i += 4) { if (data[i] > 0 && data[i] < 255) { enabled = true; break; } } return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); }, showText: function CanvasGraphics_showText(glyphs) { var current = this.current; var font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } var fontSize = current.fontSize; if (fontSize === 0) { return undefined; } var ctx = this.ctx; var fontSizeScale = current.fontSizeScale; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var fontDirection = current.fontDirection; var textHScale = current.textHScale * fontDirection; var glyphsLength = glyphs.length; var vertical = font.vertical; var spacingDir = vertical ? 1 : -1; var defaultVMetrics = font.defaultVMetrics; var widthAdvanceScale = fontSize * current.fontMatrix[0]; var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); let patternTransform; if (current.patternFill) { ctx.save(); const pattern = current.fillColor.getPattern(ctx, this); patternTransform = ctx.mozCurrentTransform; ctx.restore(); ctx.fillStyle = pattern; } ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y + current.textRise); if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } var lineWidth = current.lineWidth; var scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { this._cachedGetSinglePixelWidth = null; lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR; } } else { lineWidth /= scale; } if (fontSizeScale !== 1.0) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; var x = 0, i; for (i = 0; i < glyphsLength; ++i) { var glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } var restoreNeeded = false; var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var character = glyph.fontChar; var accent = glyph.accent; var scaledX, scaledY, scaledAccentX, scaledAccentY; var width = glyph.width; if (vertical) { var vmetric, vx, vy; vmetric = glyph.vmetric || defaultVMetrics; vx = glyph.vmetric ? vmetric[1] : width * 0.5; vx = -vx * widthAdvanceScale; vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (font.remeasure && width > 0) { var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { var characterScaleX = width / measuredWidth; restoreNeeded = true; ctx.save(); ctx.scale(characterScaleX, 1); scaledX /= characterScaleX; } else if (width !== measuredWidth) { scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; } } if (this.contentVisible && (glyph.isInFont || font.missingFile)) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform); if (accent) { scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); } } } var charWidth; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } ctx.restore(); }, showType3Text: function CanvasGraphics_showType3Text(glyphs) { var ctx = this.ctx; var current = this.current; var font = current.font; var fontSize = current.fontSize; var fontDirection = current.fontDirection; var spacingDir = font.vertical ? 1 : -1; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var textHScale = current.textHScale * fontDirection; var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; var glyphsLength = glyphs.length; var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; var i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; } this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y); ctx.scale(textHScale, fontDirection); for (i = 0; i < glyphsLength; ++i) { glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { spacingLength = spacingDir * glyph * fontSize / 1000; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; } var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); continue; } if (this.contentVisible) { this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform.apply(ctx, fontMatrix); this.executeOperatorList(operatorList); this.restore(); } var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; } ctx.restore(); this.processingType3 = null; }, setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {}, setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.clip(); this.endPath(); }, getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { var pattern; if (IR[0] === "TilingPattern") { var color = IR[1]; var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); var canvasGraphicsFactory = { createCanvasGraphics: ctx => { return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext); } }; pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR); } return pattern; }, setStrokeColorN: function CanvasGraphics_setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); }, setFillColorN: function CanvasGraphics_setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; }, setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.ctx.strokeStyle = color; this.current.strokeColor = color; }, setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.ctx.fillStyle = color; this.current.fillColor = color; this.current.patternFill = false; }, shadingFill: function CanvasGraphics_shadingFill(patternIR) { if (!this.contentVisible) { return; } var ctx = this.ctx; this.save(); var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR); ctx.fillStyle = pattern.getPattern(ctx, this, true); var inv = ctx.mozCurrentTransformInverse; if (inv) { var canvas = ctx.canvas; var width = canvas.width; var height = canvas.height; var bl = _util.Util.applyTransform([0, 0], inv); var br = _util.Util.applyTransform([0, height], inv); var ul = _util.Util.applyTransform([width, 0], inv); var ur = _util.Util.applyTransform([width, height], inv); var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); } else { this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); } this.restore(); }, beginInlineImage: function CanvasGraphics_beginInlineImage() { (0, _util.unreachable)("Should not call beginInlineImage"); }, beginImageData: function CanvasGraphics_beginImageData() { (0, _util.unreachable)("Should not call beginImageData"); }, paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { if (!this.contentVisible) { return; } this.save(); this.baseTransformStack.push(this.baseTransform); if (Array.isArray(matrix) && matrix.length === 6) { this.transform.apply(this, matrix); } this.baseTransform = this.ctx.mozCurrentTransform; if (bbox) { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.clip(); this.endPath(); } }, paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { if (!this.contentVisible) { return; } this.restore(); this.baseTransform = this.baseTransformStack.pop(); }, beginGroup: function CanvasGraphics_beginGroup(group) { if (!this.contentVisible) { return; } this.save(); var currentCtx = this.ctx; if (!group.isolated) { (0, _util.info)("TODO: Support non-isolated groups."); } if (group.knockout) { (0, _util.warn)("Knockout groups not supported."); } var currentTransform = currentCtx.mozCurrentTransform; if (group.matrix) { currentCtx.transform.apply(currentCtx, group.matrix); } if (!group.bbox) { throw new Error("Bounding box is required."); } var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); var scaleX = 1, scaleY = 1; if (drawnWidth > MAX_GROUP_SIZE) { scaleX = drawnWidth / MAX_GROUP_SIZE; drawnWidth = MAX_GROUP_SIZE; } if (drawnHeight > MAX_GROUP_SIZE) { scaleY = drawnHeight / MAX_GROUP_SIZE; drawnHeight = MAX_GROUP_SIZE; } var cacheId = "groupAt" + this.groupLevel; if (group.smask) { cacheId += "_smask_" + this.smaskCounter++ % 2; } var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var groupCtx = scratchCanvas.context; groupCtx.scale(1 / scaleX, 1 / scaleY); groupCtx.translate(-offsetX, -offsetY); groupCtx.transform.apply(groupCtx, currentTransform); if (group.smask) { this.smaskStack.push({ canvas: scratchCanvas.canvas, context: groupCtx, offsetX, offsetY, scaleX, scaleY, subtype: group.smask.subtype, backdrop: group.smask.backdrop, transferMap: group.smask.transferMap || null, startTransformInverse: null }); } else { currentCtx.setTransform(1, 0, 0, 1, 0, 0); currentCtx.translate(offsetX, offsetY); currentCtx.scale(scaleX, scaleY); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; this.current.activeSMask = null; }, endGroup: function CanvasGraphics_endGroup(group) { if (!this.contentVisible) { return; } this.groupLevel--; var groupCtx = this.ctx; this.ctx = this.groupStack.pop(); if (this.ctx.imageSmoothingEnabled !== undefined) { this.ctx.imageSmoothingEnabled = false; } else { this.ctx.mozImageSmoothingEnabled = false; } if (group.smask) { this.tempSMask = this.smaskStack.pop(); } else { this.ctx.drawImage(groupCtx.canvas, 0, 0); } this.restore(); }, beginAnnotations: function CanvasGraphics_beginAnnotations() { this.save(); if (this.baseTransform) { this.ctx.setTransform.apply(this.ctx, this.baseTransform); } }, endAnnotations: function CanvasGraphics_endAnnotations() { this.restore(); }, beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { this.save(); resetCtxToDefault(this.ctx); this.current = new CanvasExtraState(); if (Array.isArray(rect) && rect.length === 4) { var width = rect[2] - rect[0]; var height = rect[3] - rect[1]; this.ctx.rect(rect[0], rect[1], width, height); this.clip(); this.endPath(); } this.transform.apply(this, transform); this.transform.apply(this, matrix); }, endAnnotation: function CanvasGraphics_endAnnotation() { this.restore(); }, paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { if (!this.contentVisible) { return; } var ctx = this.ctx; var width = img.width, height = img.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var glyph = this.processingType3; if (glyph && glyph.compiled === undefined) { if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { glyph.compiled = compileType3Glyph({ data: img.data, width, height }); } else { glyph.compiled = null; } } if (glyph && glyph.compiled) { glyph.compiled(ctx); return; } var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, img); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); this.paintInlineImageXObject(maskCanvas.canvas); }, paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, scaleY, positions) { if (!this.contentVisible) { return; } var width = imgData.width; var height = imgData.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, imgData); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); var ctx = this.ctx; for (var i = 0, ii = positions.length; i < ii; i += 2) { ctx.save(); ctx.transform(scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } }, paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) { if (!this.contentVisible) { return; } var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; for (var i = 0, ii = images.length; i < ii; i++) { var image = images[i]; var width = image.width, height = image.height; var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, image); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); ctx.save(); ctx.transform.apply(ctx, image.transform); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } }, paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { if (!this.contentVisible) { return; } const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } this.paintInlineImageXObject(imgData); }, paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { if (!this.contentVisible) { return; } const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } var width = imgData.width; var height = imgData.height; var map = []; for (var i = 0, ii = positions.length; i < ii; i += 2) { map.push({ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], x: 0, y: 0, w: width, h: height }); } this.paintInlineImageXObjectGroup(imgData, map); }, paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) { if (!this.contentVisible) { return; } var width = imgData.width; var height = imgData.height; var ctx = this.ctx; this.save(); ctx.scale(1 / width, -1 / height); var currentTransform = ctx.mozCurrentTransformInverse; var a = currentTransform[0], b = currentTransform[1]; var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); var c = currentTransform[2], d = currentTransform[3]; var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); var imgToPaint, tmpCanvas; if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); var tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); imgToPaint = tmpCanvas.canvas; } var paintWidth = width, paintHeight = height; var tmpCanvasId = "prescale1"; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { var newWidth = paintWidth, newHeight = paintHeight; if (widthScale > 2 && paintWidth > 1) { newWidth = Math.ceil(paintWidth / 2); widthScale /= paintWidth / newWidth; } if (heightScale > 2 && paintHeight > 1) { newHeight = Math.ceil(paintHeight / 2); heightScale /= paintHeight / newHeight; } tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, newWidth, newHeight); tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); imgToPaint = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; } ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height); if (this.imageLayer) { var position = this.getCanvasPosition(0, -height); this.imageLayer.appendImage({ imgData, left: position[0], top: position[1], width: width / currentTransform[0], height: height / currentTransform[3] }); } this.restore(); }, paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { if (!this.contentVisible) { return; } var ctx = this.ctx; var w = imgData.width; var h = imgData.height; var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); var tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); for (var i = 0, ii = map.length; i < ii; i++) { var entry = map[i]; ctx.save(); ctx.transform.apply(ctx, entry.transform); ctx.scale(1, -1); ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); if (this.imageLayer) { var position = this.getCanvasPosition(entry.x, entry.y); this.imageLayer.appendImage({ imgData, left: position[0], top: position[1], width: w, height: h }); } ctx.restore(); } }, paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { if (!this.contentVisible) { return; } this.ctx.fillRect(0, 0, 1, 1); }, markPoint: function CanvasGraphics_markPoint(tag) {}, markPointProps: function CanvasGraphics_markPointProps(tag, properties) {}, beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) { this.markedContentStack.push({ visible: true }); }, beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) { if (tag === "OC") { this.markedContentStack.push({ visible: this.optionalContentConfig.isVisible(properties) }); } else { this.markedContentStack.push({ visible: true }); } this.contentVisible = this.isContentVisible(); }, endMarkedContent: function CanvasGraphics_endMarkedContent() { this.markedContentStack.pop(); this.contentVisible = this.isContentVisible(); }, beginCompat: function CanvasGraphics_beginCompat() {}, endCompat: function CanvasGraphics_endCompat() {}, consumePath: function CanvasGraphics_consumePath() { var ctx = this.ctx; if (this.pendingClip) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } this.pendingClip = null; } ctx.beginPath(); }, getSinglePixelWidth(scale) { if (this._cachedGetSinglePixelWidth === null) { const inverse = this.ctx.mozCurrentTransformInverse; this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3])); } return this._cachedGetSinglePixelWidth; }, getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { var transform = this.ctx.mozCurrentTransform; return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; }, isContentVisible: function CanvasGraphics_isContentVisible() { for (let i = this.markedContentStack.length - 1; i >= 0; i--) { if (!this.markedContentStack[i].visible) { return false; } } return true; } }; for (var op in _util.OPS) { CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; } return CanvasGraphics; }(); exports.CanvasGraphics = CanvasGraphics; /***/ }), /* 11 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getShadingPatternFromIR = getShadingPatternFromIR; exports.TilingPattern = void 0; var _util = __w_pdfjs_require__(2); var ShadingIRs = {}; function applyBoundingBox(ctx, bbox) { if (!bbox || typeof Path2D === "undefined") { return; } const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } ShadingIRs.RadialAxial = { fromIR: function RadialAxial_fromIR(raw) { var type = raw[1]; var bbox = raw[2]; var colorStops = raw[3]; var p0 = raw[4]; var p1 = raw[5]; var r0 = raw[6]; var r1 = raw[7]; return { type: "Pattern", getPattern: function RadialAxial_getPattern(ctx) { applyBoundingBox(ctx, bbox); var grad; if (type === "axial") { grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); } else if (type === "radial") { grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); } for (var i = 0, ii = colorStops.length; i < ii; ++i) { var c = colorStops[i]; grad.addColorStop(c[0], c[1]); } return grad; } }; } }; var createMeshCanvas = function createMeshCanvasClosure() { function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { var coords = context.coords, colors = context.colors; var bytes = data.data, rowSize = data.width * 4; var tmp; if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; } if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } var x1 = (coords[p1] + context.offsetX) * context.scaleX; var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; var x2 = (coords[p2] + context.offsetX) * context.scaleX; var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; var x3 = (coords[p3] + context.offsetX) * context.scaleX; var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; var minY = Math.round(y1), maxY = Math.round(y3); var xa, car, cag, cab; var xb, cbr, cbg, cbb; for (var y = minY; y <= maxY; y++) { if (y < y2) { let k; if (y < y1) { k = 0; } else if (y1 === y2) { k = 1; } else { k = (y1 - y) / (y1 - y2); } xa = x1 - (x1 - x2) * k; car = c1r - (c1r - c2r) * k; cag = c1g - (c1g - c2g) * k; cab = c1b - (c1b - c2b) * k; } else { let k; if (y > y3) { k = 1; } else if (y2 === y3) { k = 0; } else { k = (y2 - y) / (y2 - y3); } xa = x2 - (x2 - x3) * k; car = c2r - (c2r - c3r) * k; cag = c2g - (c2g - c3g) * k; cab = c2b - (c2b - c3b) * k; } let k; if (y < y1) { k = 0; } else if (y > y3) { k = 1; } else { k = (y1 - y) / (y1 - y3); } xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; var x1_ = Math.round(Math.min(xa, xb)); var x2_ = Math.round(Math.max(xa, xb)); var j = rowSize * y + x1_ * 4; for (var x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); if (k < 0) { k = 0; } else if (k > 1) { k = 1; } bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; bytes[j++] = 255; } } } function drawFigure(data, figure, context) { var ps = figure.coords; var cs = figure.colors; var i, ii; switch (figure.type) { case "lattice": var verticesPerRow = figure.verticesPerRow; var rows = Math.floor(ps.length / verticesPerRow) - 1; var cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { var q = i * verticesPerRow; for (var j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } break; case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } break; default: throw new Error("illegal figure"); } } function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) { var EXPECTED_SCALE = 1.1; var MAX_PATTERN_SIZE = 3000; var BORDER_SIZE = 2; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var boundsWidth = Math.ceil(bounds[2]) - offsetX; var boundsHeight = Math.ceil(bounds[3]) - offsetY; var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var scaleX = boundsWidth / width; var scaleY = boundsHeight / height; var context = { coords, colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; var paddedWidth = width + BORDER_SIZE * 2; var paddedHeight = height + BORDER_SIZE * 2; var canvas, tmpCanvas, i, ii; if (webGLContext.isEnabled) { canvas = webGLContext.drawFigures({ width, height, backgroundColor, figures, context }); tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } else { tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); var tmpCtx = tmpCanvas.context; var data = tmpCtx.createImageData(width, height); if (backgroundColor) { var bytes = data.data; for (i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; bytes[i + 2] = backgroundColor[2]; bytes[i + 3] = 255; } } for (i = 0; i < figures.length; i++) { drawFigure(data, figures[i], context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } return { canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX, scaleY }; } return createMeshCanvas; }(); ShadingIRs.Mesh = { fromIR: function Mesh_fromIR(raw) { var coords = raw[2]; var colors = raw[3]; var figures = raw[4]; var bounds = raw[5]; var matrix = raw[6]; var bbox = raw[7]; var background = raw[8]; return { type: "Pattern", getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { applyBoundingBox(ctx, bbox); var scale; if (shadingFill) { scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); } else { scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); if (matrix) { var matrixScale = _util.Util.singularValueDecompose2dScale(matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext); if (!shadingFill) { ctx.setTransform.apply(ctx, owner.baseTransform); if (matrix) { ctx.transform.apply(ctx, matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } }; } }; ShadingIRs.Dummy = { fromIR: function Dummy_fromIR() { return { type: "Pattern", getPattern: function Dummy_fromIR_getPattern() { return "hotpink"; } }; } }; function getShadingPatternFromIR(raw) { var shadingIR = ShadingIRs[raw[0]]; if (!shadingIR) { throw new Error(`Unknown IR type: ${raw[0]}`); } return shadingIR.fromIR(raw); } var TilingPattern = function TilingPatternClosure() { var PaintType = { COLORED: 1, UNCOLORED: 2 }; var MAX_PATTERN_SIZE = 3000; function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; this.paintType = IR[7]; this.tilingType = IR[8]; this.color = color; this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; this.type = "Pattern"; this.ctx = ctx; } TilingPattern.prototype = { createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { var operatorList = this.operatorList; var bbox = this.bbox; var xstep = this.xstep; var ystep = this.ystep; var paintType = this.paintType; var tilingType = this.tilingType; var color = this.color; var canvasGraphicsFactory = this.canvasGraphicsFactory; (0, _util.info)("TilingType: " + tilingType); var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); var tmpCtx = tmpCanvas.context; var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); graphics.transform(1, 0, 0, 1, -x0, -y0); this.clipBbox(graphics, bbox, x0, y0, x1, y1); graphics.executeOperatorList(operatorList); this.ctx.transform(1, 0, 0, 1, x0, y0); this.ctx.scale(1 / dimx.scale, 1 / dimy.scale); return tmpCanvas.canvas; }, getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize); var size = Math.ceil(step * scale); if (size >= maxSize) { size = maxSize; } else { scale = size / step; } return { scale, size }; }, clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { if (Array.isArray(bbox) && bbox.length === 4) { var bboxWidth = x1 - x0; var bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.clip(); graphics.endPath(); } }, setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) { const context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: var ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: throw new _util.FormatError(`Unsupported paint type: ${paintType}`); } }, getPattern: function TilingPattern_getPattern(ctx, owner) { ctx = this.ctx; ctx.setTransform.apply(ctx, this.baseTransform); ctx.transform.apply(ctx, this.matrix); var temporaryPatternCanvas = this.createPatternCanvas(owner); return ctx.createPattern(temporaryPatternCanvas, "repeat"); } }; return TilingPattern; }(); exports.TilingPattern = TilingPattern; /***/ }), /* 12 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.GlobalWorkerOptions = void 0; const GlobalWorkerOptions = Object.create(null); exports.GlobalWorkerOptions = GlobalWorkerOptions; GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; /***/ }), /* 13 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHandler = void 0; var _util = __w_pdfjs_require__(2); const CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; const StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (typeof reason !== "object" || reason === null) { return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } class MessageHandler { constructor(sourceName, targetName, comObj) { this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = event => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { this._processStreamMessage(data); return; } if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } delete this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } const action = this.actionHandler[data.action]; if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } on(actionName, handler) { const ah = this.actionHandler; if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } ah[actionName] = handler; } send(actionName, data, transfers) { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; const capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId, data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } sendWithStream(actionName, data, queueingStrategy, transfers) { const streamId = this.streamId++; const sourceName = this.sourceName; const targetName = this.targetName; const comObj = this.comObj; return new ReadableStream({ start: controller => { const startCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId] = { controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; this._postMessage({ sourceName, targetName, action: actionName, streamId, data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: controller => { const pullCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: reason => { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL, streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } _createStreamSink(data) { const self = this; const action = this.actionHandler[data.action]; const streamId = data.streamId; const sourceName = this.sourceName; const targetName = data.sourceName; const comObj = this.comObj; const streamSink = { enqueue(chunk, size = 1, transfers) { if (this.isCancelled) { return; } const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } self._postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, streamId, chunk }, transfers); }, close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CLOSE, streamId }); delete self.streamSinks[streamId]; }, error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.ERROR, streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, reason: wrapReason(reason) }); }); } _processStreamMessage(data) { const streamId = data.streamId; const sourceName = this.sourceName; const targetName = data.sourceName; const comObj = this.comObj; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { this.streamControllers[streamId].startCall.resolve(); } else { this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { this.streamControllers[streamId].pullCall.resolve(); } else { this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!this.streamSinks[streamId]) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); break; } if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[streamId].sinkCapability.resolve(); } this.streamSinks[streamId].desiredSize = data.desiredSize; const { onPull } = this.streamSinks[data.streamId]; new Promise(function (resolve) { resolve(onPull && onPull()); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].isClosed = true; this.streamControllers[streamId].controller.close(); this._deleteStreamController(streamId); break; case StreamKind.ERROR: (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); this.streamControllers[streamId].controller.error(wrapReason(data.reason)); this._deleteStreamController(streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { this.streamControllers[streamId].cancelCall.resolve(); } else { this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamId); break; case StreamKind.CANCEL: if (!this.streamSinks[streamId]) { break; } const { onCancel } = this.streamSinks[data.streamId]; new Promise(function (resolve) { resolve(onCancel && onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, reason: wrapReason(reason) }); }); this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[streamId].isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } async _deleteStreamController(streamId) { await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { return capability && capability.promise; })); delete this.streamControllers[streamId]; } _postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } } exports.MessageHandler = MessageHandler; /***/ }), /* 14 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Metadata = void 0; var _util = __w_pdfjs_require__(2); var _xml_parser = __w_pdfjs_require__(15); class Metadata { constructor(data) { (0, _util.assert)(typeof data === "string", "Metadata: input is not a string"); data = this._repair(data); const parser = new _xml_parser.SimpleXMLParser(); const xmlDocument = parser.parseFromString(data); this._metadataMap = new Map(); if (xmlDocument) { this._parse(xmlDocument); } } _repair(data) { return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) { const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { switch (name) { case "amp": return "&"; case "apos": return "'"; case "gt": return ">"; case "lt": return "<"; case "quot": return '"'; } throw new Error(`_repair: ${name} isn't defined.`); }); let chars = ""; for (let i = 0, ii = bytes.length; i < ii; i += 2) { const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { chars += String.fromCharCode(code); } else { chars += "&#x" + (0x10000 + code).toString(16).substring(1) + ";"; } } return ">" + chars; }); } _parse(xmlDocument) { let rdf = xmlDocument.documentElement; if (rdf.nodeName.toLowerCase() !== "rdf:rdf") { rdf = rdf.firstChild; while (rdf && rdf.nodeName.toLowerCase() !== "rdf:rdf") { rdf = rdf.nextSibling; } } const nodeName = rdf ? rdf.nodeName.toLowerCase() : null; if (!rdf || nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { return; } const children = rdf.childNodes; for (let i = 0, ii = children.length; i < ii; i++) { const desc = children[i]; if (desc.nodeName.toLowerCase() !== "rdf:description") { continue; } for (let j = 0, jj = desc.childNodes.length; j < jj; j++) { if (desc.childNodes[j].nodeName.toLowerCase() !== "#text") { const entry = desc.childNodes[j]; const name = entry.nodeName.toLowerCase(); this._metadataMap.set(name, entry.textContent.trim()); } } } } get(name) { return this._metadataMap.has(name) ? this._metadataMap.get(name) : null; } getAll() { return Object.fromEntries(this._metadataMap); } has(name) { return this._metadataMap.has(name); } } exports.Metadata = Metadata; /***/ }), /* 15 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.SimpleXMLParser = void 0; const XMLParserErrorCode = { NoError: 0, EndOfDocument: -1, UnterminatedCdat: -2, UnterminatedXmlDeclaration: -3, UnterminatedDoctypeDeclaration: -4, UnterminatedComment: -5, MalformedElement: -6, OutOfMemory: -7, UnterminatedAttributeValue: -8, UnterminatedElement: -9, ElementNeverBegun: -10 }; function isWhitespace(s, index) { const ch = s[index]; return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; } function isWhitespaceString(s) { for (let i = 0, ii = s.length; i < ii; i++) { if (!isWhitespace(s, i)) { return false; } } return true; } class XMLParserBase { _resolveEntities(s) { return s.replace(/&([^;]+);/g, (all, entity) => { if (entity.substring(0, 2) === "#x") { return String.fromCharCode(parseInt(entity.substring(2), 16)); } else if (entity.substring(0, 1) === "#") { return String.fromCharCode(parseInt(entity.substring(1), 10)); } switch (entity) { case "lt": return "<"; case "gt": return ">"; case "amp": return "&"; case "quot": return '"'; } return this.onResolveEntity(entity); }); } _parseContent(s, start) { const attributes = []; let pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } const name = s.substring(start, pos); skipWs(); while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { skipWs(); let attrName = "", attrValue = ""; while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { attrName += s[pos]; ++pos; } skipWs(); if (s[pos] !== "=") { return null; } ++pos; skipWs(); const attrEndChar = s[pos]; if (attrEndChar !== '"' && attrEndChar !== "'") { return null; } const attrEndIndex = s.indexOf(attrEndChar, ++pos); if (attrEndIndex < 0) { return null; } attrValue = s.substring(pos, attrEndIndex); attributes.push({ name: attrName, value: this._resolveEntities(attrValue) }); pos = attrEndIndex + 1; skipWs(); } return { name, attributes, parsed: pos - start }; } _parseProcessingInstruction(s, start) { let pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } const name = s.substring(start, pos); skipWs(); const attrStart = pos; while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { ++pos; } const value = s.substring(attrStart, pos); return { name, value, parsed: pos - start }; } parseXml(s) { let i = 0; while (i < s.length) { const ch = s[i]; let j = i; if (ch === "<") { ++j; const ch2 = s[j]; let q; switch (ch2) { case "/": ++j; q = s.indexOf(">", j); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onEndElement(s.substring(j, q)); j = q + 1; break; case "?": ++j; const pi = this._parseProcessingInstruction(s, j); if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); return; } this.onPi(pi.name, pi.value); j += pi.parsed + 2; break; case "!": if (s.substring(j + 1, j + 3) === "--") { q = s.indexOf("-->", j + 3); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedComment); return; } this.onComment(s.substring(j + 3, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "[CDATA[") { q = s.indexOf("]]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedCdat); return; } this.onCdata(s.substring(j + 8, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { const q2 = s.indexOf("[", j + 8); let complexDoctype = false; q = s.indexOf(">", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } if (q2 > 0 && q > q2) { q = s.indexOf("]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } complexDoctype = true; } const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); this.onDoctype(doctypeContent); j = q + (complexDoctype ? 2 : 1); } else { this.onError(XMLParserErrorCode.MalformedElement); return; } break; default: const content = this._parseContent(s, j); if (content === null) { this.onError(XMLParserErrorCode.MalformedElement); return; } let isClosed = false; if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { isClosed = true; } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onBeginElement(content.name, content.attributes, isClosed); j += content.parsed + (isClosed ? 2 : 1); break; } } else { while (j < s.length && s[j] !== "<") { j++; } const text = s.substring(i, j); this.onText(this._resolveEntities(text)); } i = j; } } onResolveEntity(name) { return `&${name};`; } onPi(name, value) {} onComment(text) {} onCdata(text) {} onDoctype(doctypeContent) {} onText(text) {} onBeginElement(name, attributes, isEmpty) {} onEndElement(name) {} onError(code) {} } class SimpleDOMNode { constructor(nodeName, nodeValue) { this.nodeName = nodeName; this.nodeValue = nodeValue; Object.defineProperty(this, "parentNode", { value: null, writable: true }); } get firstChild() { return this.childNodes && this.childNodes[0]; } get nextSibling() { const childNodes = this.parentNode.childNodes; if (!childNodes) { return undefined; } const index = childNodes.indexOf(this); if (index === -1) { return undefined; } return childNodes[index + 1]; } get textContent() { if (!this.childNodes) { return this.nodeValue || ""; } return this.childNodes.map(function (child) { return child.textContent; }).join(""); } hasChildNodes() { return this.childNodes && this.childNodes.length > 0; } } class SimpleXMLParser extends XMLParserBase { constructor() { super(); this._currentFragment = null; this._stack = null; this._errorCode = XMLParserErrorCode.NoError; } parseFromString(data) { this._currentFragment = []; this._stack = []; this._errorCode = XMLParserErrorCode.NoError; this.parseXml(data); if (this._errorCode !== XMLParserErrorCode.NoError) { return undefined; } const [documentElement] = this._currentFragment; if (!documentElement) { return undefined; } return { documentElement }; } onResolveEntity(name) { switch (name) { case "apos": return "'"; } return super.onResolveEntity(name); } onText(text) { if (isWhitespaceString(text)) { return; } const node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } onCdata(text) { const node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } onBeginElement(name, attributes, isEmpty) { const node = new SimpleDOMNode(name); node.childNodes = []; this._currentFragment.push(node); if (isEmpty) { return; } this._stack.push(this._currentFragment); this._currentFragment = node.childNodes; } onEndElement(name) { this._currentFragment = this._stack.pop() || []; const lastElement = this._currentFragment[this._currentFragment.length - 1]; if (!lastElement) { return; } for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { lastElement.childNodes[i].parentNode = lastElement; } } onError(code) { this._errorCode = code; } } exports.SimpleXMLParser = SimpleXMLParser; /***/ }), /* 16 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.OptionalContentConfig = void 0; var _util = __w_pdfjs_require__(2); class OptionalContentGroup { constructor(name, intent) { this.visible = true; this.name = name; this.intent = intent; } } class OptionalContentConfig { constructor(data) { this.name = null; this.creator = null; this._order = null; this._groups = new Map(); if (data === null) { return; } this.name = data.name; this.creator = data.creator; this._order = data.order; for (const group of data.groups) { this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); } if (data.baseState === "OFF") { for (const group of this._groups) { group.visible = false; } } for (const on of data.on) { this._groups.get(on).visible = true; } for (const off of data.off) { this._groups.get(off).visible = false; } } isVisible(group) { if (group.type === "OCG") { if (!this._groups.has(group.id)) { (0, _util.warn)(`Optional content group not found: ${group.id}`); return true; } return this._groups.get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { (0, _util.warn)("Visibility expression not supported yet."); } if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (this._groups.get(id).visible) { return true; } } return false; } else if (group.policy === "AllOn") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (!this._groups.get(id).visible) { return false; } } return true; } else if (group.policy === "AnyOff") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (!this._groups.get(id).visible) { return true; } } return false; } else if (group.policy === "AllOff") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (this._groups.get(id).visible) { return false; } } return true; } (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); return true; } (0, _util.warn)(`Unknown group type ${group.type}.`); return true; } setVisibility(id, visible = true) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return; } this._groups.get(id).visible = !!visible; } getOrder() { if (!this._groups.size) { return null; } if (this._order) { return this._order.slice(); } return Array.from(this._groups.keys()); } getGroups() { if (!this._groups.size) { return null; } return Object.fromEntries(this._groups); } getGroup(id) { return this._groups.get(id) || null; } } exports.OptionalContentConfig = OptionalContentConfig; /***/ }), /* 17 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFDataTransportStream = void 0; var _util = __w_pdfjs_require__(2); class PDFDataTransportStream { constructor(params, pdfDataRangeTransport) { (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); this._queuedChunks = []; this._progressiveDone = params.progressiveDone || false; const initialData = params.initialData; if (initialData && initialData.length > 0) { const buffer = new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } this._pdfDataRangeTransport = pdfDataRangeTransport; this._isStreamingSupported = !params.disableStream; this._isRangeSupported = !params.disableRange; this._contentLength = params.length; this._fullRequestReader = null; this._rangeReaders = []; this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); this._pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { this._onReceiveData({ chunk }); }); this._pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); this._pdfDataRangeTransport.transportReady(); } _onReceiveData(args) { const buffer = new Uint8Array(args.chunk).buffer; if (args.begin === undefined) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { const found = this._rangeReaders.some(function (rangeReader) { if (rangeReader._begin !== args.begin) { return false; } rangeReader._enqueue(buffer); return true; }); (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } get _progressiveDataLength() { return this._fullRequestReader ? this._fullRequestReader._loaded : 0; } _onProgress(evt) { if (evt.total === undefined) { const firstReader = this._rangeReaders[0]; if (firstReader && firstReader.onProgress) { firstReader.onProgress({ loaded: evt.loaded }); } } else { const fullReader = this._fullRequestReader; if (fullReader && fullReader.onProgress) { fullReader.onProgress({ loaded: evt.loaded, total: evt.total }); } } } _onProgressiveDone() { if (this._fullRequestReader) { this._fullRequestReader.progressiveDone(); } this._progressiveDone = true; } _removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone); } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } const readers = this._rangeReaders.slice(0); readers.forEach(function (rangeReader) { rangeReader.cancel(reason); }); this._pdfDataRangeTransport.abort(); } } exports.PDFDataTransportStream = PDFDataTransportStream; class PDFDataTransportStreamReader { constructor(stream, queuedChunks, progressiveDone = false) { this._stream = stream; this._done = progressiveDone || false; this._filename = null; this._queuedChunks = queuedChunks || []; this._loaded = 0; for (const chunk of this._queuedChunks) { this._loaded += chunk.byteLength; } this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunks.push(chunk); } this._loaded += chunk.byteLength; } get headersReady() { return this._headersReady; } get filename() { return this._filename; } get isRangeSupported() { return this._stream._isRangeSupported; } get isStreamingSupported() { return this._stream._isStreamingSupported; } get contentLength() { return this._stream._contentLength; } async read() { if (this._queuedChunks.length > 0) { const chunk = this._queuedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } progressiveDone() { if (this._done) { return; } this._done = true; } } class PDFDataTransportStreamRangeReader { constructor(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { const requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } this._done = true; this._stream._removeRangeReader(this); } get isStreamingSupported() { return false; } async read() { if (this._queuedChunk) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._stream._removeRangeReader(this); } } /***/ }), /* 18 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.WebGLContext = void 0; var _util = __w_pdfjs_require__(2); class WebGLContext { constructor({ enable = false }) { this._enabled = enable === true; } get isEnabled() { let enabled = this._enabled; if (enabled) { enabled = WebGLUtils.tryInitGL(); } return (0, _util.shadow)(this, "isEnabled", enabled); } composeSMask({ layer, mask, properties }) { return WebGLUtils.composeSMask(layer, mask, properties); } drawFigures({ width, height, backgroundColor, figures, context }) { return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); } clear() { WebGLUtils.cleanup(); } } exports.WebGLContext = WebGLContext; var WebGLUtils = function WebGLUtilsClosure() { function loadShader(gl, code, shaderType) { var shader = gl.createShader(shaderType); gl.shaderSource(shader, code); gl.compileShader(shader); var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); if (!compiled) { var errorMsg = gl.getShaderInfoLog(shader); throw new Error("Error during shader compilation: " + errorMsg); } return shader; } function createVertexShader(gl, code) { return loadShader(gl, code, gl.VERTEX_SHADER); } function createFragmentShader(gl, code) { return loadShader(gl, code, gl.FRAGMENT_SHADER); } function createProgram(gl, shaders) { var program = gl.createProgram(); for (var i = 0, ii = shaders.length; i < ii; ++i) { gl.attachShader(program, shaders[i]); } gl.linkProgram(program); var linked = gl.getProgramParameter(program, gl.LINK_STATUS); if (!linked) { var errorMsg = gl.getProgramInfoLog(program); throw new Error("Error during program linking: " + errorMsg); } return program; } function createTexture(gl, image, textureId) { gl.activeTexture(textureId); var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); return texture; } var currentGL, currentCanvas; function generateGL() { if (currentGL) { return; } currentCanvas = document.createElement("canvas"); currentGL = currentCanvas.getContext("webgl", { premultipliedalpha: false }); } var smaskVertexShaderCode = "\ attribute vec2 a_position; \ attribute vec2 a_texCoord; \ \ uniform vec2 u_resolution; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_texCoord = a_texCoord; \ } "; var smaskFragmentShaderCode = "\ precision mediump float; \ \ uniform vec4 u_backdrop; \ uniform int u_subtype; \ uniform sampler2D u_image; \ uniform sampler2D u_mask; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec4 imageColor = texture2D(u_image, v_texCoord); \ vec4 maskColor = texture2D(u_mask, v_texCoord); \ if (u_backdrop.a > 0.0) { \ maskColor.rgb = maskColor.rgb * maskColor.a + \ u_backdrop.rgb * (1.0 - maskColor.a); \ } \ float lum; \ if (u_subtype == 0) { \ lum = maskColor.a; \ } else { \ lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ maskColor.b * 0.11; \ } \ imageColor.a *= lum; \ imageColor.rgb *= imageColor.a; \ gl_FragColor = imageColor; \ } "; var smaskCache = null; function initSmaskGL() { var canvas, gl; generateGL(); canvas = currentCanvas; currentCanvas = null; gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, smaskVertexShaderCode); var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); cache.positionLocation = gl.getAttribLocation(program, "a_position"); cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop"); cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype"); var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); var texLayerLocation = gl.getUniformLocation(program, "u_image"); var texMaskLocation = gl.getUniformLocation(program, "u_mask"); var texCoordBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); gl.enableVertexAttribArray(texCoordLocation); gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); gl.uniform1i(texLayerLocation, 0); gl.uniform1i(texMaskLocation, 1); smaskCache = cache; } function composeSMask(layer, mask, properties) { var width = layer.width, height = layer.height; if (!smaskCache) { initSmaskGL(); } var cache = smaskCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); if (properties.backdrop) { gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); } else { gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); } gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0); var texture = createTexture(gl, layer, gl.TEXTURE0); var maskTexture = createTexture(gl, mask, gl.TEXTURE1); var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); gl.clearColor(0, 0, 0, 0); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 6); gl.flush(); gl.deleteTexture(texture); gl.deleteTexture(maskTexture); gl.deleteBuffer(buffer); return canvas; } var figuresVertexShaderCode = "\ attribute vec2 a_position; \ attribute vec3 a_color; \ \ uniform vec2 u_resolution; \ uniform vec2 u_scale; \ uniform vec2 u_offset; \ \ varying vec4 v_color; \ \ void main() { \ vec2 position = (a_position + u_offset) * u_scale; \ vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_color = vec4(a_color / 255.0, 1.0); \ } "; var figuresFragmentShaderCode = "\ precision mediump float; \ \ varying vec4 v_color; \ \ void main() { \ gl_FragColor = v_color; \ } "; var figuresCache = null; function initFiguresGL() { var canvas, gl; generateGL(); canvas = currentCanvas; currentCanvas = null; gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, figuresVertexShaderCode); var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution"); cache.scaleLocation = gl.getUniformLocation(program, "u_scale"); cache.offsetLocation = gl.getUniformLocation(program, "u_offset"); cache.positionLocation = gl.getAttribLocation(program, "a_position"); cache.colorLocation = gl.getAttribLocation(program, "a_color"); figuresCache = cache; } function drawFigures(width, height, backgroundColor, figures, context) { if (!figuresCache) { initFiguresGL(); } var cache = figuresCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); var count = 0; var i, ii, rows; for (i = 0, ii = figures.length; i < ii; i++) { switch (figures[i].type) { case "lattice": rows = figures[i].coords.length / figures[i].verticesPerRow | 0; count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; break; case "triangles": count += figures[i].coords.length; break; } } var coords = new Float32Array(count * 2); var colors = new Uint8Array(count * 3); var coordsMap = context.coords, colorsMap = context.colors; var pIndex = 0, cIndex = 0; for (i = 0, ii = figures.length; i < ii; i++) { var figure = figures[i], ps = figure.coords, cs = figure.colors; switch (figure.type) { case "lattice": var cols = figure.verticesPerRow; rows = ps.length / cols | 0; for (var row = 1; row < rows; row++) { var offset = row * cols + 1; for (var col = 1; col < cols; col++, offset++) { coords[pIndex] = coordsMap[ps[offset - cols - 1]]; coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; coords[pIndex + 2] = coordsMap[ps[offset - cols]]; coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; coords[pIndex + 4] = coordsMap[ps[offset - 1]]; coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; colors[cIndex] = colorsMap[cs[offset - cols - 1]]; colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; colors[cIndex + 3] = colorsMap[cs[offset - cols]]; colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; colors[cIndex + 6] = colorsMap[cs[offset - 1]]; colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; coords[pIndex + 6] = coords[pIndex + 2]; coords[pIndex + 7] = coords[pIndex + 3]; coords[pIndex + 8] = coords[pIndex + 4]; coords[pIndex + 9] = coords[pIndex + 5]; coords[pIndex + 10] = coordsMap[ps[offset]]; coords[pIndex + 11] = coordsMap[ps[offset] + 1]; colors[cIndex + 9] = colors[cIndex + 3]; colors[cIndex + 10] = colors[cIndex + 4]; colors[cIndex + 11] = colors[cIndex + 5]; colors[cIndex + 12] = colors[cIndex + 6]; colors[cIndex + 13] = colors[cIndex + 7]; colors[cIndex + 14] = colors[cIndex + 8]; colors[cIndex + 15] = colorsMap[cs[offset]]; colors[cIndex + 16] = colorsMap[cs[offset] + 1]; colors[cIndex + 17] = colorsMap[cs[offset] + 2]; pIndex += 12; cIndex += 18; } } break; case "triangles": for (var j = 0, jj = ps.length; j < jj; j++) { coords[pIndex] = coordsMap[ps[j]]; coords[pIndex + 1] = coordsMap[ps[j] + 1]; colors[cIndex] = colorsMap[cs[j]]; colors[cIndex + 1] = colorsMap[cs[j] + 1]; colors[cIndex + 2] = colorsMap[cs[j] + 2]; pIndex += 2; cIndex += 3; } break; } } if (backgroundColor) { gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); } else { gl.clearColor(0, 0, 0, 0); } gl.clear(gl.COLOR_BUFFER_BIT); var coordsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); var colorsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.colorLocation); gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); gl.drawArrays(gl.TRIANGLES, 0, count); gl.flush(); gl.deleteBuffer(coordsBuffer); gl.deleteBuffer(colorsBuffer); return canvas; } return { tryInitGL() { try { generateGL(); return !!currentGL; } catch (ex) {} return false; }, composeSMask, drawFigures, cleanup() { if (smaskCache && smaskCache.canvas) { smaskCache.canvas.width = 0; smaskCache.canvas.height = 0; } if (figuresCache && figuresCache.canvas) { figuresCache.canvas.width = 0; figuresCache.canvas.height = 0; } smaskCache = null; figuresCache = null; } }; }(); /***/ }), /* 19 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.AnnotationLayer = void 0; var _display_utils = __w_pdfjs_require__(1); var _util = __w_pdfjs_require__(2); var _annotation_storage = __w_pdfjs_require__(8); class AnnotationElementFactory { static create(parameters) { const subtype = parameters.data.annotationType; switch (subtype) { case _util.AnnotationType.LINK: return new LinkAnnotationElement(parameters); case _util.AnnotationType.TEXT: return new TextAnnotationElement(parameters); case _util.AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } return new PushButtonWidgetAnnotationElement(parameters); case "Ch": return new ChoiceWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); case _util.AnnotationType.POPUP: return new PopupAnnotationElement(parameters); case _util.AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); case _util.AnnotationType.LINE: return new LineAnnotationElement(parameters); case _util.AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); case _util.AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); case _util.AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); case _util.AnnotationType.CARET: return new CaretAnnotationElement(parameters); case _util.AnnotationType.INK: return new InkAnnotationElement(parameters); case _util.AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); case _util.AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); case _util.AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); case _util.AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); case _util.AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); case _util.AnnotationType.STAMP: return new StampAnnotationElement(parameters); case _util.AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); } } } class AnnotationElement { constructor(parameters, isRenderable = false, ignoreBorder = false) { this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; this.page = parameters.page; this.viewport = parameters.viewport; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderInteractiveForms = parameters.renderInteractiveForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } } _createContainer(ignoreBorder = false) { const data = this.data, page = this.page, viewport = this.viewport; const container = document.createElement("section"); let width = data.rect[2] - data.rect[0]; let height = data.rect[3] - data.rect[1]; container.setAttribute("data-annotation-id", data.id); const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); container.style.transform = `matrix(${viewport.transform.join(",")})`; container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`; if (!ignoreBorder && data.borderStyle.width > 0) { container.style.borderWidth = `${data.borderStyle.width}px`; if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { width = width - 2 * data.borderStyle.width; height = height - 2 * data.borderStyle.width; } const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { const radius = `${horizontalRadius}px / ${verticalRadius}px`; container.style.borderRadius = radius; } switch (data.borderStyle.style) { case _util.AnnotationBorderStyleType.SOLID: container.style.borderStyle = "solid"; break; case _util.AnnotationBorderStyleType.DASHED: container.style.borderStyle = "dashed"; break; case _util.AnnotationBorderStyleType.BEVELED: (0, _util.warn)("Unimplemented border style: beveled"); break; case _util.AnnotationBorderStyleType.INSET: (0, _util.warn)("Unimplemented border style: inset"); break; case _util.AnnotationBorderStyleType.UNDERLINE: container.style.borderBottomStyle = "solid"; break; } if (data.color) { container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); } else { container.style.borderWidth = 0; } } container.style.left = `${rect[0]}px`; container.style.top = `${rect[1]}px`; container.style.width = `${width}px`; container.style.height = `${height}px`; return container; } _createPopup(container, trigger, data) { if (!trigger) { trigger = document.createElement("div"); trigger.style.height = container.style.height; trigger.style.width = container.style.width; container.appendChild(trigger); } const popupElement = new PopupElement({ container, trigger, color: data.color, title: data.title, modificationDate: data.modificationDate, contents: data.contents, hideWrapper: true }); const popup = popupElement.render(); popup.style.left = container.style.width; container.appendChild(popup); } render() { (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); } } class LinkAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action); super(parameters, isRenderable); } render() { this.container.className = "linkAnnotation"; const { data, linkService } = this; const link = document.createElement("a"); if (data.url) { (0, _display_utils.addLinkAttributes)(link, { url: data.url, target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget, rel: linkService.externalLinkRel, enabled: linkService.externalLinkEnabled }); } else if (data.action) { this._bindNamedAction(link, data.action); } else { this._bindLink(link, data.dest); } this.container.appendChild(link); return this.container; } _bindLink(link, destination) { link.href = this.linkService.getDestinationHash(destination); link.onclick = () => { if (destination) { this.linkService.navigateTo(destination); } return false; }; if (destination) { link.className = "internalLink"; } } _bindNamedAction(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeNamedAction(action); return false; }; link.className = "internalLink"; } } class TextAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable); } render() { this.container.className = "textAnnotation"; const image = document.createElement("img"); image.style.height = this.container.style.height; image.style.width = this.container.style.width; image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.alt = "[{{type}} Annotation]"; image.dataset.l10nId = "text_annotation_type"; image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); if (!this.data.hasPopup) { this._createPopup(this.container, image, this.data); } this.container.appendChild(image); return this.container; } } class WidgetAnnotationElement extends AnnotationElement { render() { return this.container; } } class TextWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, isRenderable); } render() { const TEXT_ALIGNMENT = ["left", "center", "right"]; const storage = this.annotationStorage; const id = this.data.id; this.container.className = "textWidgetAnnotation"; let element = null; if (this.renderInteractiveForms) { const textContent = storage.getOrCreateValue(id, this.data.fieldValue); if (this.data.multiLine) { element = document.createElement("textarea"); element.textContent = textContent; } else { element = document.createElement("input"); element.type = "text"; element.setAttribute("value", textContent); } element.addEventListener("input", function (event) { storage.setValue(id, event.target.value); }); element.disabled = this.data.readOnly; element.name = this.data.fieldName; if (this.data.maxLen !== null) { element.maxLength = this.data.maxLen; } if (this.data.comb) { const fieldWidth = this.data.rect[2] - this.data.rect[0]; const combWidth = fieldWidth / this.data.maxLen; element.classList.add("comb"); element.style.letterSpacing = `calc(${combWidth}px - 1ch)`; } } else { element = document.createElement("div"); element.textContent = this.data.fieldValue; element.style.verticalAlign = "middle"; element.style.display = "table-cell"; let font = null; if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) { font = this.page.commonObjs.get(this.data.fontRefName); } this._setTextStyle(element, font); } if (this.data.textAlignment !== null) { element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } this.container.appendChild(element); return this.container; } _setTextStyle(element, font) { const style = element.style; style.fontSize = `${this.data.fontSize}px`; style.direction = this.data.fontDirection < 0 ? "rtl" : "ltr"; if (!font) { return; } let bold = "normal"; if (font.black) { bold = "900"; } else if (font.bold) { bold = "bold"; } style.fontWeight = bold; style.fontStyle = font.italic ? "italic" : "normal"; const fontFamily = font.loadedName ? `"${font.loadedName}", ` : ""; const fallbackName = font.fallbackName || "Helvetica, sans-serif"; style.fontFamily = fontFamily + fallbackName; } } class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, parameters.renderInteractiveForms); } render() { const storage = this.annotationStorage; const data = this.data; const id = data.id; const value = storage.getOrCreateValue(id, data.fieldValue && data.fieldValue !== "Off"); this.container.className = "buttonWidgetAnnotation checkBox"; const element = document.createElement("input"); element.disabled = data.readOnly; element.type = "checkbox"; element.name = this.data.fieldName; if (value) { element.setAttribute("checked", true); } element.addEventListener("change", function (event) { storage.setValue(id, event.target.checked); }); this.container.appendChild(element); return this.container; } } class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, parameters.renderInteractiveForms); } render() { this.container.className = "buttonWidgetAnnotation radioButton"; const storage = this.annotationStorage; const data = this.data; const id = data.id; const value = storage.getOrCreateValue(id, data.fieldValue === data.buttonValue); const element = document.createElement("input"); element.disabled = data.readOnly; element.type = "radio"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.addEventListener("change", function (event) { const name = event.target.name; for (const radio of document.getElementsByName(name)) { if (radio !== event.target) { storage.setValue(radio.parentNode.getAttribute("data-annotation-id"), false); } } storage.setValue(id, event.target.checked); }); this.container.appendChild(element); return this.container; } } class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { render() { const container = super.render(); container.className = "buttonWidgetAnnotation pushButton"; return container; } } class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, parameters.renderInteractiveForms); } render() { this.container.className = "choiceWidgetAnnotation"; const storage = this.annotationStorage; const id = this.data.id; storage.getOrCreateValue(id, this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null); const selectElement = document.createElement("select"); selectElement.disabled = this.data.readOnly; selectElement.name = this.data.fieldName; if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } for (const option of this.data.options) { const optionElement = document.createElement("option"); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; if (this.data.fieldValue.includes(option.exportValue)) { optionElement.setAttribute("selected", true); } selectElement.appendChild(optionElement); } selectElement.addEventListener("input", function (event) { const options = event.target.options; const value = options[options.selectedIndex].value; storage.setValue(id, value); }); this.container.appendChild(selectElement); return this.container; } } class PopupAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.title || parameters.data.contents); super(parameters, isRenderable); } render() { const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"]; this.container.className = "popupAnnotation"; if (IGNORE_TYPES.includes(this.data.parentType)) { return this.container; } const selector = `[data-annotation-id="${this.data.parentId}"]`; const parentElement = this.layer.querySelector(selector); if (!parentElement) { return this.container; } const popup = new PopupElement({ container: this.container, trigger: parentElement, color: this.data.color, title: this.data.title, modificationDate: this.data.modificationDate, contents: this.data.contents }); const parentLeft = parseFloat(parentElement.style.left); const parentWidth = parseFloat(parentElement.style.width); this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`; this.container.style.left = `${parentLeft + parentWidth}px`; this.container.appendChild(popup.render()); return this.container; } } class PopupElement { constructor(parameters) { this.container = parameters.container; this.trigger = parameters.trigger; this.color = parameters.color; this.title = parameters.title; this.modificationDate = parameters.modificationDate; this.contents = parameters.contents; this.hideWrapper = parameters.hideWrapper || false; this.pinned = false; } render() { const BACKGROUND_ENLIGHT = 0.7; const wrapper = document.createElement("div"); wrapper.className = "popupWrapper"; this.hideElement = this.hideWrapper ? wrapper : this.container; this.hideElement.setAttribute("hidden", true); const popup = document.createElement("div"); popup.className = "popup"; const color = this.color; if (color) { const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0); } const title = document.createElement("h1"); title.textContent = this.title; popup.appendChild(title); const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); if (dateObject) { const modificationDate = document.createElement("span"); modificationDate.textContent = "{{date}}, {{time}}"; modificationDate.dataset.l10nId = "annotation_date_string"; modificationDate.dataset.l10nArgs = JSON.stringify({ date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }); popup.appendChild(modificationDate); } const contents = this._formatContents(this.contents); popup.appendChild(contents); this.trigger.addEventListener("click", this._toggle.bind(this)); this.trigger.addEventListener("mouseover", this._show.bind(this, false)); this.trigger.addEventListener("mouseout", this._hide.bind(this, false)); popup.addEventListener("click", this._hide.bind(this, true)); wrapper.appendChild(popup); return wrapper; } _formatContents(contents) { const p = document.createElement("p"); const lines = contents.split(/(?:\r\n?|\n)/); for (let i = 0, ii = lines.length; i < ii; ++i) { const line = lines[i]; p.appendChild(document.createTextNode(line)); if (i < ii - 1) { p.appendChild(document.createElement("br")); } } return p; } _toggle() { if (this.pinned) { this._hide(true); } else { this._show(true); } } _show(pin = false) { if (pin) { this.pinned = true; } if (this.hideElement.hasAttribute("hidden")) { this.hideElement.removeAttribute("hidden"); this.container.style.zIndex += 1; } } _hide(unpin = true) { if (unpin) { this.pinned = false; } if (!this.hideElement.hasAttribute("hidden") && !this.pinned) { this.hideElement.setAttribute("hidden", true); this.container.style.zIndex -= 1; } } } class FreeTextAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "freeTextAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class LineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "lineAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const line = this.svgFactory.createElement("svg:line"); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); svg.appendChild(line); this.container.append(svg); this._createPopup(this.container, line, data); return this.container; } } class SquareAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "squareAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const borderWidth = data.borderStyle.width; const square = this.svgFactory.createElement("svg:rect"); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "none"); svg.appendChild(square); this.container.append(svg); this._createPopup(this.container, square, data); return this.container; } } class CircleAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "circleAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const borderWidth = data.borderStyle.width; const circle = this.svgFactory.createElement("svg:ellipse"); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "none"); svg.appendChild(circle); this.container.append(svg); this._createPopup(this.container, circle, data); return this.container; } } class PolylineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); this.containerClassName = "polylineAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.className = this.containerClassName; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); let points = []; for (const coordinate of data.vertices) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(x + "," + y); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "none"); svg.appendChild(polyline); this.container.append(svg); this._createPopup(this.container, polyline, data); return this.container; } } class PolygonAnnotationElement extends PolylineAnnotationElement { constructor(parameters) { super(parameters); this.containerClassName = "polygonAnnotation"; this.svgElementName = "svg:polygon"; } } class CaretAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "caretAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class InkAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.className = this.containerClassName; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); for (const inkList of data.inkLists) { let points = []; for (const coordinate of inkList) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(`${x},${y}`); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "none"); this._createPopup(this.container, polyline, data); svg.appendChild(polyline); } this.container.append(svg); return this.container; } } class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "highlightAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class UnderlineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "underlineAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class SquigglyAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "squigglyAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class StrikeOutAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "strikeoutAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class StampAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); super(parameters, isRenderable, true); } render() { this.container.className = "stampAnnotation"; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } } class FileAttachmentAnnotationElement extends AnnotationElement { constructor(parameters) { super(parameters, true); const { filename, content } = this.data.file; this.filename = (0, _display_utils.getFilenameFromUrl)(filename); this.content = content; if (this.linkService.eventBus) { this.linkService.eventBus.dispatch("fileattachmentannotation", { source: this, id: (0, _util.stringToPDFString)(filename), filename, content }); } } render() { this.container.className = "fileAttachmentAnnotation"; const trigger = document.createElement("div"); trigger.style.height = this.container.style.height; trigger.style.width = this.container.style.width; trigger.addEventListener("dblclick", this._download.bind(this)); if (!this.data.hasPopup && (this.data.title || this.data.contents)) { this._createPopup(this.container, trigger, this.data); } this.container.appendChild(trigger); return this.container; } _download() { if (!this.downloadManager) { (0, _util.warn)("Download cannot be started due to unavailable download manager"); return; } this.downloadManager.downloadData(this.content, this.filename, ""); } } class AnnotationLayer { static render(parameters) { const sortedAnnotations = [], popupAnnotations = []; for (const data of parameters.annotations) { if (!data) { continue; } if (data.annotationType === _util.AnnotationType.POPUP) { popupAnnotations.push(data); continue; } sortedAnnotations.push(data); } if (popupAnnotations.length) { sortedAnnotations.push(...popupAnnotations); } for (const data of sortedAnnotations) { const element = AnnotationElementFactory.create({ data, layer: parameters.div, page: parameters.page, viewport: parameters.viewport, linkService: parameters.linkService, downloadManager: parameters.downloadManager, imageResourcesPath: parameters.imageResourcesPath || "", renderInteractiveForms: typeof parameters.renderInteractiveForms === "boolean" ? parameters.renderInteractiveForms : true, svgFactory: new _display_utils.DOMSVGFactory(), annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage() }); if (element.isRenderable) { parameters.div.appendChild(element.render()); } } } static update(parameters) { for (const data of parameters.annotations) { const element = parameters.div.querySelector(`[data-annotation-id="${data.id}"]`); if (element) { element.style.transform = `matrix(${parameters.viewport.transform.join(",")})`; } } parameters.div.removeAttribute("hidden"); } } exports.AnnotationLayer = AnnotationLayer; /***/ }), /* 20 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.renderTextLayer = void 0; var _util = __w_pdfjs_require__(2); var renderTextLayer = function renderTextLayerClosure() { var MAX_TEXT_DIVS_TO_RENDER = 100000; var NonWhitespaceRegexp = /\S/; function isAllWhitespace(str) { return !NonWhitespaceRegexp.test(str); } function appendText(task, geom, styles) { var textDiv = document.createElement("span"); var textDivProperties = { angle: 0, canvasWidth: 0, isWhitespace: false, originalTransform: null, paddingBottom: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, scale: 1 }; task._textDivs.push(textDiv); if (isAllWhitespace(geom.str)) { textDivProperties.isWhitespace = true; task._textDivProperties.set(textDiv, textDivProperties); return; } var tx = _util.Util.transform(task._viewport.transform, geom.transform); var angle = Math.atan2(tx[1], tx[0]); var style = styles[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); var fontAscent = fontHeight; if (style.ascent) { fontAscent = style.ascent * fontAscent; } else if (style.descent) { fontAscent = (1 + style.descent) * fontAscent; } let left, top; if (angle === 0) { left = tx[4]; top = tx[5] - fontAscent; } else { left = tx[4] + fontAscent * Math.sin(angle); top = tx[5] - fontAscent * Math.cos(angle); } textDiv.style.left = `${left}px`; textDiv.style.top = `${top}px`; textDiv.style.fontSize = `${fontHeight}px`; textDiv.style.fontFamily = style.fontFamily; textDiv.textContent = geom.str; if (task._fontInspectorEnabled) { textDiv.dataset.fontName = geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } let shouldScaleText = false; if (geom.str.length > 1) { shouldScaleText = true; } else if (geom.transform[0] !== geom.transform[3]) { const absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { shouldScaleText = true; } } if (shouldScaleText) { if (style.vertical) { textDivProperties.canvasWidth = geom.height * task._viewport.scale; } else { textDivProperties.canvasWidth = geom.width * task._viewport.scale; } } task._textDivProperties.set(textDiv, textDivProperties); if (task._textContentStream) { task._layoutText(textDiv); } if (task._enhanceTextSelection) { var angleCos = 1, angleSin = 0; if (angle !== 0) { angleCos = Math.cos(angle); angleSin = Math.sin(angle); } var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; var divHeight = fontHeight; var m, b; if (angle !== 0) { m = [angleCos, angleSin, -angleSin, angleCos, left, top]; b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); } else { b = [left, top, left + divWidth, top + divHeight]; } task._bounds.push({ left: b[0], top: b[1], right: b[2], bottom: b[3], div: textDiv, size: [divWidth, divHeight], m }); } } function render(task) { if (task._canceled) { return; } var textDivs = task._textDivs; var capability = task._capability; var textDivsLength = textDivs.length; if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { task._renderingDone = true; capability.resolve(); return; } if (!task._textContentStream) { for (var i = 0; i < textDivsLength; i++) { task._layoutText(textDivs[i]); } } task._renderingDone = true; capability.resolve(); } function findPositiveMin(ts, offset, count) { let result = 0; for (let i = 0; i < count; i++) { const t = ts[offset++]; if (t > 0) { result = result ? Math.min(t, result) : t; } } return result; } function expand(task) { var bounds = task._bounds; var viewport = task._viewport; var expanded = expandBounds(viewport.width, viewport.height, bounds); for (var i = 0; i < expanded.length; i++) { var div = bounds[i].div; var divProperties = task._textDivProperties.get(div); if (divProperties.angle === 0) { divProperties.paddingLeft = bounds[i].left - expanded[i].left; divProperties.paddingTop = bounds[i].top - expanded[i].top; divProperties.paddingRight = expanded[i].right - bounds[i].right; divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; task._textDivProperties.set(div, divProperties); continue; } var e = expanded[i], b = bounds[i]; var m = b.m, c = m[0], s = m[1]; var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; var ts = new Float64Array(64); points.forEach(function (p, j) { var t = _util.Util.applyTransform(p, m); ts[j + 0] = c && (e.left - t[0]) / c; ts[j + 4] = s && (e.top - t[1]) / s; ts[j + 8] = c && (e.right - t[0]) / c; ts[j + 12] = s && (e.bottom - t[1]) / s; ts[j + 16] = s && (e.left - t[0]) / -s; ts[j + 20] = c && (e.top - t[1]) / c; ts[j + 24] = s && (e.right - t[0]) / -s; ts[j + 28] = c && (e.bottom - t[1]) / c; ts[j + 32] = c && (e.left - t[0]) / -c; ts[j + 36] = s && (e.top - t[1]) / -s; ts[j + 40] = c && (e.right - t[0]) / -c; ts[j + 44] = s && (e.bottom - t[1]) / -s; ts[j + 48] = s && (e.left - t[0]) / s; ts[j + 52] = c && (e.top - t[1]) / -c; ts[j + 56] = s && (e.right - t[0]) / s; ts[j + 60] = c && (e.bottom - t[1]) / -c; }); var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; task._textDivProperties.set(div, divProperties); } } function expandBounds(width, height, boxes) { var bounds = boxes.map(function (box, i) { return { x1: box.left, y1: box.top, x2: box.right, y2: box.bottom, index: i, x1New: undefined, x2New: undefined }; }); expandBoundsLTR(width, bounds); var expanded = new Array(boxes.length); bounds.forEach(function (b) { var i = b.index; expanded[i] = { left: b.x1New, top: 0, right: b.x2New, bottom: 0 }; }); boxes.map(function (box, i) { var e = expanded[i], b = bounds[i]; b.x1 = box.top; b.y1 = width - e.right; b.x2 = box.bottom; b.y2 = width - e.left; b.index = i; b.x1New = undefined; b.x2New = undefined; }); expandBoundsLTR(height, bounds); bounds.forEach(function (b) { var i = b.index; expanded[i].top = b.x1New; expanded[i].bottom = b.x2New; }); return expanded; } function expandBoundsLTR(width, bounds) { bounds.sort(function (a, b) { return a.x1 - b.x1 || a.index - b.index; }); var fakeBoundary = { x1: -Infinity, y1: -Infinity, x2: 0, y2: Infinity, index: -1, x1New: 0, x2New: 0 }; var horizon = [{ start: -Infinity, end: Infinity, boundary: fakeBoundary }]; bounds.forEach(function (boundary) { var i = 0; while (i < horizon.length && horizon[i].end <= boundary.y1) { i++; } var j = horizon.length - 1; while (j >= 0 && horizon[j].start >= boundary.y2) { j--; } var horizonPart, affectedBoundary; var q, k, maxXNew = -Infinity; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var xNew; if (affectedBoundary.x2 > boundary.x1) { xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; } else if (affectedBoundary.x2New === undefined) { xNew = (affectedBoundary.x2 + boundary.x1) / 2; } else { xNew = affectedBoundary.x2New; } if (xNew > maxXNew) { maxXNew = xNew; } } boundary.x1New = maxXNew; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { if (affectedBoundary.x2 > boundary.x1) { if (affectedBoundary.index > boundary.index) { affectedBoundary.x2New = affectedBoundary.x2; } } else { affectedBoundary.x2New = maxXNew; } } else if (affectedBoundary.x2New > maxXNew) { affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); } } var changedHorizon = [], lastBoundary = null; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; if (lastBoundary === useBoundary) { changedHorizon[changedHorizon.length - 1].end = horizonPart.end; } else { changedHorizon.push({ start: horizonPart.start, end: horizonPart.end, boundary: useBoundary }); lastBoundary = useBoundary; } } if (horizon[i].start < boundary.y1) { changedHorizon[0].start = boundary.y1; changedHorizon.unshift({ start: horizon[i].start, end: boundary.y1, boundary: horizon[i].boundary }); } if (boundary.y2 < horizon[j].end) { changedHorizon[changedHorizon.length - 1].end = boundary.y2; changedHorizon.push({ start: boundary.y2, end: horizon[j].end, boundary: horizon[j].boundary }); } for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New !== undefined) { continue; } var used = false; for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { used = horizon[k].boundary === affectedBoundary; } for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { used = horizon[k].boundary === affectedBoundary; } for (k = 0; !used && k < changedHorizon.length; k++) { used = changedHorizon[k].boundary === affectedBoundary; } if (!used) { affectedBoundary.x2New = maxXNew; } } Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); }); horizon.forEach(function (horizonPart) { var affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); } }); } function TextLayerRenderTask({ textContent, textContentStream, container, viewport, textDivs, textContentItemsStr, enhanceTextSelection }) { this._textContent = textContent; this._textContentStream = textContentStream; this._container = container; this._document = container.ownerDocument; this._viewport = viewport; this._textDivs = textDivs || []; this._textContentItemsStr = textContentItemsStr || []; this._enhanceTextSelection = !!enhanceTextSelection; this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled); this._reader = null; this._layoutTextLastFontSize = null; this._layoutTextLastFontFamily = null; this._layoutTextCtx = null; this._textDivProperties = new WeakMap(); this._renderingDone = false; this._canceled = false; this._capability = (0, _util.createPromiseCapability)(); this._renderTimer = null; this._bounds = []; this._capability.promise.finally(() => { if (this._layoutTextCtx) { this._layoutTextCtx.canvas.width = 0; this._layoutTextCtx.canvas.height = 0; this._layoutTextCtx = null; } }).catch(() => {}); } TextLayerRenderTask.prototype = { get promise() { return this._capability.promise; }, cancel: function TextLayer_cancel() { this._canceled = true; if (this._reader) { this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")); this._reader = null; } if (this._renderTimer !== null) { clearTimeout(this._renderTimer); this._renderTimer = null; } this._capability.reject(new Error("TextLayer task cancelled.")); }, _processItems(items, styleCache) { for (let i = 0, len = items.length; i < len; i++) { this._textContentItemsStr.push(items[i].str); appendText(this, items[i], styleCache); } }, _layoutText(textDiv) { const textDivProperties = this._textDivProperties.get(textDiv); if (textDivProperties.isWhitespace) { return; } let transform = ""; if (textDivProperties.canvasWidth !== 0) { const { fontSize, fontFamily } = textDiv.style; if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { this._layoutTextCtx.font = `${fontSize} ${fontFamily}`; this._layoutTextLastFontSize = fontSize; this._layoutTextLastFontFamily = fontFamily; } const { width } = this._layoutTextCtx.measureText(textDiv.textContent); if (width > 0) { textDivProperties.scale = textDivProperties.canvasWidth / width; transform = `scaleX(${textDivProperties.scale})`; } } if (textDivProperties.angle !== 0) { transform = `rotate(${textDivProperties.angle}deg) ${transform}`; } if (transform.length > 0) { if (this._enhanceTextSelection) { textDivProperties.originalTransform = transform; } textDiv.style.transform = transform; } this._textDivProperties.set(textDiv, textDivProperties); this._container.appendChild(textDiv); }, _render: function TextLayer_render(timeout) { const capability = (0, _util.createPromiseCapability)(); let styleCache = Object.create(null); const canvas = this._document.createElement("canvas"); canvas.mozOpaque = true; this._layoutTextCtx = canvas.getContext("2d", { alpha: false }); if (this._textContent) { const textItems = this._textContent.items; const textStyles = this._textContent.styles; this._processItems(textItems, textStyles); capability.resolve(); } else if (this._textContentStream) { const pump = () => { this._reader.read().then(({ value, done }) => { if (done) { capability.resolve(); return; } Object.assign(styleCache, value.styles); this._processItems(value.items, styleCache); pump(); }, capability.reject); }; this._reader = this._textContentStream.getReader(); pump(); } else { throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified."); } capability.promise.then(() => { styleCache = null; if (!timeout) { render(this); } else { this._renderTimer = setTimeout(() => { render(this); this._renderTimer = null; }, timeout); } }, this._capability.reject); }, expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { if (!this._enhanceTextSelection || !this._renderingDone) { return; } if (this._bounds !== null) { expand(this); this._bounds = null; } const transformBuf = [], paddingBuf = []; for (var i = 0, ii = this._textDivs.length; i < ii; i++) { const div = this._textDivs[i]; const divProps = this._textDivProperties.get(div); if (divProps.isWhitespace) { continue; } if (expandDivs) { transformBuf.length = 0; paddingBuf.length = 0; if (divProps.originalTransform) { transformBuf.push(divProps.originalTransform); } if (divProps.paddingTop > 0) { paddingBuf.push(`${divProps.paddingTop}px`); transformBuf.push(`translateY(${-divProps.paddingTop}px)`); } else { paddingBuf.push(0); } if (divProps.paddingRight > 0) { paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`); } else { paddingBuf.push(0); } if (divProps.paddingBottom > 0) { paddingBuf.push(`${divProps.paddingBottom}px`); } else { paddingBuf.push(0); } if (divProps.paddingLeft > 0) { paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`); transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`); } else { paddingBuf.push(0); } div.style.padding = paddingBuf.join(" "); if (transformBuf.length) { div.style.transform = transformBuf.join(" "); } } else { div.style.padding = null; div.style.transform = divProps.originalTransform; } } } }; function renderTextLayer(renderParameters) { var task = new TextLayerRenderTask({ textContent: renderParameters.textContent, textContentStream: renderParameters.textContentStream, container: renderParameters.container, viewport: renderParameters.viewport, textDivs: renderParameters.textDivs, textContentItemsStr: renderParameters.textContentItemsStr, enhanceTextSelection: renderParameters.enhanceTextSelection }); task._render(renderParameters.timeout); return task; } return renderTextLayer; }(); exports.renderTextLayer = renderTextLayer; /***/ }), /* 21 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.SVGGraphics = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); var _is_node = __w_pdfjs_require__(4); let SVGGraphics = function () { throw new Error("Not implemented: SVGGraphics"); }; exports.SVGGraphics = SVGGraphics; { const SVG_DEFAULTS = { fontStyle: "normal", fontWeight: "normal", fillColor: "#000000" }; const XML_NS = "http://www.w3.org/XML/1998/namespace"; const XLINK_NS = "http://www.w3.org/1999/xlink"; const LINE_CAP_STYLES = ["butt", "round", "square"]; const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; const convertImgDataToPng = function () { const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); const CHUNK_WRAPPER_SIZE = 12; const crcTable = new Int32Array(256); for (let i = 0; i < 256; i++) { let c = i; for (let h = 0; h < 8; h++) { if (c & 1) { c = 0xedb88320 ^ c >> 1 & 0x7fffffff; } else { c = c >> 1 & 0x7fffffff; } } crcTable[i] = c; } function crc32(data, start, end) { let crc = -1; for (let i = start; i < end; i++) { const a = (crc ^ data[i]) & 0xff; const b = crcTable[a]; crc = crc >>> 8 ^ b; } return crc ^ -1; } function writePngChunk(type, body, data, offset) { let p = offset; const len = body.length; data[p] = len >> 24 & 0xff; data[p + 1] = len >> 16 & 0xff; data[p + 2] = len >> 8 & 0xff; data[p + 3] = len & 0xff; p += 4; data[p] = type.charCodeAt(0) & 0xff; data[p + 1] = type.charCodeAt(1) & 0xff; data[p + 2] = type.charCodeAt(2) & 0xff; data[p + 3] = type.charCodeAt(3) & 0xff; p += 4; data.set(body, p); p += body.length; const crc = crc32(data, offset + 4, p); data[p] = crc >> 24 & 0xff; data[p + 1] = crc >> 16 & 0xff; data[p + 2] = crc >> 8 & 0xff; data[p + 3] = crc & 0xff; } function adler32(data, start, end) { let a = 1; let b = 0; for (let i = start; i < end; ++i) { a = (a + (data[i] & 0xff)) % 65521; b = (b + a) % 65521; } return b << 16 | a; } function deflateSync(literals) { if (!_is_node.isNodeJS) { return deflateSyncUncompressed(literals); } try { let input; if (parseInt(process.versions.node) >= 8) { input = literals; } else { input = Buffer.from(literals); } const output = require$$2__default['default'].deflateSync(input, { level: 9 }); return output instanceof Uint8Array ? output : new Uint8Array(output); } catch (e) { (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); } return deflateSyncUncompressed(literals); } function deflateSyncUncompressed(literals) { let len = literals.length; const maxBlockLength = 0xffff; const deflateBlocks = Math.ceil(len / maxBlockLength); const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); let pi = 0; idat[pi++] = 0x78; idat[pi++] = 0x9c; let pos = 0; while (len > maxBlockLength) { idat[pi++] = 0x00; idat[pi++] = 0xff; idat[pi++] = 0xff; idat[pi++] = 0x00; idat[pi++] = 0x00; idat.set(literals.subarray(pos, pos + maxBlockLength), pi); pi += maxBlockLength; pos += maxBlockLength; len -= maxBlockLength; } idat[pi++] = 0x01; idat[pi++] = len & 0xff; idat[pi++] = len >> 8 & 0xff; idat[pi++] = ~len & 0xffff & 0xff; idat[pi++] = (~len & 0xffff) >> 8 & 0xff; idat.set(literals.subarray(pos), pi); pi += literals.length - pos; const adler = adler32(literals, 0, literals.length); idat[pi++] = adler >> 24 & 0xff; idat[pi++] = adler >> 16 & 0xff; idat[pi++] = adler >> 8 & 0xff; idat[pi++] = adler & 0xff; return idat; } function encode(imgData, kind, forceDataSchema, isMask) { const width = imgData.width; const height = imgData.height; let bitDepth, colorType, lineSize; const bytes = imgData.data; switch (kind) { case _util.ImageKind.GRAYSCALE_1BPP: colorType = 0; bitDepth = 1; lineSize = width + 7 >> 3; break; case _util.ImageKind.RGB_24BPP: colorType = 2; bitDepth = 8; lineSize = width * 3; break; case _util.ImageKind.RGBA_32BPP: colorType = 6; bitDepth = 8; lineSize = width * 4; break; default: throw new Error("invalid format"); } const literals = new Uint8Array((1 + lineSize) * height); let offsetLiterals = 0, offsetBytes = 0; for (let y = 0; y < height; ++y) { literals[offsetLiterals++] = 0; literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); offsetBytes += lineSize; offsetLiterals += lineSize; } if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { offsetLiterals = 0; for (let y = 0; y < height; y++) { offsetLiterals++; for (let i = 0; i < lineSize; i++) { literals[offsetLiterals++] ^= 0xff; } } } const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); const idat = deflateSync(literals); const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; const data = new Uint8Array(pngLength); let offset = 0; data.set(PNG_HEADER, offset); offset += PNG_HEADER.length; writePngChunk("IHDR", ihdr, data, offset); offset += CHUNK_WRAPPER_SIZE + ihdr.length; writePngChunk("IDATA", idat, data, offset); offset += CHUNK_WRAPPER_SIZE + idat.length; writePngChunk("IEND", new Uint8Array(0), data, offset); return (0, _util.createObjectURL)(data, "image/png", forceDataSchema); } return function convertImgDataToPng(imgData, forceDataSchema, isMask) { const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; return encode(imgData, kind, forceDataSchema, isMask); }; }(); class SVGExtraState { constructor() { this.fontSizeScale = 1; this.fontWeight = SVG_DEFAULTS.fontWeight; this.fontSize = 0; this.textMatrix = _util.IDENTITY_MATRIX; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textMatrixScale = 1; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRise = 0; this.fillColor = SVG_DEFAULTS.fillColor; this.strokeColor = "#000000"; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.lineJoin = ""; this.lineCap = ""; this.miterLimit = 0; this.dashArray = []; this.dashPhase = 0; this.dependencies = []; this.activeClipUrl = null; this.clipGroup = null; this.maskId = ""; } clone() { return Object.create(this); } setCurrentPoint(x, y) { this.x = x; this.y = y; } } function opListToTree(opList) { let opTree = []; const tmp = []; for (const opListElement of opList) { if (opListElement.fn === "save") { opTree.push({ fnId: 92, fn: "group", items: [] }); tmp.push(opTree); opTree = opTree[opTree.length - 1].items; continue; } if (opListElement.fn === "restore") { opTree = tmp.pop(); } else { opTree.push(opListElement); } } return opTree; } function pf(value) { if (Number.isInteger(value)) { return value.toString(); } const s = value.toFixed(10); let i = s.length - 1; if (s[i] !== "0") { return s; } do { i--; } while (s[i] === "0"); return s.substring(0, s[i] === "." ? i : i + 1); } function pm(m) { if (m[4] === 0 && m[5] === 0) { if (m[1] === 0 && m[2] === 0) { if (m[0] === 1 && m[3] === 1) { return ""; } return `scale(${pf(m[0])} ${pf(m[3])})`; } if (m[0] === m[3] && m[1] === -m[2]) { const a = Math.acos(m[0]) * 180 / Math.PI; return `rotate(${pf(a)})`; } } else { if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { return `translate(${pf(m[4])} ${pf(m[5])})`; } } return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; } let clipCount = 0; let maskCount = 0; let shadingCount = 0; exports.SVGGraphics = SVGGraphics = class SVGGraphics { constructor(commonObjs, objs, forceDataSchema = false) { this.svgFactory = new _display_utils.DOMSVGFactory(); this.current = new SVGExtraState(); this.transformMatrix = _util.IDENTITY_MATRIX; this.transformStack = []; this.extraStack = []; this.commonObjs = commonObjs; this.objs = objs; this.pendingClip = null; this.pendingEOFill = false; this.embedFonts = false; this.embeddedFonts = Object.create(null); this.cssStyle = null; this.forceDataSchema = !!forceDataSchema; this._operatorIdMapping = []; for (const op in _util.OPS) { this._operatorIdMapping[_util.OPS[op]] = op; } } save() { this.transformStack.push(this.transformMatrix); const old = this.current; this.extraStack.push(old); this.current = old.clone(); } restore() { this.transformMatrix = this.transformStack.pop(); this.current = this.extraStack.pop(); this.pendingClip = null; this.tgrp = null; } group(items) { this.save(); this.executeOpTree(items); this.restore(); } loadDependencies(operatorList) { const fnArray = operatorList.fnArray; const argsArray = operatorList.argsArray; for (let i = 0, ii = fnArray.length; i < ii; i++) { if (fnArray[i] !== _util.OPS.dependency) { continue; } for (const obj of argsArray[i]) { const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; const promise = new Promise(resolve => { objsPool.get(obj, resolve); }); this.current.dependencies.push(promise); } } return Promise.all(this.current.dependencies); } transform(a, b, c, d, e, f) { const transformMatrix = [a, b, c, d, e, f]; this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); this.tgrp = null; } getSVG(operatorList, viewport) { this.viewport = viewport; const svgElement = this._initialize(viewport); return this.loadDependencies(operatorList).then(() => { this.transformMatrix = _util.IDENTITY_MATRIX; this.executeOpTree(this.convertOpList(operatorList)); return svgElement; }); } convertOpList(operatorList) { const operatorIdMapping = this._operatorIdMapping; const argsArray = operatorList.argsArray; const fnArray = operatorList.fnArray; const opList = []; for (let i = 0, ii = fnArray.length; i < ii; i++) { const fnId = fnArray[i]; opList.push({ fnId, fn: operatorIdMapping[fnId], args: argsArray[i] }); } return opListToTree(opList); } executeOpTree(opTree) { for (const opTreeElement of opTree) { const fn = opTreeElement.fn; const fnId = opTreeElement.fnId; const args = opTreeElement.args; switch (fnId | 0) { case _util.OPS.beginText: this.beginText(); break; case _util.OPS.dependency: break; case _util.OPS.setLeading: this.setLeading(args); break; case _util.OPS.setLeadingMoveText: this.setLeadingMoveText(args[0], args[1]); break; case _util.OPS.setFont: this.setFont(args); break; case _util.OPS.showText: this.showText(args[0]); break; case _util.OPS.showSpacedText: this.showText(args[0]); break; case _util.OPS.endText: this.endText(); break; case _util.OPS.moveText: this.moveText(args[0], args[1]); break; case _util.OPS.setCharSpacing: this.setCharSpacing(args[0]); break; case _util.OPS.setWordSpacing: this.setWordSpacing(args[0]); break; case _util.OPS.setHScale: this.setHScale(args[0]); break; case _util.OPS.setTextMatrix: this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.setTextRise: this.setTextRise(args[0]); break; case _util.OPS.setTextRenderingMode: this.setTextRenderingMode(args[0]); break; case _util.OPS.setLineWidth: this.setLineWidth(args[0]); break; case _util.OPS.setLineJoin: this.setLineJoin(args[0]); break; case _util.OPS.setLineCap: this.setLineCap(args[0]); break; case _util.OPS.setMiterLimit: this.setMiterLimit(args[0]); break; case _util.OPS.setFillRGBColor: this.setFillRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeRGBColor: this.setStrokeRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeColorN: this.setStrokeColorN(args); break; case _util.OPS.setFillColorN: this.setFillColorN(args); break; case _util.OPS.shadingFill: this.shadingFill(args[0]); break; case _util.OPS.setDash: this.setDash(args[0], args[1]); break; case _util.OPS.setRenderingIntent: this.setRenderingIntent(args[0]); break; case _util.OPS.setFlatness: this.setFlatness(args[0]); break; case _util.OPS.setGState: this.setGState(args[0]); break; case _util.OPS.fill: this.fill(); break; case _util.OPS.eoFill: this.eoFill(); break; case _util.OPS.stroke: this.stroke(); break; case _util.OPS.fillStroke: this.fillStroke(); break; case _util.OPS.eoFillStroke: this.eoFillStroke(); break; case _util.OPS.clip: this.clip("nonzero"); break; case _util.OPS.eoClip: this.clip("evenodd"); break; case _util.OPS.paintSolidColorImageMask: this.paintSolidColorImageMask(); break; case _util.OPS.paintImageXObject: this.paintImageXObject(args[0]); break; case _util.OPS.paintInlineImageXObject: this.paintInlineImageXObject(args[0]); break; case _util.OPS.paintImageMaskXObject: this.paintImageMaskXObject(args[0]); break; case _util.OPS.paintFormXObjectBegin: this.paintFormXObjectBegin(args[0], args[1]); break; case _util.OPS.paintFormXObjectEnd: this.paintFormXObjectEnd(); break; case _util.OPS.closePath: this.closePath(); break; case _util.OPS.closeStroke: this.closeStroke(); break; case _util.OPS.closeFillStroke: this.closeFillStroke(); break; case _util.OPS.closeEOFillStroke: this.closeEOFillStroke(); break; case _util.OPS.nextLine: this.nextLine(); break; case _util.OPS.transform: this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.constructPath: this.constructPath(args[0], args[1]); break; case _util.OPS.endPath: this.endPath(); break; case 92: this.group(opTreeElement.items); break; default: (0, _util.warn)(`Unimplemented operator ${fn}`); break; } } } setWordSpacing(wordSpacing) { this.current.wordSpacing = wordSpacing; } setCharSpacing(charSpacing) { this.current.charSpacing = charSpacing; } nextLine() { this.moveText(0, this.current.leading); } setTextMatrix(a, b, c, d, e, f) { const current = this.current; current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; current.textMatrixScale = Math.sqrt(a * a + b * b); current.x = current.lineX = 0; current.y = current.lineY = 0; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtElement.appendChild(current.tspan); } beginText() { const current = this.current; current.x = current.lineX = 0; current.y = current.lineY = 0; current.textMatrix = _util.IDENTITY_MATRIX; current.lineMatrix = _util.IDENTITY_MATRIX; current.textMatrixScale = 1; current.tspan = this.svgFactory.createElement("svg:tspan"); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtgrp = this.svgFactory.createElement("svg:g"); current.xcoords = []; current.ycoords = []; } moveText(x, y) { const current = this.current; current.x = current.lineX += x; current.y = current.lineY += y; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); current.tspan.setAttributeNS(null, "y", pf(-current.y)); } showText(glyphs) { const current = this.current; const font = current.font; const fontSize = current.fontSize; if (fontSize === 0) { return; } const fontSizeScale = current.fontSizeScale; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const fontDirection = current.fontDirection; const textHScale = current.textHScale * fontDirection; const vertical = font.vertical; const spacingDir = vertical ? 1 : -1; const defaultVMetrics = font.defaultVMetrics; const widthAdvanceScale = fontSize * current.fontMatrix[0]; let x = 0; for (const glyph of glyphs) { if (glyph === null) { x += fontDirection * wordSpacing; continue; } else if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const character = glyph.fontChar; let scaledX, scaledY; let width = glyph.width; if (vertical) { let vx; const vmetric = glyph.vmetric || defaultVMetrics; vx = glyph.vmetric ? vmetric[1] : width * 0.5; vx = -vx * widthAdvanceScale; const vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (glyph.isInFont || font.missingFile) { current.xcoords.push(current.x + scaledX); if (vertical) { current.ycoords.push(-current.y + scaledY); } current.tspan.textContent += character; } let charWidth; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; } current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); if (vertical) { current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); } else { current.tspan.setAttributeNS(null, "y", pf(-current.y)); } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { current.tspan.setAttributeNS(null, "font-style", current.fontStyle); } if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); } const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (current.fillColor !== SVG_DEFAULTS.fillColor) { current.tspan.setAttributeNS(null, "fill", current.fillColor); } if (current.fillAlpha < 1) { current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); } } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { current.tspan.setAttributeNS(null, "fill", "transparent"); } else { current.tspan.setAttributeNS(null, "fill", "none"); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { const lineWidthScale = 1 / (current.textMatrixScale || 1); this._setStrokeAttributes(current.tspan, lineWidthScale); } let textMatrix = current.textMatrix; if (current.textRise !== 0) { textMatrix = textMatrix.slice(); textMatrix[5] += current.textRise; } current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); current.txtElement.appendChild(current.tspan); current.txtgrp.appendChild(current.txtElement); this._ensureTransformGroup().appendChild(current.txtElement); } setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } addFontStyle(fontObj) { if (!fontObj.data) { throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); } if (!this.cssStyle) { this.cssStyle = this.svgFactory.createElement("svg:style"); this.cssStyle.setAttributeNS(null, "type", "text/css"); this.defs.appendChild(this.cssStyle); } const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; } setFont(details) { const current = this.current; const fontObj = this.commonObjs.get(details[0]); let size = details[1]; current.font = fontObj; if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { this.addFontStyle(fontObj); this.embeddedFonts[fontObj.loadedName] = fontObj; } current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } const italic = fontObj.italic ? "italic" : "normal"; if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } current.fontSize = size; current.fontFamily = fontObj.loadedName; current.fontWeight = bold; current.fontStyle = italic; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.xcoords = []; current.ycoords = []; } endText() { const current = this.current; if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) { current.element = current.txtElement; this.clip("nonzero"); this.endPath(); } } setLineWidth(width) { if (width > 0) { this.current.lineWidth = width; } } setLineCap(style) { this.current.lineCap = LINE_CAP_STYLES[style]; } setLineJoin(style) { this.current.lineJoin = LINE_JOIN_STYLES[style]; } setMiterLimit(limit) { this.current.miterLimit = limit; } setStrokeAlpha(strokeAlpha) { this.current.strokeAlpha = strokeAlpha; } setStrokeRGBColor(r, g, b) { this.current.strokeColor = _util.Util.makeCssRgb(r, g, b); } setFillAlpha(fillAlpha) { this.current.fillAlpha = fillAlpha; } setFillRGBColor(r, g, b) { this.current.fillColor = _util.Util.makeCssRgb(r, g, b); this.current.tspan = this.svgFactory.createElement("svg:tspan"); this.current.xcoords = []; this.current.ycoords = []; } setStrokeColorN(args) { this.current.strokeColor = this._makeColorN_Pattern(args); } setFillColorN(args) { this.current.fillColor = this._makeColorN_Pattern(args); } shadingFill(args) { const width = this.viewport.width; const height = this.viewport.height; const inv = _util.Util.inverseTransform(this.transformMatrix); const bl = _util.Util.applyTransform([0, 0], inv); const br = _util.Util.applyTransform([0, height], inv); const ul = _util.Util.applyTransform([width, 0], inv); const ur = _util.Util.applyTransform([width, height], inv); const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", x0); rect.setAttributeNS(null, "y", y0); rect.setAttributeNS(null, "width", x1 - x0); rect.setAttributeNS(null, "height", y1 - y0); rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); if (this.current.fillAlpha < 1) { rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); } this._ensureTransformGroup().appendChild(rect); } _makeColorN_Pattern(args) { if (args[0] === "TilingPattern") { return this._makeTilingPattern(args); } return this._makeShadingPattern(args); } _makeTilingPattern(args) { const color = args[1]; const operatorList = args[2]; const matrix = args[3] || _util.IDENTITY_MATRIX; const [x0, y0, x1, y1] = args[4]; const xstep = args[5]; const ystep = args[6]; const paintType = args[7]; const tilingId = `shading${shadingCount++}`; const [tx0, ty0] = _util.Util.applyTransform([x0, y0], matrix); const [tx1, ty1] = _util.Util.applyTransform([x1, y1], matrix); const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); const txstep = xstep * xscale; const tystep = ystep * yscale; const tiling = this.svgFactory.createElement("svg:pattern"); tiling.setAttributeNS(null, "id", tilingId); tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); tiling.setAttributeNS(null, "width", txstep); tiling.setAttributeNS(null, "height", tystep); tiling.setAttributeNS(null, "x", `${tx0}`); tiling.setAttributeNS(null, "y", `${ty0}`); const svg = this.svg; const transformMatrix = this.transformMatrix; const fillColor = this.current.fillColor; const strokeColor = this.current.strokeColor; const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); this.svg = bbox; this.transformMatrix = matrix; if (paintType === 2) { const cssColor = _util.Util.makeCssRgb(...color); this.current.fillColor = cssColor; this.current.strokeColor = cssColor; } this.executeOpTree(this.convertOpList(operatorList)); this.svg = svg; this.transformMatrix = transformMatrix; this.current.fillColor = fillColor; this.current.strokeColor = strokeColor; tiling.appendChild(bbox.childNodes[0]); this.defs.appendChild(tiling); return `url(#${tilingId})`; } _makeShadingPattern(args) { switch (args[0]) { case "RadialAxial": const shadingId = `shading${shadingCount++}`; const colorStops = args[3]; let gradient; switch (args[1]) { case "axial": const point0 = args[4]; const point1 = args[5]; gradient = this.svgFactory.createElement("svg:linearGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "x1", point0[0]); gradient.setAttributeNS(null, "y1", point0[1]); gradient.setAttributeNS(null, "x2", point1[0]); gradient.setAttributeNS(null, "y2", point1[1]); break; case "radial": const focalPoint = args[4]; const circlePoint = args[5]; const focalRadius = args[6]; const circleRadius = args[7]; gradient = this.svgFactory.createElement("svg:radialGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "cx", circlePoint[0]); gradient.setAttributeNS(null, "cy", circlePoint[1]); gradient.setAttributeNS(null, "r", circleRadius); gradient.setAttributeNS(null, "fx", focalPoint[0]); gradient.setAttributeNS(null, "fy", focalPoint[1]); gradient.setAttributeNS(null, "fr", focalRadius); break; default: throw new Error(`Unknown RadialAxial type: ${args[1]}`); } for (const colorStop of colorStops) { const stop = this.svgFactory.createElement("svg:stop"); stop.setAttributeNS(null, "offset", colorStop[0]); stop.setAttributeNS(null, "stop-color", colorStop[1]); gradient.appendChild(stop); } this.defs.appendChild(gradient); return `url(#${shadingId})`; case "Mesh": (0, _util.warn)("Unimplemented pattern Mesh"); return null; case "Dummy": return "hotpink"; default: throw new Error(`Unknown IR type: ${args[0]}`); } } setDash(dashArray, dashPhase) { this.current.dashArray = dashArray; this.current.dashPhase = dashPhase; } constructPath(ops, args) { const current = this.current; let x = current.x, y = current.y; let d = []; let j = 0; for (const op of ops) { switch (op | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; const width = args[j++]; const height = args[j++]; const xw = x + width; const yh = y + height; d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; d.push("M", pf(x), pf(y)); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; d.push("L", pf(x), pf(y)); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); j += 6; break; case _util.OPS.curveTo2: d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: x = args[j + 2]; y = args[j + 3]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); j += 4; break; case _util.OPS.closePath: d.push("Z"); break; } } d = d.join(" "); if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { d = current.path.getAttributeNS(null, "d") + d; } else { current.path = this.svgFactory.createElement("svg:path"); this._ensureTransformGroup().appendChild(current.path); } current.path.setAttributeNS(null, "d", d); current.path.setAttributeNS(null, "fill", "none"); current.element = current.path; current.setCurrentPoint(x, y); } endPath() { const current = this.current; current.path = null; if (!this.pendingClip) { return; } if (!current.element) { this.pendingClip = null; return; } const clipId = `clippath${clipCount++}`; const clipPath = this.svgFactory.createElement("svg:clipPath"); clipPath.setAttributeNS(null, "id", clipId); clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); const clipElement = current.element.cloneNode(true); if (this.pendingClip === "evenodd") { clipElement.setAttributeNS(null, "clip-rule", "evenodd"); } else { clipElement.setAttributeNS(null, "clip-rule", "nonzero"); } this.pendingClip = null; clipPath.appendChild(clipElement); this.defs.appendChild(clipPath); if (current.activeClipUrl) { current.clipGroup = null; this.extraStack.forEach(function (prev) { prev.clipGroup = null; }); clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); } current.activeClipUrl = `url(#${clipId})`; this.tgrp = null; } clip(type) { this.pendingClip = type; } closePath() { const current = this.current; if (current.path) { const d = `${current.path.getAttributeNS(null, "d")}Z`; current.path.setAttributeNS(null, "d", d); } } setLeading(leading) { this.current.leading = -leading; } setTextRise(textRise) { this.current.textRise = textRise; } setTextRenderingMode(textRenderingMode) { this.current.textRenderingMode = textRenderingMode; } setHScale(scale) { this.current.textHScale = scale / 100; } setRenderingIntent(intent) {} setFlatness(flatness) {} setGState(states) { for (const [key, value] of states) { switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value); break; case "CA": this.setStrokeAlpha(value); break; case "ca": this.setFillAlpha(value); break; default: (0, _util.warn)(`Unimplemented graphic state operator ${key}`); break; } } } fill() { const current = this.current; if (current.element) { current.element.setAttributeNS(null, "fill", current.fillColor); current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); this.endPath(); } } stroke() { const current = this.current; if (current.element) { this._setStrokeAttributes(current.element); current.element.setAttributeNS(null, "fill", "none"); this.endPath(); } } _setStrokeAttributes(element, lineWidthScale = 1) { const current = this.current; let dashArray = current.dashArray; if (lineWidthScale !== 1 && dashArray.length > 0) { dashArray = dashArray.map(function (value) { return lineWidthScale * value; }); } element.setAttributeNS(null, "stroke", current.strokeColor); element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); element.setAttributeNS(null, "stroke-linecap", current.lineCap); element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); } eoFill() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fill(); } fillStroke() { this.stroke(); this.fill(); } eoFillStroke() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fillStroke(); } closeStroke() { this.closePath(); this.stroke(); } closeFillStroke() { this.closePath(); this.fillStroke(); } closeEOFillStroke() { this.closePath(); this.eoFillStroke(); } paintSolidColorImageMask() { const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", "1px"); rect.setAttributeNS(null, "height", "1px"); rect.setAttributeNS(null, "fill", this.current.fillColor); this._ensureTransformGroup().appendChild(rect); } paintImageXObject(objId) { const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); return; } this.paintInlineImageXObject(imgData); } paintInlineImageXObject(imgData, mask) { const width = imgData.width; const height = imgData.height; const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); const cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", "0"); cliprect.setAttributeNS(null, "y", "0"); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); const imgEl = this.svgFactory.createElement("svg:image"); imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); imgEl.setAttributeNS(null, "x", "0"); imgEl.setAttributeNS(null, "y", pf(-height)); imgEl.setAttributeNS(null, "width", pf(width) + "px"); imgEl.setAttributeNS(null, "height", pf(height) + "px"); imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); if (mask) { mask.appendChild(imgEl); } else { this._ensureTransformGroup().appendChild(imgEl); } } paintImageMaskXObject(imgData) { const current = this.current; const width = imgData.width; const height = imgData.height; const fillColor = current.fillColor; current.maskId = `mask${maskCount++}`; const mask = this.svgFactory.createElement("svg:mask"); mask.setAttributeNS(null, "id", current.maskId); const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", pf(width)); rect.setAttributeNS(null, "height", pf(height)); rect.setAttributeNS(null, "fill", fillColor); rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); this.defs.appendChild(mask); this._ensureTransformGroup().appendChild(rect); this.paintInlineImageXObject(imgData, mask); } paintFormXObjectBegin(matrix, bbox) { if (Array.isArray(matrix) && matrix.length === 6) { this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); } if (bbox) { const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", bbox[0]); cliprect.setAttributeNS(null, "y", bbox[1]); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); this.endPath(); } } paintFormXObjectEnd() {} _initialize(viewport) { const svg = this.svgFactory.create(viewport.width, viewport.height); const definitions = this.svgFactory.createElement("svg:defs"); svg.appendChild(definitions); this.defs = definitions; const rootGroup = this.svgFactory.createElement("svg:g"); rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); svg.appendChild(rootGroup); this.svg = rootGroup; return svg; } _ensureClipGroup() { if (!this.current.clipGroup) { const clipGroup = this.svgFactory.createElement("svg:g"); clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); this.svg.appendChild(clipGroup); this.current.clipGroup = clipGroup; } return this.current.clipGroup; } _ensureTransformGroup() { if (!this.tgrp) { this.tgrp = this.svgFactory.createElement("svg:g"); this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); if (this.current.activeClipUrl) { this._ensureClipGroup().appendChild(this.tgrp); } else { this.svg.appendChild(this.tgrp); } } return this.tgrp; } }; } /***/ }), /* 22 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFNodeStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(23); const fs = require$$1__default['default']; const http = require$$3__default['default']; const https = require$$4__default['default']; const url$1 = url; const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; function parseUrl(sourceUrl) { const parsedUrl = url$1.parse(sourceUrl); if (parsedUrl.protocol === "file:" || parsedUrl.host) { return parsedUrl; } if (/^[a-z]:[/\\]/i.test(sourceUrl)) { return url$1.parse(`file:///${sourceUrl}`); } if (!parsedUrl.host) { parsedUrl.protocol = "file:"; } return parsedUrl; } class PDFNodeStream { constructor(source) { this.source = source; this.url = parseUrl(source.url); this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; this.isFsUrl = this.url.protocol === "file:"; this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { return this._fullRequestReader ? this._fullRequestReader._loaded : 0; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } getRangeReader(start, end) { if (end <= this._progressiveDataLength) { return null; } const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } const readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } } exports.PDFNodeStream = PDFNodeStream; class BaseFullReader { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; const source = stream.source; this._contentLength = source.length; this._loaded = 0; this._filename = null; this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); this._headersCapability = (0, _util.createPromiseCapability)(); } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; if (this._done) { return { value: undefined, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = (0, _util.createPromiseCapability)(); return this.read(); } this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", reason => { this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { this._error(new _util.AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); } } } class BaseRangeReader { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); const source = stream.source; this._isStreamingSupported = !source.disableStream; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; if (this._done) { return { value: undefined, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = (0, _util.createPromiseCapability)(); return this.read(); } this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", reason => { this._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } } function createRequestOptions(parsedUrl, headers) { return { protocol: parsedUrl.protocol, auth: parsedUrl.auth, host: parsedUrl.hostname, port: parsedUrl.port, path: parsedUrl.path, method: "GET", headers }; } class PDFNodeStreamFullReader extends BaseFullReader { constructor(stream) { super(stream); const handleResponse = response => { if (response.statusCode === 404) { const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; this._headersCapability.reject(error); return; } this._headersCapability.resolve(); this._setReadableStream(response); const getResponseHeader = name => { return this._readableStream.headers[name.toLowerCase()]; }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); }; this._request = null; if (this._url.protocol === "http:") { this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } else { this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } this._request.on("error", reason => { this._storedError = reason; this._headersCapability.reject(reason); }); this._request.end(); } } class PDFNodeStreamRangeReader extends BaseRangeReader { constructor(stream, start, end) { super(stream); this._httpHeaders = {}; for (const property in stream.httpHeaders) { const value = stream.httpHeaders[property]; if (typeof value === "undefined") { continue; } this._httpHeaders[property] = value; } this._httpHeaders.Range = `bytes=${start}-${end - 1}`; const handleResponse = response => { if (response.statusCode === 404) { const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; return; } this._setReadableStream(response); }; this._request = null; if (this._url.protocol === "http:") { this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } else { this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } this._request.on("error", reason => { this._storedError = reason; }); this._request.end(); } } class PDFNodeStreamFsFullReader extends BaseFullReader { constructor(stream) { super(stream); let path = decodeURIComponent(this._url.path); if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } fs.lstat(path, (error, stat) => { if (error) { if (error.code === "ENOENT") { error = new _util.MissingPDFException(`Missing PDF "${path}".`); } this._storedError = error; this._headersCapability.reject(error); return; } this._contentLength = stat.size; this._setReadableStream(fs.createReadStream(path)); this._headersCapability.resolve(); }); } } class PDFNodeStreamFsRangeReader extends BaseRangeReader { constructor(stream, start, end) { super(stream); let path = decodeURIComponent(this._url.path); if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } this._setReadableStream(fs.createReadStream(path, { start, end: end - 1 })); } } /***/ }), /* 23 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.createResponseStatusError = createResponseStatusError; exports.extractFilenameFromHeader = extractFilenameFromHeader; exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; exports.validateResponseStatus = validateResponseStatus; var _util = __w_pdfjs_require__(2); var _content_disposition = __w_pdfjs_require__(24); function validateRangeRequestCapabilities({ getResponseHeader, isHttp, rangeChunkSize, disableRange }) { (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); const returnValues = { allowRangeRequests: false, suggestedLength: undefined }; const length = parseInt(getResponseHeader("Content-Length"), 10); if (!Number.isInteger(length)) { return returnValues; } returnValues.suggestedLength = length; if (length <= 2 * rangeChunkSize) { return returnValues; } if (disableRange || !isHttp) { return returnValues; } if (getResponseHeader("Accept-Ranges") !== "bytes") { return returnValues; } const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; if (contentEncoding !== "identity") { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { const contentDisposition = getResponseHeader("Content-Disposition"); if (contentDisposition) { let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); if (filename.includes("%")) { try { filename = decodeURIComponent(filename); } catch (ex) {} } if (/\.pdf$/i.test(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && url.startsWith("file:")) { return new _util.MissingPDFException('Missing PDF "' + url + '".'); } return new _util.UnexpectedResponseException("Unexpected server response (" + status + ') while retrieving PDF "' + url + '".', status); } function validateResponseStatus(status) { return status === 200 || status === 206; } /***/ }), /* 24 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; function getFilenameFromContentDispositionHeader(contentDisposition) { let needsEncodingFixup = true; let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { const filename = rfc2047decode(tmp); return fixupEncoding(filename); } tmp = toParamRegExp("filename", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = rfc2047decode(filename); return fixupEncoding(filename); } function toParamRegExp(attributePattern, flags) { return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); } function textdecode(encoding, value) { if (encoding) { if (!/^[\x00-\xFF]+$/.test(value)) { return value; } try { const decoder = new TextDecoder(encoding, { fatal: true }); const bytes = Array.from(value, function (ch) { return ch.charCodeAt(0) & 0xff; }); value = decoder.decode(new Uint8Array(bytes)); needsEncodingFixup = false; } catch (e) { if (/^utf-?8$/i.test(encoding)) { try { value = decodeURIComponent(escape(value)); needsEncodingFixup = false; } catch (err) {} } } } return value; } function fixupEncoding(value) { if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { value = textdecode("utf-8", value); if (needsEncodingFixup) { value = textdecode("iso-8859-1", value); } } return value; } function rfc2231getparam(contentDispositionStr) { const matches = []; let match; const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); while ((match = iter.exec(contentDispositionStr)) !== null) { let [, n, quot, part] = match; n = parseInt(n, 10); if (n in matches) { if (n === 0) { break; } continue; } matches[n] = [quot, part]; } const parts = []; for (let n = 0; n < matches.length; ++n) { if (!(n in matches)) { break; } let [quot, part] = matches[n]; part = rfc2616unquote(part); if (quot) { part = unescape(part); if (n === 0) { part = rfc5987decode(part); } } parts.push(part); } return parts.join(""); } function rfc2616unquote(value) { if (value.startsWith('"')) { const parts = value.slice(1).split('\\"'); for (let i = 0; i < parts.length; ++i) { const quotindex = parts[i].indexOf('"'); if (quotindex !== -1) { parts[i] = parts[i].slice(0, quotindex); parts.length = i + 1; } parts[i] = parts[i].replace(/\\(.)/g, "$1"); } value = parts.join('"'); } return value; } function rfc5987decode(extvalue) { const encodingend = extvalue.indexOf("'"); if (encodingend === -1) { return extvalue; } const encoding = extvalue.slice(0, encodingend); const langvalue = extvalue.slice(encodingend + 1); const value = langvalue.replace(/^[^']*'/, ""); return textdecode(encoding, value); } function rfc2047decode(value) { if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { return value; } return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { if (encoding === "q" || encoding === "Q") { text = text.replace(/_/g, " "); text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text); } try { text = atob(text); } catch (e) {} return textdecode(charset, text); }); } return ""; } /***/ }), /* 25 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFNetworkStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(23); const OK_RESPONSE = 200; const PARTIAL_CONTENT_RESPONSE = 206; function getArrayBuffer(xhr) { const data = xhr.response; if (typeof data !== "string") { return data; } const array = (0, _util.stringToBytes)(data); return array.buffer; } class NetworkManager { constructor(url, args) { this.url = url; args = args || {}; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || {}; this.withCredentials = args.withCredentials || false; this.getXhr = args.getXhr || function NetworkManager_getXhr() { return new XMLHttpRequest(); }; this.currXhrId = 0; this.pendingRequests = Object.create(null); } requestRange(begin, end, listeners) { const args = { begin, end }; for (const prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); } requestFull(listeners) { return this.request(listeners); } request(args) { const xhr = this.getXhr(); const xhrId = this.currXhrId++; const pendingRequest = this.pendingRequests[xhrId] = { xhr }; xhr.open("GET", this.url); xhr.withCredentials = this.withCredentials; for (const property in this.httpHeaders) { const value = this.httpHeaders[property]; if (typeof value === "undefined") { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && "begin" in args && "end" in args) { xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; } else { pendingRequest.expectedStatus = OK_RESPONSE; } xhr.responseType = "arraybuffer"; if (args.onError) { xhr.onerror = function (evt) { args.onError(xhr.status); }; } xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); xhr.onprogress = this.onProgress.bind(this, xhrId); pendingRequest.onHeadersReceived = args.onHeadersReceived; pendingRequest.onDone = args.onDone; pendingRequest.onError = args.onError; pendingRequest.onProgress = args.onProgress; xhr.send(null); return xhrId; } onProgress(xhrId, evt) { const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } if (pendingRequest.onProgress) { pendingRequest.onProgress(evt); } } onStateChange(xhrId, evt) { const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } const xhr = pendingRequest.xhr; if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { pendingRequest.onHeadersReceived(); delete pendingRequest.onHeadersReceived; } if (xhr.readyState !== 4) { return; } if (!(xhrId in this.pendingRequests)) { return; } delete this.pendingRequests[xhrId]; if (xhr.status === 0 && this.isHttp) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } const xhrStatus = xhr.status || OK_RESPONSE; const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } const chunk = getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { const rangeHeader = xhr.getResponseHeader("Content-Range"); const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); pendingRequest.onDone({ begin: parseInt(matches[1], 10), chunk }); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk }); } else if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } } getRequestXhr(xhrId) { return this.pendingRequests[xhrId].xhr; } isPendingRequest(xhrId) { return xhrId in this.pendingRequests; } abortRequest(xhrId) { const xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } } class PDFNetworkStream { constructor(source) { this._source = source; this._manager = new NetworkManager(source.url, { httpHeaders: source.httpHeaders, withCredentials: source.withCredentials }); this._rangeChunkSize = source.rangeChunkSize; this._fullRequestReader = null; this._rangeRequestReaders = []; } _onRangeRequestReaderClosed(reader) { const i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } const readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } } exports.PDFNetworkStream = PDFNetworkStream; class PDFNetworkStreamFullRequestReader { constructor(manager, source) { this._manager = manager; const args = { onHeadersReceived: this._onHeadersReceived.bind(this), onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = source.url; this._fullRequestId = manager.requestFull(args); this._headersReceivedCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = false; this._isRangeSupported = false; this._cachedChunks = []; this._requests = []; this._done = false; this._storedError = undefined; this._filename = null; this.onProgress = null; } _onHeadersReceived() { const fullRequestXhrId = this._fullRequestId; const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); const getResponseHeader = name => { return fullRequestXhr.getResponseHeader(name); }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); } _onDone(args) { if (args) { if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: args.chunk, done: false }); } else { this._cachedChunks.push(args.chunk); } } this._done = true; if (this._cachedChunks.length > 0) { return; } this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } _onError(status) { const url = this._url; const exception = (0, _network_utils.createResponseStatusError)(status, url); this._storedError = exception; this._headersReceivedCapability.reject(exception); this._requests.forEach(function (requestCapability) { requestCapability.reject(exception); }); this._requests = []; this._cachedChunks = []; } _onProgress(data) { if (this.onProgress) { this.onProgress({ loaded: data.loaded, total: data.lengthComputable ? data.total : this._contentLength }); } } get filename() { return this._filename; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } get contentLength() { return this._contentLength; } get headersReady() { return this._headersReceivedCapability.promise; } async read() { if (this._storedError) { throw this._storedError; } if (this._cachedChunks.length > 0) { const chunk = this._cachedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } } class PDFNetworkStreamRangeRequestReader { constructor(manager, begin, end) { this._manager = manager; const args = { onDone: this._onDone.bind(this), onProgress: this._onProgress.bind(this) }; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this.onProgress = null; this.onClosed = null; } _close() { if (this.onClosed) { this.onClosed(this); } } _onDone(data) { const chunk = data.chunk; if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._close(); } _onProgress(evt) { if (!this.isStreamingSupported && this.onProgress) { this.onProgress({ loaded: evt.loaded }); } } get isStreamingSupported() { return false; } async read() { if (this._queuedChunk !== null) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } } /***/ }), /* 26 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFFetchStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(23); function createFetchOptions(headers, withCredentials, abortController) { return { method: "GET", headers, signal: abortController && abortController.signal, mode: "cors", credentials: withCredentials ? "include" : "same-origin", redirect: "follow" }; } function createHeaders(httpHeaders) { const headers = new Headers(); for (const property in httpHeaders) { const value = httpHeaders[property]; if (typeof value === "undefined") { continue; } headers.append(property, value); } return headers; } class PDFFetchStream { constructor(source) { this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { return this._fullRequestReader ? this._fullRequestReader._loaded : 0; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } const readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } } exports.PDFFetchStream = PDFFetchStream; class PDFFetchStreamReader { constructor(stream) { this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; const source = stream.source; this._withCredentials = source.withCredentials || false; this._contentLength = source.length; this._headersCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._headers = createHeaders(this._stream.httpHeaders); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } this._reader = response.body.getReader(); this._headersCapability.resolve(); const getResponseHeader = name => { return response.headers.get(name); }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: this._stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (!this._isStreamingSupported && this._isRangeSupported) { this.cancel(new _util.AbortException("Streaming is disabled.")); } }).catch(this._headersCapability.reject); this.onProgress = null; } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._headersCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } const buffer = new Uint8Array(value).buffer; return { value: buffer, done: false }; } cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } } class PDFFetchStreamRangeReader { constructor(stream, begin, end) { this._stream = stream; this._reader = null; this._loaded = 0; const source = stream.source; this._withCredentials = source.withCredentials || false; this._readCapability = (0, _util.createPromiseCapability)(); this._isStreamingSupported = !source.disableStream; if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._headers = createHeaders(this._stream.httpHeaders); this._headers.append("Range", `bytes=${begin}-${end - 1}`); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } this._readCapability.resolve(); this._reader = response.body.getReader(); }).catch(reason => { if (reason && reason.name === "AbortError") { return; } throw reason; }); this.onProgress = null; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } const buffer = new Uint8Array(value).buffer; return { value: buffer, done: false }; } cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } } /***/ }) /******/ ]); }); }); var pdf_worker = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { module.exports = factory(); })(commonjsGlobal, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __w_pdfjs_require__.m = modules; /******/ /******/ // expose the module cache /******/ __w_pdfjs_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __w_pdfjs_require__.d = function(exports, name, getter) { /******/ if(!__w_pdfjs_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __w_pdfjs_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __w_pdfjs_require__.t = function(value, mode) { /******/ if(mode & 1) value = __w_pdfjs_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __w_pdfjs_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __w_pdfjs_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __w_pdfjs_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __w_pdfjs_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "WorkerMessageHandler", { enumerable: true, get: function () { return _worker.WorkerMessageHandler; } }); var _worker = __w_pdfjs_require__(1); /***/ }), /* 1 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkerMessageHandler = exports.WorkerTask = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _pdf_manager = __w_pdfjs_require__(6); var _writer = __w_pdfjs_require__(27); var _is_node = __w_pdfjs_require__(4); var _message_handler = __w_pdfjs_require__(46); var _worker_stream = __w_pdfjs_require__(47); var _core_utils = __w_pdfjs_require__(8); class WorkerTask { constructor(name) { this.name = name; this.terminated = false; this._capability = (0, _util.createPromiseCapability)(); } get finished() { return this._capability.promise; } finish() { this._capability.resolve(); } terminate() { this.terminated = true; } ensureNotTerminated() { if (this.terminated) { throw new Error("Worker task was terminated"); } } } exports.WorkerTask = WorkerTask; class WorkerMessageHandler { static setup(handler, port) { var testMessageProcessed = false; handler.on("test", function wphSetupTest(data) { if (testMessageProcessed) { return; } testMessageProcessed = true; if (!(data instanceof Uint8Array)) { handler.send("test", null); return; } const supportTransfers = data[0] === 255; handler.postMessageTransfers = supportTransfers; handler.send("test", { supportTransfers }); }); handler.on("configure", function wphConfigure(data) { (0, _util.setVerbosityLevel)(data.verbosity); }); handler.on("GetDocRequest", function wphSetupDoc(data) { return WorkerMessageHandler.createDocumentHandler(data, port); }); } static createDocumentHandler(docParams, port) { var pdfManager; var terminated = false; var cancelXHRs = null; var WorkerTasks = []; const verbosity = (0, _util.getVerbosityLevel)(); const apiVersion = docParams.apiVersion; const workerVersion = '2.6.347'; if (apiVersion !== workerVersion) { throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); } const enumerableProperties = []; for (const property in []) { enumerableProperties.push(property); } if (enumerableProperties.length) { throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); } if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") { throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead."); } var docId = docParams.docId; var docBaseUrl = docParams.docBaseUrl; var workerHandlerName = docParams.docId + "_worker"; var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); handler.postMessageTransfers = docParams.postMessageTransfers; function ensureNotTerminated() { if (terminated) { throw new Error("Worker was terminated"); } } function startWorkerTask(task) { WorkerTasks.push(task); } function finishWorkerTask(task) { task.finish(); var i = WorkerTasks.indexOf(task); WorkerTasks.splice(i, 1); } async function loadDocument(recoveryMode) { await pdfManager.ensureDoc("checkHeader"); await pdfManager.ensureDoc("parseStartXRef"); await pdfManager.ensureDoc("parse", [recoveryMode]); if (!recoveryMode) { await pdfManager.ensureDoc("checkFirstPage"); } const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprint")]); return { numPages, fingerprint }; } function getPdfManager(data, evaluatorOptions) { var pdfManagerCapability = (0, _util.createPromiseCapability)(); let newPdfManager; var source = data.source; if (source.data) { try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } return pdfManagerCapability.promise; } var pdfStream, cachedChunks = []; try { pdfStream = new _worker_stream.PDFWorkerStream(handler); } catch (ex) { pdfManagerCapability.reject(ex); return pdfManagerCapability.promise; } var fullRequest = pdfStream.getFullReader(); fullRequest.headersReady.then(function () { if (!fullRequest.isRangeSupported) { return; } var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { msgHandler: handler, password: source.password, length: fullRequest.contentLength, disableAutoFetch, rangeChunkSize: source.rangeChunkSize }, evaluatorOptions, docBaseUrl); for (let i = 0; i < cachedChunks.length; i++) { newPdfManager.sendProgressiveData(cachedChunks[i]); } cachedChunks = []; pdfManagerCapability.resolve(newPdfManager); cancelXHRs = null; }).catch(function (reason) { pdfManagerCapability.reject(reason); cancelXHRs = null; }); var loaded = 0; var flushChunks = function () { var pdfFile = (0, _util.arraysToBytes)(cachedChunks); if (source.length && pdfFile.length !== source.length) { (0, _util.warn)("reported HTTP length is different from actual"); } try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } cachedChunks = []; }; var readPromise = new Promise(function (resolve, reject) { var readChunk = function ({ value, done }) { try { ensureNotTerminated(); if (done) { if (!newPdfManager) { flushChunks(); } cancelXHRs = null; return; } loaded += (0, _util.arrayByteLength)(value); if (!fullRequest.isStreamingSupported) { handler.send("DocProgress", { loaded, total: Math.max(loaded, fullRequest.contentLength || 0) }); } if (newPdfManager) { newPdfManager.sendProgressiveData(value); } else { cachedChunks.push(value); } fullRequest.read().then(readChunk, reject); } catch (e) { reject(e); } }; fullRequest.read().then(readChunk, reject); }); readPromise.catch(function (e) { pdfManagerCapability.reject(e); cancelXHRs = null; }); cancelXHRs = function (reason) { pdfStream.cancelAllRequests(reason); }; return pdfManagerCapability.promise; } function setupDoc(data) { function onSuccess(doc) { ensureNotTerminated(); handler.send("GetDoc", { pdfInfo: doc }); } function onFailure(ex) { ensureNotTerminated(); if (ex instanceof _util.PasswordException) { var task = new WorkerTask(`PasswordException: response ${ex.code}`); startWorkerTask(task); handler.sendWithPromise("PasswordRequest", ex).then(function ({ password }) { finishWorkerTask(task); pdfManager.updatePassword(password); pdfManagerReady(); }).catch(function () { finishWorkerTask(task); handler.send("DocException", ex); }); } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { handler.send("DocException", ex); } else { handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); } } function pdfManagerReady() { ensureNotTerminated(); loadDocument(false).then(onSuccess, function (reason) { ensureNotTerminated(); if (!(reason instanceof _core_utils.XRefParseException)) { onFailure(reason); return; } pdfManager.requestLoadedStream(); pdfManager.onLoadedStream().then(function () { ensureNotTerminated(); loadDocument(true).then(onSuccess, onFailure); }); }); } ensureNotTerminated(); var evaluatorOptions = { maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, ignoreErrors: data.ignoreErrors, isEvalSupported: data.isEvalSupported, fontExtraProperties: data.fontExtraProperties }; getPdfManager(data, evaluatorOptions).then(function (newPdfManager) { if (terminated) { newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); throw new Error("Worker was terminated"); } pdfManager = newPdfManager; pdfManager.onLoadedStream().then(function (stream) { handler.send("DataLoaded", { length: stream.bytes.byteLength }); }); }).then(pdfManagerReady, onFailure); } handler.on("GetPage", function wphSetupGetPage(data) { return pdfManager.getPage(data.pageIndex).then(function (page) { return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) { return { rotate, ref, userUnit, view }; }); }); }); handler.on("GetPageIndex", function wphSetupGetPageIndex({ ref }) { const pageRef = _primitives.Ref.get(ref.num, ref.gen); return pdfManager.ensureCatalog("getPageIndex", [pageRef]); }); handler.on("GetDestinations", function wphSetupGetDestinations(data) { return pdfManager.ensureCatalog("destinations"); }); handler.on("GetDestination", function wphSetupGetDestination(data) { return pdfManager.ensureCatalog("getDestination", [data.id]); }); handler.on("GetPageLabels", function wphSetupGetPageLabels(data) { return pdfManager.ensureCatalog("pageLabels"); }); handler.on("GetPageLayout", function wphSetupGetPageLayout(data) { return pdfManager.ensureCatalog("pageLayout"); }); handler.on("GetPageMode", function wphSetupGetPageMode(data) { return pdfManager.ensureCatalog("pageMode"); }); handler.on("GetViewerPreferences", function (data) { return pdfManager.ensureCatalog("viewerPreferences"); }); handler.on("GetOpenAction", function (data) { return pdfManager.ensureCatalog("openAction"); }); handler.on("GetAttachments", function wphSetupGetAttachments(data) { return pdfManager.ensureCatalog("attachments"); }); handler.on("GetJavaScript", function wphSetupGetJavaScript(data) { return pdfManager.ensureCatalog("javaScript"); }); handler.on("GetOutline", function wphSetupGetOutline(data) { return pdfManager.ensureCatalog("documentOutline"); }); handler.on("GetOptionalContentConfig", function (data) { return pdfManager.ensureCatalog("optionalContentConfig"); }); handler.on("GetPermissions", function (data) { return pdfManager.ensureCatalog("permissions"); }); handler.on("GetMetadata", function wphSetupGetMetadata(data) { return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); }); handler.on("GetData", function wphSetupGetData(data) { pdfManager.requestLoadedStream(); return pdfManager.onLoadedStream().then(function (stream) { return stream.bytes; }); }); handler.on("GetStats", function wphSetupGetStats(data) { return pdfManager.ensureXRef("stats"); }); handler.on("GetAnnotations", function ({ pageIndex, intent }) { return pdfManager.getPage(pageIndex).then(function (page) { return page.getAnnotationsData(intent); }); }); handler.on("SaveDocument", function ({ numPages, annotationStorage, filename }) { pdfManager.requestLoadedStream(); const promises = [pdfManager.onLoadedStream()]; const document = pdfManager.pdfDocument; for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { promises.push(pdfManager.getPage(pageIndex).then(function (page) { const task = new WorkerTask(`Save: page ${pageIndex}`); return page.save(handler, task, annotationStorage); })); } return Promise.all(promises).then(([stream, ...refs]) => { let newRefs = []; for (const ref of refs) { newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs); } if (newRefs.length === 0) { return stream.bytes; } const xref = document.xref; let newXrefInfo = Object.create(null); if (xref.trailer) { const _info = Object.create(null); const xrefInfo = xref.trailer.get("Info") || null; if (xrefInfo) { xrefInfo.forEach((key, value) => { if ((0, _util.isString)(key) && (0, _util.isString)(value)) { _info[key] = (0, _util.stringToPDFString)(value); } }); } newXrefInfo = { rootRef: xref.trailer.getRaw("Root") || null, encrypt: xref.trailer.getRaw("Encrypt") || null, newRef: xref.getNewRef(), infoRef: xref.trailer.getRaw("Info") || null, info: _info, fileIds: xref.trailer.getRaw("ID") || null, startXRef: document.startXRef, filename }; } xref.resetNewRef(); return (0, _writer.incrementalUpdate)(stream.bytes, newXrefInfo, newRefs); }); }); handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) { var pageIndex = data.pageIndex; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask(`GetOperatorList: page ${pageIndex}`); startWorkerTask(task); const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.getOperatorList({ handler, sink, task, intent: data.intent, renderInteractiveForms: data.renderInteractiveForms, annotationStorage: data.annotationStorage }).then(function (operatorListInfo) { finishWorkerTask(task); if (start) { (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); sink.error(reason); }); }); }, this); handler.on("GetTextContent", function wphExtractText(data, sink) { var pageIndex = data.pageIndex; sink.onPull = function (desiredSize) {}; sink.onCancel = function (reason) {}; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask("GetTextContent: page " + pageIndex); startWorkerTask(task); const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.extractTextContent({ handler, task, sink, normalizeWhitespace: data.normalizeWhitespace, combineTextItems: data.combineTextItems }).then(function () { finishWorkerTask(task); if (start) { (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } sink.error(reason); }); }); }); handler.on("FontFallback", function (data) { return pdfManager.fontFallback(data.id, handler); }); handler.on("Cleanup", function wphCleanup(data) { return pdfManager.cleanup(true); }); handler.on("Terminate", function wphTerminate(data) { terminated = true; const waitOn = []; if (pdfManager) { pdfManager.terminate(new _util.AbortException("Worker was terminated.")); const cleanupPromise = pdfManager.cleanup(); waitOn.push(cleanupPromise); pdfManager = null; } else { (0, _primitives.clearPrimitiveCaches)(); } if (cancelXHRs) { cancelXHRs(new _util.AbortException("Worker was terminated.")); } WorkerTasks.forEach(function (task) { waitOn.push(task.finished); task.terminate(); }); return Promise.all(waitOn).then(function () { handler.destroy(); handler = null; }); }); handler.on("Ready", function wphReady(data) { setupDoc(docParams); docParams = null; }); return workerHandlerName; } static initializeFromPort(port) { var handler = new _message_handler.MessageHandler("worker", "main", port); WorkerMessageHandler.setup(handler, port); handler.send("ready", null); } } exports.WorkerMessageHandler = WorkerMessageHandler; function isMessagePort(maybePort) { return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; } if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { WorkerMessageHandler.initializeFromPort(self); } /***/ }), /* 2 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isBool = isBool; exports.isNum = isNum; exports.isString = isString; exports.isSameOrigin = isSameOrigin; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF8String = stringToUTF8String; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.unreachable = unreachable; exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0; __w_pdfjs_require__(3); const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; const TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; const ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; const AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; const AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; const AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; const AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; const AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; const AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; const AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; const AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; const StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; const FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; const CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; const OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; const UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; let verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl) { if (!url) { return null; } try { const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value, enumerable: true, configurable: true, writable: false }); return value; } const BaseException = function BaseExceptionClosure() { function BaseException(message) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = this.constructor.name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; class PasswordException extends BaseException { constructor(msg, code) { super(msg); this.code = code; } } exports.PasswordException = PasswordException; class UnknownErrorException extends BaseException { constructor(msg, details) { super(msg); this.details = details; } } exports.UnknownErrorException = UnknownErrorException; class InvalidPDFException extends BaseException {} exports.InvalidPDFException = InvalidPDFException; class MissingPDFException extends BaseException {} exports.MissingPDFException = MissingPDFException; class UnexpectedResponseException extends BaseException { constructor(msg, status) { super(msg); this.status = status; } } exports.UnexpectedResponseException = UnexpectedResponseException; class FormatError extends BaseException {} exports.FormatError = FormatError; class AbortException extends BaseException {} exports.AbortException = AbortException; const NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } const strBuf = []; for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); const length = str.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { const length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } let resultLength = 0; for (let i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } let pos = 0; const data = new Uint8Array(resultLength); for (let i = 0; i < length; i++) { let item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } const itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } const IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } const IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"]; class Util { static makeCssRgb(r, g, b) { rgbBuf[1] = r; rgbBuf[3] = g; rgbBuf[5] = b; return rgbBuf.join(""); } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } static getAxialAlignedBoundingBox(r, m) { const p1 = Util.applyTransform(r, m); const p2 = Util.applyTransform(r.slice(2, 4), m); const p3 = Util.applyTransform([r[0], r[3]], m); const p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } static apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; const b = m[0] * transpose[1] + m[1] * transpose[3]; const c = m[2] * transpose[0] + m[3] * transpose[2]; const d = m[2] * transpose[1] + m[3] * transpose[3]; const first = (a + d) / 2; const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; const sx = first + second || 1; const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } static normalizeRect(rect) { const r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } static intersect(rect1, rect2) { function compare(a, b) { return a - b; } const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); const result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } } exports.Util = Util; const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; function stringToPDFString(str) { const length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); } } else { for (let i = 0; i < length; ++i) { const code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([\(\)\\])/g, "\\$1"); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return typeof v === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } return arr1.every(function (element, index) { return element === arr2[index]; }); } function getModificationDate(date = new Date(Date.now())) { const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), (date.getUTCDate() + 1).toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { const capability = Object.create(null); let isSettled = false; Object.defineProperty(capability, "settled", { get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } const createObjectURL = function createObjectURLClosure() { const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; return function createObjectURL(data, contentType, forceDataSchema = false) { if (!forceDataSchema && URL.createObjectURL) { const blob = new Blob([data], { type: contentType }); return URL.createObjectURL(blob); } let buffer = `data:${contentType};base64,`; for (let i = 0, ii = data.length; i < ii; i += 3) { const b1 = data[i] & 0xff; const b2 = data[i + 1] & 0xff; const b3 = data[i + 2] & 0xff; const d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; const d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; /***/ }), /* 3 */ /***/ (function(module, exports, __w_pdfjs_require__) { __w_pdfjs_require__(4); /***/ }), /* 4 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.isNodeJS = void 0; const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 5 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.clearPrimitiveCaches = clearPrimitiveCaches; exports.isEOF = isEOF; exports.isCmd = isCmd; exports.isDict = isDict; exports.isName = isName; exports.isRef = isRef; exports.isRefsEqual = isRefsEqual; exports.isStream = isStream; exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0; __w_pdfjs_require__(2); var EOF = {}; exports.EOF = EOF; var Name = function NameClosure() { let nameCache = Object.create(null); function Name(name) { this.name = name; } Name.prototype = {}; Name.get = function Name_get(name) { var nameValue = nameCache[name]; return nameValue ? nameValue : nameCache[name] = new Name(name); }; Name._clearCache = function () { nameCache = Object.create(null); }; return Name; }(); exports.Name = Name; var Cmd = function CmdClosure() { let cmdCache = Object.create(null); function Cmd(cmd) { this.cmd = cmd; } Cmd.prototype = {}; Cmd.get = function Cmd_get(cmd) { var cmdValue = cmdCache[cmd]; return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); }; Cmd._clearCache = function () { cmdCache = Object.create(null); }; return Cmd; }(); exports.Cmd = Cmd; var Dict = function DictClosure() { var nonSerializable = function nonSerializableClosure() { return nonSerializable; }; function Dict(xref) { this._map = Object.create(null); this.xref = xref; this.objId = null; this.suppressEncryption = false; this.__nonSerializable__ = nonSerializable; } Dict.prototype = { assignXref: function Dict_assignXref(newXref) { this.xref = newXref; }, get size() { return Object.keys(this._map).length; }, get(key1, key2, key3) { let value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { return this.xref.fetch(value, this.suppressEncryption); } return value; }, async getAsync(key1, key2, key3) { let value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { return this.xref.fetchAsync(value, this.suppressEncryption); } return value; }, getArray(key1, key2, key3) { let value = this.get(key1, key2, key3); if (!Array.isArray(value) || !this.xref) { return value; } value = value.slice(); for (let i = 0, ii = value.length; i < ii; i++) { if (!(value[i] instanceof Ref)) { continue; } value[i] = this.xref.fetch(value[i], this.suppressEncryption); } return value; }, getRaw: function Dict_getRaw(key) { return this._map[key]; }, getKeys: function Dict_getKeys() { return Object.keys(this._map); }, getRawValues: function Dict_getRawValues() { return Object.values(this._map); }, set: function Dict_set(key, value) { this._map[key] = value; }, has: function Dict_has(key) { return this._map[key] !== undefined; }, forEach: function Dict_forEach(callback) { for (var key in this._map) { callback(key, this.get(key)); } } }; Dict.empty = new Dict(null); Dict.merge = function ({ xref, dictArray, mergeSubDicts = false }) { const mergedDict = new Dict(xref); if (!mergeSubDicts) { for (const dict of dictArray) { if (!(dict instanceof Dict)) { continue; } for (const [key, value] of Object.entries(dict._map)) { if (mergedDict._map[key] === undefined) { mergedDict._map[key] = value; } } } return mergedDict.size > 0 ? mergedDict : Dict.empty; } const properties = new Map(); for (const dict of dictArray) { if (!(dict instanceof Dict)) { continue; } for (const [key, value] of Object.entries(dict._map)) { let property = properties.get(key); if (property === undefined) { property = []; properties.set(key, property); } property.push(value); } } for (const [name, values] of properties) { if (values.length === 1 || !(values[0] instanceof Dict)) { mergedDict._map[name] = values[0]; continue; } const subDict = new Dict(xref); for (const dict of values) { if (!(dict instanceof Dict)) { continue; } for (const [key, value] of Object.entries(dict._map)) { if (subDict._map[key] === undefined) { subDict._map[key] = value; } } } if (subDict.size > 0) { mergedDict._map[name] = subDict; } } properties.clear(); return mergedDict.size > 0 ? mergedDict : Dict.empty; }; return Dict; }(); exports.Dict = Dict; var Ref = function RefClosure() { let refCache = Object.create(null); function Ref(num, gen) { this.num = num; this.gen = gen; } Ref.prototype = { toString: function Ref_toString() { if (this.gen === 0) { return `${this.num}R`; } return `${this.num}R${this.gen}`; } }; Ref.get = function (num, gen) { const key = gen === 0 ? `${num}R` : `${num}R${gen}`; const refValue = refCache[key]; return refValue ? refValue : refCache[key] = new Ref(num, gen); }; Ref._clearCache = function () { refCache = Object.create(null); }; return Ref; }(); exports.Ref = Ref; class RefSet { constructor() { this._set = new Set(); } has(ref) { return this._set.has(ref.toString()); } put(ref) { this._set.add(ref.toString()); } remove(ref) { this._set.delete(ref.toString()); } } exports.RefSet = RefSet; class RefSetCache { constructor() { this._map = new Map(); } get size() { return this._map.size; } get(ref) { return this._map.get(ref.toString()); } has(ref) { return this._map.has(ref.toString()); } put(ref, obj) { this._map.set(ref.toString(), obj); } putAlias(ref, aliasRef) { this._map.set(ref.toString(), this.get(aliasRef)); } forEach(callback) { for (const value of this._map.values()) { callback(value); } } clear() { this._map.clear(); } } exports.RefSetCache = RefSetCache; function isEOF(v) { return v === EOF; } function isName(v, name) { return v instanceof Name && (name === undefined || v.name === name); } function isCmd(v, cmd) { return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); } function isDict(v, type) { return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); } function isRef(v) { return v instanceof Ref; } function isRefsEqual(v1, v2) { return v1.num === v2.num && v1.gen === v2.gen; } function isStream(v) { return typeof v === "object" && v !== null && v.getBytes !== undefined; } function clearPrimitiveCaches() { Cmd._clearCache(); Name._clearCache(); Ref._clearCache(); } /***/ }), /* 6 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.NetworkPdfManager = exports.LocalPdfManager = void 0; var _util = __w_pdfjs_require__(2); var _chunked_stream = __w_pdfjs_require__(7); var _core_utils = __w_pdfjs_require__(8); var _document = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(12); class BasePdfManager { constructor() { if (this.constructor === BasePdfManager) { (0, _util.unreachable)("Cannot initialize BasePdfManager."); } } get docId() { return this._docId; } get password() { return this._password; } get docBaseUrl() { let docBaseUrl = null; if (this._docBaseUrl) { const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl); if (absoluteUrl) { docBaseUrl = absoluteUrl.href; } else { (0, _util.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`); } } return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl); } onLoadedStream() { (0, _util.unreachable)("Abstract method `onLoadedStream` called"); } ensureDoc(prop, args) { return this.ensure(this.pdfDocument, prop, args); } ensureXRef(prop, args) { return this.ensure(this.pdfDocument.xref, prop, args); } ensureCatalog(prop, args) { return this.ensure(this.pdfDocument.catalog, prop, args); } getPage(pageIndex) { return this.pdfDocument.getPage(pageIndex); } fontFallback(id, handler) { return this.pdfDocument.fontFallback(id, handler); } cleanup(manuallyTriggered = false) { return this.pdfDocument.cleanup(manuallyTriggered); } async ensure(obj, prop, args) { (0, _util.unreachable)("Abstract method `ensure` called"); } requestRange(begin, end) { (0, _util.unreachable)("Abstract method `requestRange` called"); } requestLoadedStream() { (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); } sendProgressiveData(chunk) { (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); } updatePassword(password) { this._password = password; } terminate(reason) { (0, _util.unreachable)("Abstract method `terminate` called"); } } class LocalPdfManager extends BasePdfManager { constructor(docId, data, password, evaluatorOptions, docBaseUrl) { super(); this._docId = docId; this._password = password; this._docBaseUrl = docBaseUrl; this.evaluatorOptions = evaluatorOptions; const stream = new _stream.Stream(data); this.pdfDocument = new _document.PDFDocument(this, stream); this._loadedStreamPromise = Promise.resolve(stream); } async ensure(obj, prop, args) { const value = obj[prop]; if (typeof value === "function") { return value.apply(obj, args); } return value; } requestRange(begin, end) { return Promise.resolve(); } requestLoadedStream() {} onLoadedStream() { return this._loadedStreamPromise; } terminate(reason) {} } exports.LocalPdfManager = LocalPdfManager; class NetworkPdfManager extends BasePdfManager { constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) { super(); this._docId = docId; this._password = args.password; this._docBaseUrl = docBaseUrl; this.msgHandler = args.msgHandler; this.evaluatorOptions = evaluatorOptions; this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { msgHandler: args.msgHandler, length: args.length, disableAutoFetch: args.disableAutoFetch, rangeChunkSize: args.rangeChunkSize }); this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); } async ensure(obj, prop, args) { try { const value = obj[prop]; if (typeof value === "function") { return value.apply(obj, args); } return value; } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { throw ex; } await this.requestRange(ex.begin, ex.end); return this.ensure(obj, prop, args); } } requestRange(begin, end) { return this.streamManager.requestRange(begin, end); } requestLoadedStream() { this.streamManager.requestAllChunks(); } sendProgressiveData(chunk) { this.streamManager.onReceiveData({ chunk }); } onLoadedStream() { return this.streamManager.onLoadedStream(); } terminate(reason) { this.streamManager.abort(reason); } } exports.NetworkPdfManager = NetworkPdfManager; /***/ }), /* 7 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ChunkedStreamManager = exports.ChunkedStream = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(8); class ChunkedStream { constructor(length, chunkSize, manager) { this.bytes = new Uint8Array(length); this.start = 0; this.pos = 0; this.end = length; this.chunkSize = chunkSize; this._loadedChunks = new Set(); this.numChunks = Math.ceil(length / chunkSize); this.manager = manager; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1; } getMissingChunks() { const chunks = []; for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { if (!this._loadedChunks.has(chunk)) { chunks.push(chunk); } } return chunks; } getBaseStreams() { return [this]; } get numChunksLoaded() { return this._loadedChunks.size; } allChunksLoaded() { return this.numChunksLoaded === this.numChunks; } onReceiveData(begin, chunk) { const chunkSize = this.chunkSize; if (begin % chunkSize !== 0) { throw new Error(`Bad begin offset: ${begin}`); } const end = begin + chunk.byteLength; if (end % chunkSize !== 0 && end !== this.bytes.length) { throw new Error(`Bad end offset: ${end}`); } this.bytes.set(new Uint8Array(chunk), begin); const beginChunk = Math.floor(begin / chunkSize); const endChunk = Math.floor((end - 1) / chunkSize) + 1; for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } onReceiveProgressiveData(data) { let position = this.progressiveDataLength; const beginChunk = Math.floor(position / this.chunkSize); this.bytes.set(new Uint8Array(data), position); position += data.byteLength; this.progressiveDataLength = position; const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } ensureByte(pos) { if (pos < this.progressiveDataLength) { return; } const chunk = Math.floor(pos / this.chunkSize); if (chunk === this.lastSuccessfulEnsureByteChunk) { return; } if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(pos, pos + 1); } this.lastSuccessfulEnsureByteChunk = chunk; } ensureRange(begin, end) { if (begin >= end) { return; } if (end <= this.progressiveDataLength) { return; } const chunkSize = this.chunkSize; const beginChunk = Math.floor(begin / chunkSize); const endChunk = Math.floor((end - 1) / chunkSize) + 1; for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(begin, end); } } } nextEmptyChunk(beginChunk) { const numChunks = this.numChunks; for (let i = 0; i < numChunks; ++i) { const chunk = (beginChunk + i) % numChunks; if (!this._loadedChunks.has(chunk)) { return chunk; } } return null; } hasChunk(chunk) { return this._loadedChunks.has(chunk); } get length() { return this.end - this.start; } get isEmpty() { return this.length === 0; } getByte() { const pos = this.pos; if (pos >= this.end) { return -1; } if (pos >= this.progressiveDataLength) { this.ensureByte(pos); } return this.bytes[this.pos++]; } getUint16() { const b0 = this.getByte(); const b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; } getInt32() { const b0 = this.getByte(); const b1 = this.getByte(); const b2 = this.getByte(); const b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } getBytes(length, forceClamped = false) { const bytes = this.bytes; const pos = this.pos; const strEnd = this.end; if (!length) { if (strEnd > this.progressiveDataLength) { this.ensureRange(pos, strEnd); } const subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } let end = pos + length; if (end > strEnd) { end = strEnd; } if (end > this.progressiveDataLength) { this.ensureRange(pos, end); } this.pos = end; const subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } peekByte() { const peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; } peekBytes(length, forceClamped = false) { const bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; } getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } if (end > this.progressiveDataLength) { this.ensureRange(begin, end); } return this.bytes.subarray(begin, end); } skip(n) { if (!n) { n = 1; } this.pos += n; } reset() { this.pos = this.start; } moveStart() { this.start = this.pos; } makeSubStream(start, length, dict) { if (length) { if (start + length > this.progressiveDataLength) { this.ensureRange(start, start + length); } } else { if (start >= this.progressiveDataLength) { this.ensureByte(start); } } function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this); ChunkedStreamSubstream.prototype.getMissingChunks = function () { const chunkSize = this.chunkSize; const beginChunk = Math.floor(this.start / chunkSize); const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; const missingChunks = []; for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { missingChunks.push(chunk); } } return missingChunks; }; ChunkedStreamSubstream.prototype.allChunksLoaded = function () { if (this.numChunksLoaded === this.numChunks) { return true; } return this.getMissingChunks().length === 0; }; const subStream = new ChunkedStreamSubstream(); subStream.pos = subStream.start = start; subStream.end = start + length || this.end; subStream.dict = dict; return subStream; } } exports.ChunkedStream = ChunkedStream; class ChunkedStreamManager { constructor(pdfNetworkStream, args) { this.length = args.length; this.chunkSize = args.rangeChunkSize; this.stream = new ChunkedStream(this.length, this.chunkSize, this); this.pdfNetworkStream = pdfNetworkStream; this.disableAutoFetch = args.disableAutoFetch; this.msgHandler = args.msgHandler; this.currRequestId = 0; this._chunksNeededByRequest = new Map(); this._requestsByChunk = new Map(); this._promisesByRequest = new Map(); this.progressiveDataLength = 0; this.aborted = false; this._loadedStreamCapability = (0, _util.createPromiseCapability)(); } onLoadedStream() { return this._loadedStreamCapability.promise; } sendRequest(begin, end) { const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); if (!rangeReader.isStreamingSupported) { rangeReader.onProgress = this.onProgress.bind(this); } let chunks = [], loaded = 0; const promise = new Promise((resolve, reject) => { const readChunk = chunk => { try { if (!chunk.done) { const data = chunk.value; chunks.push(data); loaded += (0, _util.arrayByteLength)(data); if (rangeReader.isStreamingSupported) { this.onProgress({ loaded }); } rangeReader.read().then(readChunk, reject); return; } const chunkData = (0, _util.arraysToBytes)(chunks); chunks = null; resolve(chunkData); } catch (e) { reject(e); } }; rangeReader.read().then(readChunk, reject); }); promise.then(data => { if (this.aborted) { return; } this.onReceiveData({ chunk: data, begin }); }); } requestAllChunks() { const missingChunks = this.stream.getMissingChunks(); this._requestChunks(missingChunks); return this._loadedStreamCapability.promise; } _requestChunks(chunks) { const requestId = this.currRequestId++; const chunksNeeded = new Set(); this._chunksNeededByRequest.set(requestId, chunksNeeded); for (const chunk of chunks) { if (!this.stream.hasChunk(chunk)) { chunksNeeded.add(chunk); } } if (chunksNeeded.size === 0) { return Promise.resolve(); } const capability = (0, _util.createPromiseCapability)(); this._promisesByRequest.set(requestId, capability); const chunksToRequest = []; for (const chunk of chunksNeeded) { let requestIds = this._requestsByChunk.get(chunk); if (!requestIds) { requestIds = []; this._requestsByChunk.set(chunk, requestIds); chunksToRequest.push(chunk); } requestIds.push(requestId); } if (chunksToRequest.length > 0) { const groupedChunksToRequest = this.groupChunks(chunksToRequest); for (const groupedChunk of groupedChunksToRequest) { const begin = groupedChunk.beginChunk * this.chunkSize; const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); this.sendRequest(begin, end); } } return capability.promise.catch(reason => { if (this.aborted) { return; } throw reason; }); } getStream() { return this.stream; } requestRange(begin, end) { end = Math.min(end, this.length); const beginChunk = this.getBeginChunk(begin); const endChunk = this.getEndChunk(end); const chunks = []; for (let chunk = beginChunk; chunk < endChunk; ++chunk) { chunks.push(chunk); } return this._requestChunks(chunks); } requestRanges(ranges = []) { const chunksToRequest = []; for (const range of ranges) { const beginChunk = this.getBeginChunk(range.begin); const endChunk = this.getEndChunk(range.end); for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!chunksToRequest.includes(chunk)) { chunksToRequest.push(chunk); } } } chunksToRequest.sort(function (a, b) { return a - b; }); return this._requestChunks(chunksToRequest); } groupChunks(chunks) { const groupedChunks = []; let beginChunk = -1; let prevChunk = -1; for (let i = 0, ii = chunks.length; i < ii; ++i) { const chunk = chunks[i]; if (beginChunk < 0) { beginChunk = chunk; } if (prevChunk >= 0 && prevChunk + 1 !== chunk) { groupedChunks.push({ beginChunk, endChunk: prevChunk + 1 }); beginChunk = chunk; } if (i + 1 === chunks.length) { groupedChunks.push({ beginChunk, endChunk: chunk + 1 }); } prevChunk = chunk; } return groupedChunks; } onProgress(args) { this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, total: this.length }); } onReceiveData(args) { const chunk = args.chunk; const isProgressive = args.begin === undefined; const begin = isProgressive ? this.progressiveDataLength : args.begin; const end = begin + chunk.byteLength; const beginChunk = Math.floor(begin / this.chunkSize); const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); if (isProgressive) { this.stream.onReceiveProgressiveData(chunk); this.progressiveDataLength = end; } else { this.stream.onReceiveData(begin, chunk); } if (this.stream.allChunksLoaded()) { this._loadedStreamCapability.resolve(this.stream); } const loadedRequests = []; for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { const requestIds = this._requestsByChunk.get(curChunk); if (!requestIds) { continue; } this._requestsByChunk.delete(curChunk); for (const requestId of requestIds) { const chunksNeeded = this._chunksNeededByRequest.get(requestId); if (chunksNeeded.has(curChunk)) { chunksNeeded.delete(curChunk); } if (chunksNeeded.size > 0) { continue; } loadedRequests.push(requestId); } } if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { let nextEmptyChunk; if (this.stream.numChunksLoaded === 1) { const lastChunk = this.stream.numChunks - 1; if (!this.stream.hasChunk(lastChunk)) { nextEmptyChunk = lastChunk; } } else { nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); } if (Number.isInteger(nextEmptyChunk)) { this._requestChunks([nextEmptyChunk]); } } for (const requestId of loadedRequests) { const capability = this._promisesByRequest.get(requestId); this._promisesByRequest.delete(requestId); capability.resolve(); } this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length }); } onError(err) { this._loadedStreamCapability.reject(err); } getBeginChunk(begin) { return Math.floor(begin / this.chunkSize); } getEndChunk(end) { return Math.floor((end - 1) / this.chunkSize) + 1; } abort(reason) { this.aborted = true; if (this.pdfNetworkStream) { this.pdfNetworkStream.cancelAllRequests(reason); } for (const capability of this._promisesByRequest.values()) { capability.reject(reason); } } } exports.ChunkedStreamManager = ChunkedStreamManager; /***/ }), /* 8 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getLookupTableFactory = getLookupTableFactory; exports.getInheritableProperty = getInheritableProperty; exports.toRomanNumerals = toRomanNumerals; exports.log2 = log2; exports.readInt8 = readInt8; exports.readUint16 = readUint16; exports.readUint32 = readUint32; exports.isWhiteSpace = isWhiteSpace; exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0; var _util = __w_pdfjs_require__(2); function getLookupTableFactory(initializer) { let lookup; return function () { if (initializer) { lookup = Object.create(null); initializer(lookup); initializer = null; } return lookup; }; } class MissingDataException extends _util.BaseException { constructor(begin, end) { super(`Missing data [${begin}, ${end})`); this.begin = begin; this.end = end; } } exports.MissingDataException = MissingDataException; class XRefEntryException extends _util.BaseException {} exports.XRefEntryException = XRefEntryException; class XRefParseException extends _util.BaseException {} exports.XRefParseException = XRefParseException; function getInheritableProperty({ dict, key, getArray = false, stopWhenFound = true }) { const LOOP_LIMIT = 100; let loopCount = 0; let values; while (dict) { const value = getArray ? dict.getArray(key) : dict.get(key); if (value !== undefined) { if (stopWhenFound) { return value; } if (!values) { values = []; } values.push(value); } if (++loopCount > LOOP_LIMIT) { (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for "${key}"`); break; } dict = dict.get("Parent"); } return values; } const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; function toRomanNumerals(number, lowerCase = false) { (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); const romanBuf = []; let pos; while (number >= 1000) { number -= 1000; romanBuf.push("M"); } pos = number / 100 | 0; number %= 100; romanBuf.push(ROMAN_NUMBER_MAP[pos]); pos = number / 10 | 0; number %= 10; romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); const romanStr = romanBuf.join(""); return lowerCase ? romanStr.toLowerCase() : romanStr; } function log2(x) { if (x <= 0) { return 0; } return Math.ceil(Math.log2(x)); } function readInt8(data, offset) { return data[offset] << 24 >> 24; } function readUint16(data, offset) { return data[offset] << 8 | data[offset + 1]; } function readUint32(data, offset) { return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; } function isWhiteSpace(ch) { return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; } /***/ }), /* 9 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFDocument = exports.Page = void 0; var _util = __w_pdfjs_require__(2); var _obj = __w_pdfjs_require__(10); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); var _stream = __w_pdfjs_require__(12); var _annotation = __w_pdfjs_require__(25); var _crypto = __w_pdfjs_require__(22); var _parser = __w_pdfjs_require__(11); var _operator_list = __w_pdfjs_require__(26); var _evaluator = __w_pdfjs_require__(28); const DEFAULT_USER_UNIT = 1.0; const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; function isAnnotationRenderable(annotation, intent) { return intent === "display" && annotation.viewable || intent === "print" && annotation.printable; } class Page { constructor({ pdfManager, xref, pageIndex, pageDict, ref, globalIdFactory, fontCache, builtInCMapCache, globalImageCache }) { this.pdfManager = pdfManager; this.pageIndex = pageIndex; this.pageDict = pageDict; this.xref = xref; this.ref = ref; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.globalImageCache = globalImageCache; this.evaluatorOptions = pdfManager.evaluatorOptions; this.resourcesPromise = null; const idCounters = { obj: 0 }; this._localIdFactory = class extends globalIdFactory { static createObjId() { return `p${pageIndex}_${++idCounters.obj}`; } }; } _getInheritableProperty(key, getArray = false) { const value = (0, _core_utils.getInheritableProperty)({ dict: this.pageDict, key, getArray, stopWhenFound: false }); if (!Array.isArray(value)) { return value; } if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { return value[0]; } return _primitives.Dict.merge({ xref: this.xref, dictArray: value }); } get content() { return this.pageDict.get("Contents"); } get resources() { return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty); } _getBoundingBox(name) { const box = this._getInheritableProperty(name, true); if (Array.isArray(box) && box.length === 4) { if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { return box; } (0, _util.warn)(`Empty /${name} entry.`); } return null; } get mediaBox() { return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); } get cropBox() { return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); } get userUnit() { let obj = this.pageDict.get("UserUnit"); if (!(0, _util.isNum)(obj) || obj <= 0) { obj = DEFAULT_USER_UNIT; } return (0, _util.shadow)(this, "userUnit", obj); } get view() { const { cropBox, mediaBox } = this; let view; if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) { view = mediaBox; } else { const box = _util.Util.intersect(cropBox, mediaBox); if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { view = box; } else { (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); } } return (0, _util.shadow)(this, "view", view || mediaBox); } get rotate() { let rotate = this._getInheritableProperty("Rotate") || 0; if (rotate % 90 !== 0) { rotate = 0; } else if (rotate >= 360) { rotate = rotate % 360; } else if (rotate < 0) { rotate = (rotate % 360 + 360) % 360; } return (0, _util.shadow)(this, "rotate", rotate); } getContentStream() { const content = this.content; let stream; if (Array.isArray(content)) { const xref = this.xref; const streams = []; for (const subStream of content) { streams.push(xref.fetchIfRef(subStream)); } stream = new _stream.StreamsSequenceStream(streams); } else if ((0, _primitives.isStream)(content)) { stream = content; } else { stream = new _stream.NullStream(); } return stream; } save(handler, task, annotationStorage) { const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); return this._parsedAnnotations.then(function (annotations) { const newRefsPromises = []; for (const annotation of annotations) { if (!isAnnotationRenderable(annotation, "print")) { continue; } newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) { (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); return null; })); } return Promise.all(newRefsPromises); }); } loadResources(keys) { if (!this.resourcesPromise) { this.resourcesPromise = this.pdfManager.ensure(this, "resources"); } return this.resourcesPromise.then(() => { const objectLoader = new _obj.ObjectLoader(this.resources, keys, this.xref); return objectLoader.load(); }); } getOperatorList({ handler, sink, task, intent, renderInteractiveForms, annotationStorage }) { const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream"); const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]); const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); const pageListPromise = dataPromises.then(([contentStream]) => { const opList = new _operator_list.OperatorList(intent, sink); handler.send("StartRenderPage", { transparency: partialEvaluator.hasBlendModes(this.resources), pageIndex: this.pageIndex, intent }); return partialEvaluator.getOperatorList({ stream: contentStream, task, resources: this.resources, operatorList: opList }).then(function () { return opList; }); }); return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) { if (annotations.length === 0) { pageOpList.flush(true); return { length: pageOpList.totalLength }; } const opListPromises = []; for (const annotation of annotations) { if (isAnnotationRenderable(annotation, intent)) { opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms, annotationStorage).catch(function (reason) { (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); return null; })); } } return Promise.all(opListPromises).then(function (opLists) { pageOpList.addOp(_util.OPS.beginAnnotations, []); for (const opList of opLists) { pageOpList.addOpList(opList); } pageOpList.addOp(_util.OPS.endAnnotations, []); pageOpList.flush(true); return { length: pageOpList.totalLength }; }); }); } extractTextContent({ handler, task, normalizeWhitespace, sink, combineTextItems }) { const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream"); const resourcesPromise = this.loadResources(["ExtGState", "XObject", "Font"]); const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); return dataPromises.then(([contentStream]) => { const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); return partialEvaluator.getTextContent({ stream: contentStream, task, resources: this.resources, normalizeWhitespace, combineTextItems, sink }); }); } getAnnotationsData(intent) { return this._parsedAnnotations.then(function (annotations) { const annotationsData = []; for (let i = 0, ii = annotations.length; i < ii; i++) { if (!intent || isAnnotationRenderable(annotations[i], intent)) { annotationsData.push(annotations[i].data); } } return annotationsData; }); } get annotations() { return (0, _util.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []); } get _parsedAnnotations() { const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => { const annotationPromises = []; for (const annotationRef of this.annotations) { annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory).catch(function (reason) { (0, _util.warn)(`_parsedAnnotations: "${reason}".`); return null; })); } return Promise.all(annotationPromises).then(function (annotations) { return annotations.filter(annotation => !!annotation); }); }); return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations); } } exports.Page = Page; const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); const FINGERPRINT_FIRST_BYTES = 1024; const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.[0-9]$/; function find(stream, signature, limit = 1024, backwards = false) { const signatureLength = signature.length; const scanBytes = stream.peekBytes(limit); const scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { return false; } if (backwards) { const signatureEnd = signatureLength - 1; let pos = scanBytes.length - 1; while (pos >= signatureEnd) { let j = 0; while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { j++; } if (j >= signatureLength) { stream.pos += pos - signatureEnd; return true; } pos--; } } else { let pos = 0; while (pos <= scanLength) { let j = 0; while (j < signatureLength && scanBytes[pos + j] === signature[j]) { j++; } if (j >= signatureLength) { stream.pos += pos; return true; } pos++; } } return false; } class PDFDocument { constructor(pdfManager, arg) { let stream; if ((0, _primitives.isStream)(arg)) { stream = arg; } else if ((0, _util.isArrayBuffer)(arg)) { stream = new _stream.Stream(arg); } else { throw new Error("PDFDocument: Unknown argument type"); } if (stream.length <= 0) { throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); } this.pdfManager = pdfManager; this.stream = stream; this.xref = new _obj.XRef(stream, pdfManager); this._pagePromises = []; this._version = null; const idCounters = { font: 0 }; this._globalIdFactory = class { static getDocId() { return `g_${pdfManager.docId}`; } static createFontId() { return `f${++idCounters.font}`; } static createObjId() { (0, _util.unreachable)("Abstract method `createObjId` called."); } }; } parse(recoveryMode) { this.xref.parse(recoveryMode); this.catalog = new _obj.Catalog(this.pdfManager, this.xref); if (this.catalog.version) { this._version = this.catalog.version; } } get linearization() { let linearization = null; try { linearization = _parser.Linearization.create(this.stream); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)(err); } return (0, _util.shadow)(this, "linearization", linearization); } get startXRef() { const stream = this.stream; let startXRef = 0; if (this.linearization) { stream.reset(); if (find(stream, ENDOBJ_SIGNATURE)) { startXRef = stream.pos + 6 - stream.start; } } else { const step = 1024; const startXRefLength = STARTXREF_SIGNATURE.length; let found = false, pos = stream.end; while (!found && pos > 0) { pos -= step - startXRefLength; if (pos < 0) { pos = 0; } stream.pos = pos; found = find(stream, STARTXREF_SIGNATURE, step, true); } if (found) { stream.skip(9); let ch; do { ch = stream.getByte(); } while ((0, _core_utils.isWhiteSpace)(ch)); let str = ""; while (ch >= 0x20 && ch <= 0x39) { str += String.fromCharCode(ch); ch = stream.getByte(); } startXRef = parseInt(str, 10); if (isNaN(startXRef)) { startXRef = 0; } } } return (0, _util.shadow)(this, "startXRef", startXRef); } checkHeader() { const stream = this.stream; stream.reset(); if (!find(stream, PDF_HEADER_SIGNATURE)) { return; } stream.moveStart(); const MAX_PDF_VERSION_LENGTH = 12; let version = "", ch; while ((ch = stream.getByte()) > 0x20) { if (version.length >= MAX_PDF_VERSION_LENGTH) { break; } version += String.fromCharCode(ch); } if (!this._version) { this._version = version.substring(5); } } parseStartXRef() { this.xref.setStartXRef(this.startXRef); } get numPages() { const linearization = this.linearization; const num = linearization ? linearization.numPages : this.catalog.numPages; return (0, _util.shadow)(this, "numPages", num); } _hasOnlyDocumentSignatures(fields, recursionDepth = 0) { const RECURSION_LIMIT = 10; return fields.every(field => { field = this.xref.fetchIfRef(field); if (field.has("Kids")) { if (++recursionDepth > RECURSION_LIMIT) { (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); return false; } return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); } const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); const rectangle = field.get("Rect"); const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0); return isSignature && isInvisible; }); } get formInfo() { const formInfo = { hasAcroForm: false, hasXfa: false }; const acroForm = this.catalog.acroForm; if (!acroForm) { return (0, _util.shadow)(this, "formInfo", formInfo); } try { const xfa = acroForm.get("XFA"); const hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty; formInfo.hasXfa = hasXfa; const fields = acroForm.get("Fields"); const hasFields = Array.isArray(fields) && fields.length > 0; const sigFlags = acroForm.get("SigFlags"); const hasOnlyDocumentSignatures = !!(sigFlags & 0x1) && this._hasOnlyDocumentSignatures(fields); formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch form information."); } return (0, _util.shadow)(this, "formInfo", formInfo); } get documentInfo() { const DocumentInfoValidators = { Title: _util.isString, Author: _util.isString, Subject: _util.isString, Keywords: _util.isString, Creator: _util.isString, Producer: _util.isString, CreationDate: _util.isString, ModDate: _util.isString, Trapped: _primitives.isName }; let version = this._version; if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) { (0, _util.warn)(`Invalid PDF header version number: ${version}`); version = null; } const docInfo = { PDFFormatVersion: version, IsLinearized: !!this.linearization, IsAcroFormPresent: this.formInfo.hasAcroForm, IsXFAPresent: this.formInfo.hasXfa, IsCollectionPresent: !!this.catalog.collection }; let infoDict; try { infoDict = this.xref.trailer.get("Info"); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)("The document information dictionary is invalid."); } if ((0, _primitives.isDict)(infoDict)) { for (const key of infoDict.getKeys()) { const value = infoDict.get(key); if (DocumentInfoValidators[key]) { if (DocumentInfoValidators[key](value)) { docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value); } else { (0, _util.info)(`Bad value in document info for "${key}".`); } } else if (typeof key === "string") { let customValue; if ((0, _util.isString)(value)) { customValue = (0, _util.stringToPDFString)(value); } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) { customValue = value; } else { (0, _util.info)(`Unsupported value in document info for (custom) "${key}".`); continue; } if (!docInfo.Custom) { docInfo.Custom = Object.create(null); } docInfo.Custom[key] = customValue; } } } return (0, _util.shadow)(this, "documentInfo", docInfo); } get fingerprint() { let hash; const idArray = this.xref.trailer.get("ID"); if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) { hash = (0, _util.stringToBytes)(idArray[0]); } else { hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); } const fingerprintBuf = []; for (let i = 0, ii = hash.length; i < ii; i++) { const hex = hash[i].toString(16); fingerprintBuf.push(hex.padStart(2, "0")); } return (0, _util.shadow)(this, "fingerprint", fingerprintBuf.join("")); } _getLinearizationPage(pageIndex) { const { catalog, linearization } = this; const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); return this.xref.fetchAsync(ref).then(obj => { if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) { if (ref && !catalog.pageKidsCountCache.has(ref)) { catalog.pageKidsCountCache.put(ref, 1); } return [obj, ref]; } throw new _util.FormatError("The Linearization dictionary doesn't point " + "to a valid Page dictionary."); }).catch(reason => { (0, _util.info)(reason); return catalog.getPageDict(pageIndex); }); } getPage(pageIndex) { if (this._pagePromises[pageIndex] !== undefined) { return this._pagePromises[pageIndex]; } const { catalog, linearization } = this; const promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex); return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => { return new Page({ pdfManager: this.pdfManager, xref: this.xref, pageIndex, pageDict, ref, globalIdFactory: this._globalIdFactory, fontCache: catalog.fontCache, builtInCMapCache: catalog.builtInCMapCache, globalImageCache: catalog.globalImageCache }); }); } checkFirstPage() { return this.getPage(0).catch(async reason => { if (reason instanceof _core_utils.XRefEntryException) { this._pagePromises.length = 0; await this.cleanup(); throw new _core_utils.XRefParseException(); } }); } fontFallback(id, handler) { return this.catalog.fontFallback(id, handler); } async cleanup(manuallyTriggered = false) { return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)(); } } exports.PDFDocument = PDFDocument; /***/ }), /* 10 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _parser = __w_pdfjs_require__(11); var _core_utils = __w_pdfjs_require__(8); var _crypto = __w_pdfjs_require__(22); var _colorspace = __w_pdfjs_require__(23); var _image_utils = __w_pdfjs_require__(24); function fetchDestination(dest) { return (0, _primitives.isDict)(dest) ? dest.get("D") : dest; } class Catalog { constructor(pdfManager, xref) { this.pdfManager = pdfManager; this.xref = xref; this._catDict = xref.getCatalogObj(); if (!(0, _primitives.isDict)(this._catDict)) { throw new _util.FormatError("Catalog object is not a dictionary."); } this.fontCache = new _primitives.RefSetCache(); this.builtInCMapCache = new Map(); this.globalImageCache = new _image_utils.GlobalImageCache(); this.pageKidsCountCache = new _primitives.RefSetCache(); } get version() { const version = this._catDict.get("Version"); if (!(0, _primitives.isName)(version)) { return (0, _util.shadow)(this, "version", null); } return (0, _util.shadow)(this, "version", version.name); } get collection() { let collection = null; try { const obj = this._catDict.get("Collection"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { collection = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); } return (0, _util.shadow)(this, "collection", collection); } get acroForm() { let acroForm = null; try { const obj = this._catDict.get("AcroForm"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { acroForm = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); } return (0, _util.shadow)(this, "acroForm", acroForm); } get metadata() { const streamRef = this._catDict.getRaw("Metadata"); if (!(0, _primitives.isRef)(streamRef)) { return (0, _util.shadow)(this, "metadata", null); } const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); const stream = this.xref.fetch(streamRef, suppressEncryption); let metadata; if (stream && (0, _primitives.isDict)(stream.dict)) { const type = stream.dict.get("Type"); const subtype = stream.dict.get("Subtype"); if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { try { metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes())); } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } (0, _util.info)("Skipping invalid metadata."); } } } return (0, _util.shadow)(this, "metadata", metadata); } get toplevelPagesDict() { const pagesObj = this._catDict.get("Pages"); if (!(0, _primitives.isDict)(pagesObj)) { throw new _util.FormatError("Invalid top-level pages dictionary."); } return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); } get documentOutline() { let obj = null; try { obj = this._readDocumentOutline(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read document outline."); } return (0, _util.shadow)(this, "documentOutline", obj); } _readDocumentOutline() { let obj = this._catDict.get("Outlines"); if (!(0, _primitives.isDict)(obj)) { return null; } obj = obj.getRaw("First"); if (!(0, _primitives.isRef)(obj)) { return null; } const root = { items: [] }; const queue = [{ obj, parent: root }]; const processed = new _primitives.RefSet(); processed.put(obj); const xref = this.xref, blackColor = new Uint8ClampedArray(3); while (queue.length > 0) { const i = queue.shift(); const outlineDict = xref.fetchIfRef(i.obj); if (outlineDict === null) { continue; } if (!outlineDict.has("Title")) { throw new _util.FormatError("Invalid outline item encountered."); } const data = { url: null, dest: null }; Catalog.parseDestDictionary({ destDict: outlineDict, resultObj: data, docBaseUrl: this.pdfManager.docBaseUrl }); const title = outlineDict.get("Title"); const flags = outlineDict.get("F") || 0; const color = outlineDict.getArray("C"); const count = outlineDict.get("Count"); let rgbColor = blackColor; if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); } const outlineItem = { dest: data.dest, url: data.url, unsafeUrl: data.unsafeUrl, newWindow: data.newWindow, title: (0, _util.stringToPDFString)(title), color: rgbColor, count: Number.isInteger(count) ? count : undefined, bold: !!(flags & 2), italic: !!(flags & 1), items: [] }; i.parent.items.push(outlineItem); obj = outlineDict.getRaw("First"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj, parent: outlineItem }); processed.put(obj); } obj = outlineDict.getRaw("Next"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj, parent: i.parent }); processed.put(obj); } } return root.items.length > 0 ? root.items : null; } get permissions() { let permissions = null; try { permissions = this._readPermissions(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read permissions."); } return (0, _util.shadow)(this, "permissions", permissions); } _readPermissions() { const encrypt = this.xref.trailer.get("Encrypt"); if (!(0, _primitives.isDict)(encrypt)) { return null; } let flags = encrypt.get("P"); if (!(0, _util.isNum)(flags)) { return null; } flags += 2 ** 32; const permissions = []; for (const key in _util.PermissionFlag) { const value = _util.PermissionFlag[key]; if (flags & value) { permissions.push(value); } } return permissions; } get optionalContentConfig() { let config = null; try { const properties = this._catDict.get("OCProperties"); if (!properties) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const defaultConfig = properties.get("D"); if (!defaultConfig) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const groupsData = properties.get("OCGs"); if (!Array.isArray(groupsData)) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const groups = []; const groupRefs = []; for (const groupRef of groupsData) { if (!(0, _primitives.isRef)(groupRef)) { continue; } groupRefs.push(groupRef); const group = this.xref.fetchIfRef(groupRef); groups.push({ id: groupRef.toString(), name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null, intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null }); } config = this._readOptionalContentConfig(defaultConfig, groupRefs); config.groups = groups; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`Unable to read optional content config: ${ex}`); } return (0, _util.shadow)(this, "optionalContentConfig", config); } _readOptionalContentConfig(config, contentGroupRefs) { function parseOnOff(refs) { const onParsed = []; if (Array.isArray(refs)) { for (const value of refs) { if (!(0, _primitives.isRef)(value)) { continue; } if (contentGroupRefs.includes(value)) { onParsed.push(value.toString()); } } } return onParsed; } function parseOrder(refs, nestedLevels = 0) { if (!Array.isArray(refs)) { return null; } const order = []; for (const value of refs) { if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) { parsedOrderRefs.put(value); order.push(value.toString()); continue; } const nestedOrder = parseNestedOrder(value, nestedLevels); if (nestedOrder) { order.push(nestedOrder); } } if (nestedLevels > 0) { return order; } const hiddenGroups = []; for (const groupRef of contentGroupRefs) { if (parsedOrderRefs.has(groupRef)) { continue; } hiddenGroups.push(groupRef.toString()); } if (hiddenGroups.length) { order.push({ name: null, order: hiddenGroups }); } return order; } function parseNestedOrder(ref, nestedLevels) { if (++nestedLevels > MAX_NESTED_LEVELS) { (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); return null; } const value = xref.fetchIfRef(ref); if (!Array.isArray(value)) { return null; } const nestedName = xref.fetchIfRef(value[0]); if (typeof nestedName !== "string") { return null; } const nestedOrder = parseOrder(value.slice(1), nestedLevels); if (!nestedOrder || !nestedOrder.length) { return null; } return { name: (0, _util.stringToPDFString)(nestedName), order: nestedOrder }; } const xref = this.xref, parsedOrderRefs = new _primitives.RefSet(), MAX_NESTED_LEVELS = 10; return { name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null, creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null, baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null, on: parseOnOff(config.get("ON")), off: parseOnOff(config.get("OFF")), order: parseOrder(config.get("Order")), groups: null }; } get numPages() { const obj = this.toplevelPagesDict.get("Count"); if (!Number.isInteger(obj)) { throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); } return (0, _util.shadow)(this, "numPages", obj); } get destinations() { const obj = this._readDests(), dests = Object.create(null); if (obj instanceof NameTree) { const names = obj.getAll(); for (const name in names) { dests[name] = fetchDestination(names[name]); } } else if (obj instanceof _primitives.Dict) { obj.forEach(function (key, value) { if (value) { dests[key] = fetchDestination(value); } }); } return (0, _util.shadow)(this, "destinations", dests); } getDestination(destinationId) { const obj = this._readDests(); if (obj instanceof NameTree || obj instanceof _primitives.Dict) { return fetchDestination(obj.get(destinationId) || null); } return null; } _readDests() { const obj = this._catDict.get("Names"); if (obj && obj.has("Dests")) { return new NameTree(obj.getRaw("Dests"), this.xref); } else if (this._catDict.has("Dests")) { return this._catDict.get("Dests"); } return undefined; } get pageLabels() { let obj = null; try { obj = this._readPageLabels(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read page labels."); } return (0, _util.shadow)(this, "pageLabels", obj); } _readPageLabels() { const obj = this._catDict.getRaw("PageLabels"); if (!obj) { return null; } const pageLabels = new Array(this.numPages); let style = null, prefix = ""; const numberTree = new NumberTree(obj, this.xref); const nums = numberTree.getAll(); let currentLabel = "", currentIndex = 1; for (let i = 0, ii = this.numPages; i < ii; i++) { if (i in nums) { const labelDict = nums[i]; if (!(0, _primitives.isDict)(labelDict)) { throw new _util.FormatError("PageLabel is not a dictionary."); } if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { throw new _util.FormatError("Invalid type in PageLabel dictionary."); } if (labelDict.has("S")) { const s = labelDict.get("S"); if (!(0, _primitives.isName)(s)) { throw new _util.FormatError("Invalid style in PageLabel dictionary."); } style = s.name; } else { style = null; } if (labelDict.has("P")) { const p = labelDict.get("P"); if (!(0, _util.isString)(p)) { throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); } prefix = (0, _util.stringToPDFString)(p); } else { prefix = ""; } if (labelDict.has("St")) { const st = labelDict.get("St"); if (!(Number.isInteger(st) && st >= 1)) { throw new _util.FormatError("Invalid start in PageLabel dictionary."); } currentIndex = st; } else { currentIndex = 1; } } switch (style) { case "D": currentLabel = currentIndex; break; case "R": case "r": currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); break; case "A": case "a": const LIMIT = 26; const A_UPPER_CASE = 0x41, A_LOWER_CASE = 0x61; const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; const letterIndex = currentIndex - 1; const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); const charBuf = []; for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { charBuf.push(character); } currentLabel = charBuf.join(""); break; default: if (style) { throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); } currentLabel = ""; } pageLabels[i] = prefix + currentLabel; currentIndex++; } return pageLabels; } get pageLayout() { const obj = this._catDict.get("PageLayout"); let pageLayout = ""; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "SinglePage": case "OneColumn": case "TwoColumnLeft": case "TwoColumnRight": case "TwoPageLeft": case "TwoPageRight": pageLayout = obj.name; } } return (0, _util.shadow)(this, "pageLayout", pageLayout); } get pageMode() { const obj = this._catDict.get("PageMode"); let pageMode = "UseNone"; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "FullScreen": case "UseOC": case "UseAttachments": pageMode = obj.name; } } return (0, _util.shadow)(this, "pageMode", pageMode); } get viewerPreferences() { const ViewerPreferencesValidators = { HideToolbar: _util.isBool, HideMenubar: _util.isBool, HideWindowUI: _util.isBool, FitWindow: _util.isBool, CenterWindow: _util.isBool, DisplayDocTitle: _util.isBool, NonFullScreenPageMode: _primitives.isName, Direction: _primitives.isName, ViewArea: _primitives.isName, ViewClip: _primitives.isName, PrintArea: _primitives.isName, PrintClip: _primitives.isName, PrintScaling: _primitives.isName, Duplex: _primitives.isName, PickTrayByPDFSize: _util.isBool, PrintPageRange: Array.isArray, NumCopies: Number.isInteger }; const obj = this._catDict.get("ViewerPreferences"); let prefs = null; if ((0, _primitives.isDict)(obj)) { for (const key in ViewerPreferencesValidators) { if (!obj.has(key)) { continue; } const value = obj.get(key); if (!ViewerPreferencesValidators[key](value)) { (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); continue; } let prefValue; switch (key) { case "NonFullScreenPageMode": switch (value.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "UseOC": prefValue = value.name; break; default: prefValue = "UseNone"; } break; case "Direction": switch (value.name) { case "L2R": case "R2L": prefValue = value.name; break; default: prefValue = "L2R"; } break; case "ViewArea": case "ViewClip": case "PrintArea": case "PrintClip": switch (value.name) { case "MediaBox": case "CropBox": case "BleedBox": case "TrimBox": case "ArtBox": prefValue = value.name; break; default: prefValue = "CropBox"; } break; case "PrintScaling": switch (value.name) { case "None": case "AppDefault": prefValue = value.name; break; default: prefValue = "AppDefault"; } break; case "Duplex": switch (value.name) { case "Simplex": case "DuplexFlipShortEdge": case "DuplexFlipLongEdge": prefValue = value.name; break; default: prefValue = "None"; } break; case "PrintPageRange": const length = value.length; if (length % 2 !== 0) { break; } const isValid = value.every((page, i, arr) => { return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; }); if (isValid) { prefValue = value; } break; case "NumCopies": if (value > 0) { prefValue = value; } break; default: if (typeof value !== "boolean") { throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`); } prefValue = value; } if (prefValue !== undefined) { if (!prefs) { prefs = Object.create(null); } prefs[key] = prefValue; } else { (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); } } } return (0, _util.shadow)(this, "viewerPreferences", prefs); } get openAction() { const obj = this._catDict.get("OpenAction"); let openAction = null; if ((0, _primitives.isDict)(obj)) { const destDict = new _primitives.Dict(this.xref); destDict.set("A", obj); const resultObj = { url: null, dest: null, action: null }; Catalog.parseDestDictionary({ destDict, resultObj }); if (Array.isArray(resultObj.dest)) { if (!openAction) { openAction = Object.create(null); } openAction.dest = resultObj.dest; } else if (resultObj.action) { if (!openAction) { openAction = Object.create(null); } openAction.action = resultObj.action; } } else if (Array.isArray(obj)) { if (!openAction) { openAction = Object.create(null); } openAction.dest = obj; } return (0, _util.shadow)(this, "openAction", openAction); } get attachments() { const obj = this._catDict.get("Names"); let attachments = null; if (obj && obj.has("EmbeddedFiles")) { const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref); const names = nameTree.getAll(); for (const name in names) { const fs = new FileSpec(names[name], this.xref); if (!attachments) { attachments = Object.create(null); } attachments[(0, _util.stringToPDFString)(name)] = fs.serializable; } } return (0, _util.shadow)(this, "attachments", attachments); } get javaScript() { const obj = this._catDict.get("Names"); let javaScript = null; function appendIfJavaScriptDict(jsDict) { const type = jsDict.get("S"); if (!(0, _primitives.isName)(type, "JavaScript")) { return; } let js = jsDict.get("JS"); if ((0, _primitives.isStream)(js)) { js = (0, _util.bytesToString)(js.getBytes()); } else if (!(0, _util.isString)(js)) { return; } if (!javaScript) { javaScript = []; } javaScript.push((0, _util.stringToPDFString)(js)); } if (obj && obj.has("JavaScript")) { const nameTree = new NameTree(obj.getRaw("JavaScript"), this.xref); const names = nameTree.getAll(); for (const name in names) { const jsDict = names[name]; if ((0, _primitives.isDict)(jsDict)) { appendIfJavaScriptDict(jsDict); } } } const openAction = this._catDict.get("OpenAction"); if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) { appendIfJavaScriptDict(openAction); } return (0, _util.shadow)(this, "javaScript", javaScript); } fontFallback(id, handler) { const promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(translatedFonts => { for (const translatedFont of translatedFonts) { if (translatedFont.loadedName === id) { translatedFont.fallback(handler); return; } } }); } cleanup(manuallyTriggered = false) { (0, _primitives.clearPrimitiveCaches)(); this.globalImageCache.clear(manuallyTriggered); this.pageKidsCountCache.clear(); const promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(translatedFonts => { for (const { dict } of translatedFonts) { delete dict.translated; } this.fontCache.clear(); this.builtInCMapCache.clear(); }); } getPageDict(pageIndex) { const capability = (0, _util.createPromiseCapability)(); const nodesToVisit = [this._catDict.getRaw("Pages")]; const visitedNodes = new _primitives.RefSet(); const xref = this.xref, pageKidsCountCache = this.pageKidsCountCache; let count, currentPageIndex = 0; function next() { while (nodesToVisit.length) { const currentNode = nodesToVisit.pop(); if ((0, _primitives.isRef)(currentNode)) { count = pageKidsCountCache.get(currentNode); if (count > 0 && currentPageIndex + count < pageIndex) { currentPageIndex += count; continue; } if (visitedNodes.has(currentNode)) { capability.reject(new _util.FormatError("Pages tree contains circular reference.")); return; } visitedNodes.put(currentNode); xref.fetchAsync(currentNode).then(function (obj) { if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) { if (pageIndex === currentPageIndex) { if (currentNode && !pageKidsCountCache.has(currentNode)) { pageKidsCountCache.put(currentNode, 1); } capability.resolve([obj, currentNode]); } else { currentPageIndex++; next(); } return; } nodesToVisit.push(obj); next(); }, capability.reject); return; } if (!(0, _primitives.isDict)(currentNode)) { capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); return; } count = currentNode.get("Count"); if (Number.isInteger(count) && count >= 0) { const objId = currentNode.objId; if (objId && !pageKidsCountCache.has(objId)) { pageKidsCountCache.put(objId, count); } if (currentPageIndex + count <= pageIndex) { currentPageIndex += count; continue; } } const kids = currentNode.get("Kids"); if (!Array.isArray(kids)) { if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) { if (currentPageIndex === pageIndex) { capability.resolve([currentNode, null]); return; } currentPageIndex++; continue; } capability.reject(new _util.FormatError("Page dictionary kids object is not an array.")); return; } for (let last = kids.length - 1; last >= 0; last--) { nodesToVisit.push(kids[last]); } } capability.reject(new Error(`Page index ${pageIndex} not found.`)); } next(); return capability.promise; } getPageIndex(pageRef) { const xref = this.xref; function pagesBeforeRef(kidRef) { let total = 0, parentRef; return xref.fetchAsync(kidRef).then(function (node) { if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) { throw new _util.FormatError("The reference does not point to a /Page dictionary."); } if (!node) { return null; } if (!(0, _primitives.isDict)(node)) { throw new _util.FormatError("Node must be a dictionary."); } parentRef = node.getRaw("Parent"); return node.getAsync("Parent"); }).then(function (parent) { if (!parent) { return null; } if (!(0, _primitives.isDict)(parent)) { throw new _util.FormatError("Parent must be a dictionary."); } return parent.getAsync("Kids"); }).then(function (kids) { if (!kids) { return null; } const kidPromises = []; let found = false; for (let i = 0, ii = kids.length; i < ii; i++) { const kid = kids[i]; if (!(0, _primitives.isRef)(kid)) { throw new _util.FormatError("Kid must be a reference."); } if ((0, _primitives.isRefsEqual)(kid, kidRef)) { found = true; break; } kidPromises.push(xref.fetchAsync(kid).then(function (obj) { if (!(0, _primitives.isDict)(obj)) { throw new _util.FormatError("Kid node must be a dictionary."); } if (obj.has("Count")) { total += obj.get("Count"); } else { total++; } })); } if (!found) { throw new _util.FormatError("Kid reference not found in parent's kids."); } return Promise.all(kidPromises).then(function () { return [total, parentRef]; }); }); } let total = 0; function next(ref) { return pagesBeforeRef(ref).then(function (args) { if (!args) { return total; } const [count, parentRef] = args; total += count; return next(parentRef); }); } return next(pageRef); } static parseDestDictionary(params) { function addDefaultProtocolToUrl(url) { return url.startsWith("www.") ? `http://${url}` : url; } function tryConvertUrlEncoding(url) { try { return (0, _util.stringToUTF8String)(url); } catch (e) { return url; } } const destDict = params.destDict; if (!(0, _primitives.isDict)(destDict)) { (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); return; } const resultObj = params.resultObj; if (typeof resultObj !== "object") { (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); return; } const docBaseUrl = params.docBaseUrl || null; let action = destDict.get("A"), url, dest; if (!(0, _primitives.isDict)(action) && destDict.has("Dest")) { action = destDict.get("Dest"); } if ((0, _primitives.isDict)(action)) { const actionType = action.get("S"); if (!(0, _primitives.isName)(actionType)) { (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); return; } const actionName = actionType.name; switch (actionName) { case "URI": url = action.get("URI"); if ((0, _primitives.isName)(url)) { url = "/" + url.name; } else if ((0, _util.isString)(url)) { url = addDefaultProtocolToUrl(url); } break; case "GoTo": dest = action.get("D"); break; case "Launch": case "GoToR": const urlDict = action.get("F"); if ((0, _primitives.isDict)(urlDict)) { url = urlDict.get("F") || null; } else if ((0, _util.isString)(urlDict)) { url = urlDict; } let remoteDest = action.get("D"); if (remoteDest) { if ((0, _primitives.isName)(remoteDest)) { remoteDest = remoteDest.name; } if ((0, _util.isString)(url)) { const baseUrl = url.split("#")[0]; if ((0, _util.isString)(remoteDest)) { url = baseUrl + "#" + remoteDest; } else if (Array.isArray(remoteDest)) { url = baseUrl + "#" + JSON.stringify(remoteDest); } } } const newWindow = action.get("NewWindow"); if ((0, _util.isBool)(newWindow)) { resultObj.newWindow = newWindow; } break; case "Named": const namedAction = action.get("N"); if ((0, _primitives.isName)(namedAction)) { resultObj.action = namedAction.name; } break; case "JavaScript": const jsAction = action.get("JS"); let js; if ((0, _primitives.isStream)(jsAction)) { js = (0, _util.bytesToString)(jsAction.getBytes()); } else if ((0, _util.isString)(jsAction)) { js = jsAction; } if (js) { const URL_OPEN_METHODS = ["app.launchURL", "window.open"]; const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); const jsUrl = regex.exec((0, _util.stringToPDFString)(js)); if (jsUrl && jsUrl[2]) { url = jsUrl[2]; if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { resultObj.newWindow = true; } break; } } default: (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`); break; } } else if (destDict.has("Dest")) { dest = destDict.get("Dest"); } if ((0, _util.isString)(url)) { url = tryConvertUrlEncoding(url); const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl); if (absoluteUrl) { resultObj.url = absoluteUrl.href; } resultObj.unsafeUrl = url; } if (dest) { if ((0, _primitives.isName)(dest)) { dest = dest.name; } if ((0, _util.isString)(dest) || Array.isArray(dest)) { resultObj.dest = dest; } } } } exports.Catalog = Catalog; var XRef = function XRefClosure() { function XRef(stream, pdfManager) { this.stream = stream; this.pdfManager = pdfManager; this.entries = []; this.xrefstms = Object.create(null); this._cacheMap = new Map(); this.stats = { streamTypes: Object.create(null), fontTypes: Object.create(null) }; this._newRefNum = null; } XRef.prototype = { getNewRef: function XRef_getNewRef() { if (this._newRefNum === null) { this._newRefNum = this.entries.length; } return _primitives.Ref.get(this._newRefNum++, 0); }, resetNewRef: function XRef_resetNewRef() { this._newRefNum = null; }, setStartXRef: function XRef_setStartXRef(startXRef) { this.startXRefQueue = [startXRef]; }, parse: function XRef_parse(recoveryMode) { var trailerDict; if (!recoveryMode) { trailerDict = this.readXRef(); } else { (0, _util.warn)("Indexing all PDF objects"); trailerDict = this.indexObjects(); } trailerDict.assignXref(this); this.trailer = trailerDict; let encrypt; try { encrypt = trailerDict.get("Encrypt"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); } if ((0, _primitives.isDict)(encrypt)) { var ids = trailerDict.get("ID"); var fileId = ids && ids.length ? ids[0] : ""; encrypt.suppressEncryption = true; this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); } let root; try { root = trailerDict.get("Root"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); } if ((0, _primitives.isDict)(root) && root.has("Pages")) { this.root = root; } else { if (!recoveryMode) { throw new _core_utils.XRefParseException(); } throw new _util.FormatError("Invalid root reference"); } }, processXRefTable: function XRef_processXRefTable(parser) { if (!("tableState" in this)) { this.tableState = { entryNum: 0, streamPos: parser.lexer.stream.pos, parserBuf1: parser.buf1, parserBuf2: parser.buf2 }; } var obj = this.readXRefTable(parser); if (!(0, _primitives.isCmd)(obj, "trailer")) { throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); } var dict = parser.getObj(); if (!(0, _primitives.isDict)(dict) && dict.dict) { dict = dict.dict; } if (!(0, _primitives.isDict)(dict)) { throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); } delete this.tableState; return dict; }, readXRefTable: function XRef_readXRefTable(parser) { var stream = parser.lexer.stream; var tableState = this.tableState; stream.pos = tableState.streamPos; parser.buf1 = tableState.parserBuf1; parser.buf2 = tableState.parserBuf2; var obj; while (true) { if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { break; } tableState.firstEntryNum = obj; tableState.entryCount = parser.getObj(); } var first = tableState.firstEntryNum; var count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); } for (var i = tableState.entryNum; i < count; i++) { tableState.streamPos = stream.pos; tableState.entryNum = i; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; var entry = {}; entry.offset = parser.getObj(); entry.gen = parser.getObj(); var type = parser.getObj(); if (type instanceof _primitives.Cmd) { switch (type.cmd) { case "f": entry.free = true; break; case "n": entry.uncompressed = true; break; } } if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`); } if (i === 0 && entry.free && first === 1) { first = 0; } if (!this.entries[i + first]) { this.entries[i + first] = entry; } } tableState.entryNum = 0; tableState.streamPos = stream.pos; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; delete tableState.firstEntryNum; delete tableState.entryCount; } if (this.entries[0] && !this.entries[0].free) { throw new _util.FormatError("Invalid XRef table: unexpected first object"); } return obj; }, processXRefStream: function XRef_processXRefStream(stream) { if (!("streamState" in this)) { var streamParameters = stream.dict; var byteWidths = streamParameters.get("W"); var range = streamParameters.get("Index"); if (!range) { range = [0, streamParameters.get("Size")]; } this.streamState = { entryRanges: range, byteWidths, entryNum: 0, streamPos: stream.pos }; } this.readXRefStream(stream); delete this.streamState; return stream.dict; }, readXRefStream: function XRef_readXRefStream(stream) { var i, j; var streamState = this.streamState; stream.pos = streamState.streamPos; var byteWidths = streamState.byteWidths; var typeFieldWidth = byteWidths[0]; var offsetFieldWidth = byteWidths[1]; var generationFieldWidth = byteWidths[2]; var entryRanges = streamState.entryRanges; while (entryRanges.length > 0) { var first = entryRanges[0]; var n = entryRanges[1]; if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`); } if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`); } for (i = streamState.entryNum; i < n; ++i) { streamState.entryNum = i; streamState.streamPos = stream.pos; var type = 0, offset = 0, generation = 0; for (j = 0; j < typeFieldWidth; ++j) { type = type << 8 | stream.getByte(); } if (typeFieldWidth === 0) { type = 1; } for (j = 0; j < offsetFieldWidth; ++j) { offset = offset << 8 | stream.getByte(); } for (j = 0; j < generationFieldWidth; ++j) { generation = generation << 8 | stream.getByte(); } var entry = {}; entry.offset = offset; entry.gen = generation; switch (type) { case 0: entry.free = true; break; case 1: entry.uncompressed = true; break; case 2: break; default: throw new _util.FormatError(`Invalid XRef entry type: ${type}`); } if (!this.entries[first + i]) { this.entries[first + i] = entry; } } streamState.entryNum = 0; streamState.streamPos = stream.pos; entryRanges.splice(0, 2); } }, indexObjects: function XRef_indexObjects() { var TAB = 0x9, LF = 0xa, CR = 0xd, SPACE = 0x20; var PERCENT = 0x25, LT = 0x3c; function readToken(data, offset) { var token = "", ch = data[offset]; while (ch !== LF && ch !== CR && ch !== LT) { if (++offset >= data.length) { break; } token += String.fromCharCode(ch); ch = data[offset]; } return token; } function skipUntil(data, offset, what) { var length = what.length, dataLength = data.length; var skipped = 0; while (offset < dataLength) { var i = 0; while (i < length && data[offset + i] === what[i]) { ++i; } if (i >= length) { break; } offset++; skipped++; } return skipped; } var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; const endobjRegExp = /\bendobj[\b\s]$/; const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; const CHECK_CONTENT_LENGTH = 25; var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); const objBytes = new Uint8Array([111, 98, 106]); var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; var stream = this.stream; stream.pos = 0; var buffer = stream.getBytes(); var position = stream.start, length = buffer.length; var trailers = [], xrefStms = []; while (position < length) { var ch = buffer[position]; if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { ++position; continue; } if (ch === PERCENT) { do { ++position; if (position >= length) { break; } ch = buffer[position]; } while (ch !== LF && ch !== CR); continue; } var token = readToken(buffer, position); var m; if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { position += skipUntil(buffer, position, trailerBytes); trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else if (m = objRegExp.exec(token)) { const num = m[1] | 0, gen = m[2] | 0; if (!this.entries[num] || this.entries[num].gen === gen) { this.entries[num] = { offset: position - stream.start, gen, uncompressed: true }; } let contentLength, startPos = position + token.length; while (startPos < buffer.length) { const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; contentLength = endPos - position; const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); if (endobjRegExp.test(tokenStr)) { break; } else { const objToken = nestedObjRegExp.exec(tokenStr); if (objToken && objToken[1]) { (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); contentLength -= objToken[1].length; break; } } startPos = endPos; } const content = buffer.subarray(position, position + contentLength); var xrefTagOffset = skipUntil(content, 0, xrefBytes); if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { xrefStms.push(position - stream.start); this.xrefstms[position - stream.start] = 1; } position += contentLength; } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else { position += token.length + 1; } } var i, ii; for (i = 0, ii = xrefStms.length; i < ii; ++i) { this.startXRefQueue.push(xrefStms[i]); this.readXRef(true); } let trailerDict; for (i = 0, ii = trailers.length; i < ii; ++i) { stream.pos = trailers[i]; const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true, recoveryMode: true }); var obj = parser.getObj(); if (!(0, _primitives.isCmd)(obj, "trailer")) { continue; } const dict = parser.getObj(); if (!(0, _primitives.isDict)(dict)) { continue; } let rootDict; try { rootDict = dict.get("Root"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } continue; } if (!(0, _primitives.isDict)(rootDict) || !rootDict.has("Pages")) { continue; } if (dict.has("ID")) { return dict; } trailerDict = dict; } if (trailerDict) { return trailerDict; } throw new _util.InvalidPDFException("Invalid PDF structure."); }, readXRef: function XRef_readXRef(recoveryMode) { var stream = this.stream; const startXRefParsedCache = Object.create(null); try { while (this.startXRefQueue.length) { var startXRef = this.startXRefQueue[0]; if (startXRefParsedCache[startXRef]) { (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); this.startXRefQueue.shift(); continue; } startXRefParsedCache[startXRef] = true; stream.pos = startXRef + stream.start; const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); var obj = parser.getObj(); var dict; if ((0, _primitives.isCmd)(obj, "xref")) { dict = this.processXRefTable(parser); if (!this.topDict) { this.topDict = dict; } obj = dict.get("XRefStm"); if (Number.isInteger(obj)) { var pos = obj; if (!(pos in this.xrefstms)) { this.xrefstms[pos] = 1; this.startXRefQueue.push(pos); } } } else if (Number.isInteger(obj)) { if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) { throw new _util.FormatError("Invalid XRef stream"); } dict = this.processXRefStream(obj); if (!this.topDict) { this.topDict = dict; } if (!dict) { throw new _util.FormatError("Failed to read XRef stream"); } } else { throw new _util.FormatError("Invalid XRef stream header"); } obj = dict.get("Prev"); if (Number.isInteger(obj)) { this.startXRefQueue.push(obj); } else if ((0, _primitives.isRef)(obj)) { this.startXRefQueue.push(obj.num); } this.startXRefQueue.shift(); } return this.topDict; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } (0, _util.info)("(while reading XRef): " + e); } if (recoveryMode) { return undefined; } throw new _core_utils.XRefParseException(); }, getEntry: function XRef_getEntry(i) { var xrefEntry = this.entries[i]; if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { return xrefEntry; } return null; }, fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) { if (obj instanceof _primitives.Ref) { return this.fetch(obj, suppressEncryption); } return obj; }, fetch: function XRef_fetch(ref, suppressEncryption) { if (!(ref instanceof _primitives.Ref)) { throw new Error("ref object is not a reference"); } const num = ref.num; const cacheEntry = this._cacheMap.get(num); if (cacheEntry !== undefined) { if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { cacheEntry.objId = ref.toString(); } return cacheEntry; } let xrefEntry = this.getEntry(num); if (xrefEntry === null) { this._cacheMap.set(num, xrefEntry); return xrefEntry; } if (xrefEntry.uncompressed) { xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); } else { xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); } if ((0, _primitives.isDict)(xrefEntry)) { xrefEntry.objId = ref.toString(); } else if ((0, _primitives.isStream)(xrefEntry)) { xrefEntry.dict.objId = ref.toString(); } return xrefEntry; }, fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { var gen = ref.gen; var num = ref.num; if (xrefEntry.gen !== gen) { throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`); } var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); var obj1 = parser.getObj(); var obj2 = parser.getObj(); var obj3 = parser.getObj(); if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); } if (obj3.cmd !== "obj") { if (obj3.cmd.startsWith("obj")) { num = parseInt(obj3.cmd.substring(3), 10); if (!Number.isNaN(num)) { return num; } } throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); } if (this.encrypt && !suppressEncryption) { xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); } else { xrefEntry = parser.getObj(); } if (!(0, _primitives.isStream)(xrefEntry)) { this._cacheMap.set(num, xrefEntry); } return xrefEntry; }, fetchCompressed(ref, xrefEntry, suppressEncryption = false) { const tableOffset = xrefEntry.offset; const stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError("bad ObjStm stream"); } const first = stream.dict.get("First"); const n = stream.dict.get("N"); if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); } const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); const nums = new Array(n); for (let i = 0; i < n; ++i) { const num = parser.getObj(); if (!Number.isInteger(num)) { throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`); } const offset = parser.getObj(); if (!Number.isInteger(offset)) { throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`); } nums[i] = num; } const entries = new Array(n); for (let i = 0; i < n; ++i) { const obj = parser.getObj(); entries[i] = obj; if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") { parser.shift(); } if ((0, _primitives.isStream)(obj)) { continue; } const num = nums[i], entry = this.entries[num]; if (entry && entry.offset === tableOffset && entry.gen === i) { this._cacheMap.set(num, obj); } } xrefEntry = entries[xrefEntry.gen]; if (xrefEntry === undefined) { throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`); } return xrefEntry; }, async fetchIfRefAsync(obj, suppressEncryption) { if (obj instanceof _primitives.Ref) { return this.fetchAsync(obj, suppressEncryption); } return obj; }, async fetchAsync(ref, suppressEncryption) { try { return this.fetch(ref, suppressEncryption); } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { throw ex; } await this.pdfManager.requestRange(ex.begin, ex.end); return this.fetchAsync(ref, suppressEncryption); } }, getCatalogObj: function XRef_getCatalogObj() { return this.root; } }; return XRef; }(); exports.XRef = XRef; class NameOrNumberTree { constructor(root, xref, type) { if (this.constructor === NameOrNumberTree) { (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); } this.root = root; this.xref = xref; this._type = type; } getAll() { const dict = Object.create(null); if (!this.root) { return dict; } const xref = this.xref; const processed = new _primitives.RefSet(); processed.put(this.root); const queue = [this.root]; while (queue.length > 0) { const obj = xref.fetchIfRef(queue.shift()); if (!(0, _primitives.isDict)(obj)) { continue; } if (obj.has("Kids")) { const kids = obj.get("Kids"); for (let i = 0, ii = kids.length; i < ii; i++) { const kid = kids[i]; if (processed.has(kid)) { throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); } queue.push(kid); processed.put(kid); } continue; } const entries = obj.get(this._type); if (Array.isArray(entries)) { for (let i = 0, ii = entries.length; i < ii; i += 2) { dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]); } } } return dict; } get(key) { if (!this.root) { return null; } const xref = this.xref; let kidsOrEntries = xref.fetchIfRef(this.root); let loopCount = 0; const MAX_LEVELS = 10; while (kidsOrEntries.has("Kids")) { if (++loopCount > MAX_LEVELS) { (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); return null; } const kids = kidsOrEntries.get("Kids"); if (!Array.isArray(kids)) { return null; } let l = 0, r = kids.length - 1; while (l <= r) { const m = l + r >> 1; const kid = xref.fetchIfRef(kids[m]); const limits = kid.get("Limits"); if (key < xref.fetchIfRef(limits[0])) { r = m - 1; } else if (key > xref.fetchIfRef(limits[1])) { l = m + 1; } else { kidsOrEntries = xref.fetchIfRef(kids[m]); break; } } if (l > r) { return null; } } const entries = kidsOrEntries.get(this._type); if (Array.isArray(entries)) { let l = 0, r = entries.length - 2; while (l <= r) { const tmp = l + r >> 1, m = tmp + (tmp & 1); const currentKey = xref.fetchIfRef(entries[m]); if (key < currentKey) { r = m - 2; } else if (key > currentKey) { l = m + 2; } else { return xref.fetchIfRef(entries[m + 1]); } } (0, _util.info)(`Falling back to an exhaustive search, for key "${key}", ` + `in "${this._type}" tree.`); for (let m = 0, mm = entries.length; m < mm; m += 2) { const currentKey = xref.fetchIfRef(entries[m]); if (currentKey === key) { (0, _util.warn)(`The "${key}" key was found at an incorrect, ` + `i.e. out-of-order, position in "${this._type}" tree.`); return xref.fetchIfRef(entries[m + 1]); } } } return null; } } class NameTree extends NameOrNumberTree { constructor(root, xref) { super(root, xref, "Names"); } } class NumberTree extends NameOrNumberTree { constructor(root, xref) { super(root, xref, "Nums"); } } var FileSpec = function FileSpecClosure() { function FileSpec(root, xref) { if (!root || !(0, _primitives.isDict)(root)) { return; } this.xref = xref; this.root = root; if (root.has("FS")) { this.fs = root.get("FS"); } this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; if (root.has("RF")) { (0, _util.warn)("Related file specifications are not supported"); } this.contentAvailable = true; if (!root.has("EF")) { this.contentAvailable = false; (0, _util.warn)("Non-embedded file specifications are not supported"); } } function pickPlatformItem(dict) { if (dict.has("UF")) { return dict.get("UF"); } else if (dict.has("F")) { return dict.get("F"); } else if (dict.has("Unix")) { return dict.get("Unix"); } else if (dict.has("Mac")) { return dict.get("Mac"); } else if (dict.has("DOS")) { return dict.get("DOS"); } return null; } FileSpec.prototype = { get filename() { if (!this._filename && this.root) { var filename = pickPlatformItem(this.root) || "unnamed"; this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/"); } return this._filename; }, get content() { if (!this.contentAvailable) { return null; } if (!this.contentRef && this.root) { this.contentRef = pickPlatformItem(this.root.get("EF")); } var content = null; if (this.contentRef) { var xref = this.xref; var fileObj = xref.fetchIfRef(this.contentRef); if (fileObj && (0, _primitives.isStream)(fileObj)) { content = fileObj.getBytes(); } else { (0, _util.warn)("Embedded file specification points to non-existing/invalid " + "content"); } } else { (0, _util.warn)("Embedded file specification does not have a content"); } return content; }, get serializable() { return { filename: this.filename, content: this.content }; } }; return FileSpec; }(); exports.FileSpec = FileSpec; const ObjectLoader = function () { function mayHaveChildren(value) { return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value); } function addChildren(node, nodesToVisit) { if (node instanceof _primitives.Dict) { node = node.getRawValues(); } else if ((0, _primitives.isStream)(node)) { node = node.dict.getRawValues(); } else if (!Array.isArray(node)) { return; } for (const rawValue of node) { if (mayHaveChildren(rawValue)) { nodesToVisit.push(rawValue); } } } function ObjectLoader(dict, keys, xref) { this.dict = dict; this.keys = keys; this.xref = xref; this.refSet = null; } ObjectLoader.prototype = { async load() { if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) { return undefined; } const { keys, dict } = this; this.refSet = new _primitives.RefSet(); const nodesToVisit = []; for (let i = 0, ii = keys.length; i < ii; i++) { const rawValue = dict.getRaw(keys[i]); if (rawValue !== undefined) { nodesToVisit.push(rawValue); } } return this._walk(nodesToVisit); }, async _walk(nodesToVisit) { const nodesToRevisit = []; const pendingRequests = []; while (nodesToVisit.length) { let currentNode = nodesToVisit.pop(); if (currentNode instanceof _primitives.Ref) { if (this.refSet.has(currentNode)) { continue; } try { this.refSet.put(currentNode); currentNode = this.xref.fetch(currentNode); } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { throw ex; } nodesToRevisit.push(currentNode); pendingRequests.push({ begin: ex.begin, end: ex.end }); } } if (currentNode && currentNode.getBaseStreams) { const baseStreams = currentNode.getBaseStreams(); let foundMissingData = false; for (let i = 0, ii = baseStreams.length; i < ii; i++) { const stream = baseStreams[i]; if (stream.allChunksLoaded && !stream.allChunksLoaded()) { foundMissingData = true; pendingRequests.push({ begin: stream.start, end: stream.end }); } } if (foundMissingData) { nodesToRevisit.push(currentNode); } } addChildren(currentNode, nodesToVisit); } if (pendingRequests.length) { await this.xref.stream.manager.requestRanges(pendingRequests); for (let i = 0, ii = nodesToRevisit.length; i < ii; i++) { const node = nodesToRevisit[i]; if (node instanceof _primitives.Ref) { this.refSet.remove(node); } } return this._walk(nodesToRevisit); } this.refSet = null; return undefined; } }; return ObjectLoader; }(); exports.ObjectLoader = ObjectLoader; /***/ }), /* 11 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = exports.Linearization = exports.Lexer = void 0; var _stream = __w_pdfjs_require__(12); var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); var _ccitt_stream = __w_pdfjs_require__(13); var _jbig2_stream = __w_pdfjs_require__(15); var _jpeg_stream = __w_pdfjs_require__(18); var _jpx_stream = __w_pdfjs_require__(20); const MAX_LENGTH_TO_CACHE = 1000; const MAX_ADLER32_LENGTH = 5552; function computeAdler32(bytes) { const bytesLength = bytes.length; let a = 1, b = 0; for (let i = 0; i < bytesLength; ++i) { a += bytes[i] & 0xff; b += a; } return b % 65521 << 16 | a % 65521; } class Parser { constructor({ lexer, xref, allowStreams = false, recoveryMode = false }) { this.lexer = lexer; this.xref = xref; this.allowStreams = allowStreams; this.recoveryMode = recoveryMode; this.imageCache = Object.create(null); this.refill(); } refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj(); } shift() { if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { this.buf1 = this.buf2; this.buf2 = null; } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj(); } } tryShift() { try { this.shift(); return true; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } return false; } } getObj(cipherTransform = null) { const buf1 = this.buf1; this.shift(); if (buf1 instanceof _primitives.Cmd) { switch (buf1.cmd) { case "BI": return this.makeInlineImage(cipherTransform); case "[": const array = []; while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) { array.push(this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError("End of file inside array"); } return array; } this.shift(); return array; case "<<": const dict = new _primitives.Dict(this.xref); while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { (0, _util.info)("Malformed dictionary: key must be a name object"); this.shift(); continue; } const key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError("End of file inside dictionary"); } return dict; } if ((0, _primitives.isCmd)(this.buf2, "stream")) { return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; } this.shift(); return dict; default: return buf1; } } if (Number.isInteger(buf1)) { if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { const ref = _primitives.Ref.get(buf1, this.buf1); this.shift(); this.shift(); return ref; } return buf1; } if (typeof buf1 === "string") { if (cipherTransform) { return cipherTransform.decryptString(buf1); } return buf1; } return buf1; } findDefaultInlineStreamEnd(stream) { const E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xa, CR = 0xd, NUL = 0x0; const lexer = this.lexer, startPos = stream.pos, n = 10; let state = 0, ch, maybeEIPos; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else { (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state."); if (ch === SPACE || ch === LF || ch === CR) { maybeEIPos = stream.pos; const followingBytes = stream.peekBytes(n); for (let i = 0, ii = followingBytes.length; i < ii; i++) { ch = followingBytes[i]; if (ch === NUL && followingBytes[i + 1] !== NUL) { continue; } if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { state = 0; break; } } if (state !== 2) { continue; } if (lexer.knownCommands) { const nextObj = lexer.peekObj(); if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) { state = 0; } } else { (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); } if (state === 2) { break; } } else { state = 0; } } } if (ch === -1) { (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); if (maybeEIPos) { (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); stream.skip(-(stream.pos - maybeEIPos)); } } let endOffset = 4; stream.skip(-endOffset); ch = stream.peekByte(); stream.skip(endOffset); if (!(0, _core_utils.isWhiteSpace)(ch)) { endOffset--; } return stream.pos - endOffset - startPos; } findDCTDecodeInlineStreamEnd(stream) { const startPos = stream.pos; let foundEOI = false, b, markerLength; while ((b = stream.getByte()) !== -1) { if (b !== 0xff) { continue; } switch (stream.getByte()) { case 0x00: break; case 0xff: stream.skip(-1); break; case 0xd9: foundEOI = true; break; case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc5: case 0xc6: case 0xc7: case 0xc9: case 0xca: case 0xcb: case 0xcd: case 0xce: case 0xcf: case 0xc4: case 0xcc: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: case 0xfe: markerLength = stream.getUint16(); if (markerLength > 2) { stream.skip(markerLength - 2); } else { stream.skip(-2); } break; } if (foundEOI) { break; } } const length = stream.pos - startPos; if (b === -1) { (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } findASCII85DecodeInlineStreamEnd(stream) { const TILDE = 0x7e, GT = 0x3e; const startPos = stream.pos; let ch; while ((ch = stream.getByte()) !== -1) { if (ch === TILDE) { const tildePos = stream.pos; ch = stream.peekByte(); while ((0, _core_utils.isWhiteSpace)(ch)) { stream.skip(); ch = stream.peekByte(); } if (ch === GT) { stream.skip(); break; } if (stream.pos > tildePos) { const maybeEI = stream.peekBytes(2); if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { break; } } } } const length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } findASCIIHexDecodeInlineStreamEnd(stream) { const GT = 0x3e; const startPos = stream.pos; let ch; while ((ch = stream.getByte()) !== -1) { if (ch === GT) { break; } } const length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } inlineStreamSkipEI(stream) { const E = 0x45, I = 0x49; let state = 0, ch; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else if (state === 2) { break; } } } makeInlineImage(cipherTransform) { const lexer = this.lexer; const stream = lexer.stream; const dict = new _primitives.Dict(this.xref); let dictLength; while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { throw new _util.FormatError("Dictionary key must be a name object"); } const key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if (lexer.beginInlineImagePos !== -1) { dictLength = stream.pos - lexer.beginInlineImagePos; } const filter = dict.get("Filter", "F"); let filterName; if ((0, _primitives.isName)(filter)) { filterName = filter.name; } else if (Array.isArray(filter)) { const filterZero = this.xref.fetchIfRef(filter[0]); if ((0, _primitives.isName)(filterZero)) { filterName = filterZero.name; } } const startPos = stream.pos; let length; if (filterName === "DCTDecode" || filterName === "DCT") { length = this.findDCTDecodeInlineStreamEnd(stream); } else if (filterName === "ASCII85Decode" || filterName === "A85") { length = this.findASCII85DecodeInlineStreamEnd(stream); } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") { length = this.findASCIIHexDecodeInlineStreamEnd(stream); } else { length = this.findDefaultInlineStreamEnd(stream); } let imageStream = stream.makeSubStream(startPos, length, dict); let cacheKey; if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { const imageBytes = imageStream.getBytes(); imageStream.reset(); const initialStreamPos = stream.pos; stream.pos = lexer.beginInlineImagePos; const dictBytes = stream.getBytes(dictLength); stream.pos = initialStreamPos; cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes); const cacheEntry = this.imageCache[cacheKey]; if (cacheEntry !== undefined) { this.buf2 = _primitives.Cmd.get("EI"); this.shift(); cacheEntry.reset(); return cacheEntry; } } if (cipherTransform) { imageStream = cipherTransform.createStream(imageStream, length); } imageStream = this.filter(imageStream, dict, length); imageStream.dict = dict; if (cacheKey !== undefined) { imageStream.cacheKey = `inline_${length}_${cacheKey}`; this.imageCache[cacheKey] = imageStream; } this.buf2 = _primitives.Cmd.get("EI"); this.shift(); return imageStream; } _findStreamLength(startPos, signature) { const { stream } = this.lexer; stream.pos = startPos; const SCAN_BLOCK_LENGTH = 2048; const signatureLength = signature.length; while (stream.pos < stream.end) { const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); const scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { break; } let pos = 0; while (pos < scanLength) { let j = 0; while (j < signatureLength && scanBytes[pos + j] === signature[j]) { j++; } if (j >= signatureLength) { stream.pos += pos; return stream.pos - startPos; } pos++; } stream.pos += scanLength; } return -1; } makeStream(dict, cipherTransform) { const lexer = this.lexer; let stream = lexer.stream; lexer.skipToNextLine(); const startPos = stream.pos - 1; let length = dict.get("Length"); if (!Number.isInteger(length)) { (0, _util.info)(`Bad length "${length}" in stream`); length = 0; } stream.pos = startPos + length; lexer.nextChar(); if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { this.shift(); } else { const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]); let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); if (actualLength < 0) { const MAX_TRUNCATION = 1; for (let i = 1; i <= MAX_TRUNCATION; i++) { const end = ENDSTREAM_SIGNATURE.length - i; const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); if (maybeLength >= 0) { const lastByte = stream.peekBytes(end + 1)[end]; if (!(0, _core_utils.isWhiteSpace)(lastByte)) { break; } (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command."); actualLength = maybeLength; break; } } if (actualLength < 0) { throw new _util.FormatError("Missing endstream command."); } } length = actualLength; lexer.nextChar(); this.shift(); this.shift(); } this.shift(); stream = stream.makeSubStream(startPos, length, dict); if (cipherTransform) { stream = cipherTransform.createStream(stream, length); } stream = this.filter(stream, dict, length); stream.dict = dict; return stream; } filter(stream, dict, length) { let filter = dict.get("Filter", "F"); let params = dict.get("DecodeParms", "DP"); if ((0, _primitives.isName)(filter)) { if (Array.isArray(params)) { (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name."); } return this.makeFilter(stream, filter.name, length, params); } let maybeLength = length; if (Array.isArray(filter)) { const filterArray = filter; const paramsArray = params; for (let i = 0, ii = filterArray.length; i < ii; ++i) { filter = this.xref.fetchIfRef(filterArray[i]); if (!(0, _primitives.isName)(filter)) { throw new _util.FormatError(`Bad filter name "${filter}"`); } params = null; if (Array.isArray(paramsArray) && i in paramsArray) { params = this.xref.fetchIfRef(paramsArray[i]); } stream = this.makeFilter(stream, filter.name, maybeLength, params); maybeLength = null; } } return stream; } makeFilter(stream, name, maybeLength, params) { if (maybeLength === 0) { (0, _util.warn)(`Empty "${name}" stream.`); return new _stream.NullStream(); } try { const xrefStreamStats = this.xref.stats.streamTypes; if (name === "FlateDecode" || name === "Fl") { xrefStreamStats[_util.StreamType.FLATE] = true; if (params) { return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params); } return new _stream.FlateStream(stream, maybeLength); } if (name === "LZWDecode" || name === "LZW") { xrefStreamStats[_util.StreamType.LZW] = true; let earlyChange = 1; if (params) { if (params.has("EarlyChange")) { earlyChange = params.get("EarlyChange"); } return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); } return new _stream.LZWStream(stream, maybeLength, earlyChange); } if (name === "DCTDecode" || name === "DCT") { xrefStreamStats[_util.StreamType.DCT] = true; return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params); } if (name === "JPXDecode" || name === "JPX") { xrefStreamStats[_util.StreamType.JPX] = true; return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params); } if (name === "ASCII85Decode" || name === "A85") { xrefStreamStats[_util.StreamType.A85] = true; return new _stream.Ascii85Stream(stream, maybeLength); } if (name === "ASCIIHexDecode" || name === "AHx") { xrefStreamStats[_util.StreamType.AHX] = true; return new _stream.AsciiHexStream(stream, maybeLength); } if (name === "CCITTFaxDecode" || name === "CCF") { xrefStreamStats[_util.StreamType.CCF] = true; return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); } if (name === "RunLengthDecode" || name === "RL") { xrefStreamStats[_util.StreamType.RLX] = true; return new _stream.RunLengthStream(stream, maybeLength); } if (name === "JBIG2Decode") { xrefStreamStats[_util.StreamType.JBIG] = true; return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params); } (0, _util.warn)(`Filter "${name}" is not supported.`); return stream; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`Invalid stream: "${ex}"`); return new _stream.NullStream(); } } } exports.Parser = Parser; const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; function toHexDigit(ch) { if (ch >= 0x30 && ch <= 0x39) { return ch & 0x0f; } if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { return (ch & 0x0f) + 9; } return -1; } class Lexer { constructor(stream, knownCommands = null) { this.stream = stream; this.nextChar(); this.strBuf = []; this.knownCommands = knownCommands; this._hexStringNumWarn = 0; this.beginInlineImagePos = -1; } nextChar() { return this.currentChar = this.stream.getByte(); } peekChar() { return this.stream.peekByte(); } getNumber() { let ch = this.currentChar; let eNotation = false; let divideBy = 0; let sign = 0; if (ch === 0x2d) { sign = -1; ch = this.nextChar(); if (ch === 0x2d) { ch = this.nextChar(); } } else if (ch === 0x2b) { sign = 1; ch = this.nextChar(); } if (ch === 0x0a || ch === 0x0d) { do { ch = this.nextChar(); } while (ch === 0x0a || ch === 0x0d); } if (ch === 0x2e) { divideBy = 10; ch = this.nextChar(); } if (ch < 0x30 || ch > 0x39) { if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) { (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero."); return 0; } throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`); } sign = sign || 1; let baseValue = ch - 0x30; let powerValue = 0; let powerValueSign = 1; while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39) { const currentDigit = ch - 0x30; if (eNotation) { powerValue = powerValue * 10 + currentDigit; } else { if (divideBy !== 0) { divideBy *= 10; } baseValue = baseValue * 10 + currentDigit; } } else if (ch === 0x2e) { if (divideBy === 0) { divideBy = 1; } else { break; } } else if (ch === 0x2d) { (0, _util.warn)("Badly formatted number: minus sign in the middle"); } else if (ch === 0x45 || ch === 0x65) { ch = this.peekChar(); if (ch === 0x2b || ch === 0x2d) { powerValueSign = ch === 0x2d ? -1 : 1; this.nextChar(); } else if (ch < 0x30 || ch > 0x39) { break; } eNotation = true; } else { break; } } if (divideBy !== 0) { baseValue /= divideBy; } if (eNotation) { baseValue *= 10 ** (powerValueSign * powerValue); } return sign * baseValue; } getString() { let numParen = 1; let done = false; const strBuf = this.strBuf; strBuf.length = 0; let ch = this.nextChar(); while (true) { let charBuffered = false; switch (ch | 0) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x28: ++numParen; strBuf.push("("); break; case 0x29: if (--numParen === 0) { this.nextChar(); done = true; } else { strBuf.push(")"); } break; case 0x5c: ch = this.nextChar(); switch (ch) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x6e: strBuf.push("\n"); break; case 0x72: strBuf.push("\r"); break; case 0x74: strBuf.push("\t"); break; case 0x62: strBuf.push("\b"); break; case 0x66: strBuf.push("\f"); break; case 0x5c: case 0x28: case 0x29: strBuf.push(String.fromCharCode(ch)); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: let x = ch & 0x0f; ch = this.nextChar(); charBuffered = true; if (ch >= 0x30 && ch <= 0x37) { x = (x << 3) + (ch & 0x0f); ch = this.nextChar(); if (ch >= 0x30 && ch <= 0x37) { charBuffered = false; x = (x << 3) + (ch & 0x0f); } } strBuf.push(String.fromCharCode(x)); break; case 0x0d: if (this.peekChar() === 0x0a) { this.nextChar(); } break; case 0x0a: break; default: strBuf.push(String.fromCharCode(ch)); break; } break; default: strBuf.push(String.fromCharCode(ch)); break; } if (done) { break; } if (!charBuffered) { ch = this.nextChar(); } } return strBuf.join(""); } getName() { let ch, previousCh; const strBuf = this.strBuf; strBuf.length = 0; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { if (ch === 0x23) { ch = this.nextChar(); if (specialChars[ch]) { (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); strBuf.push("#"); break; } const x = toHexDigit(ch); if (x !== -1) { previousCh = ch; ch = this.nextChar(); const x2 = toHexDigit(ch); if (x2 === -1) { (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number."); strBuf.push("#", String.fromCharCode(previousCh)); if (specialChars[ch]) { break; } strBuf.push(String.fromCharCode(ch)); continue; } strBuf.push(String.fromCharCode(x << 4 | x2)); } else { strBuf.push("#", String.fromCharCode(ch)); } } else { strBuf.push(String.fromCharCode(ch)); } } if (strBuf.length > 127) { (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`); } return _primitives.Name.get(strBuf.join("")); } _hexStringWarn(ch) { const MAX_HEX_STRING_NUM_WARN = 5; if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { (0, _util.warn)("getHexString - ignoring additional invalid characters."); return; } if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { return; } (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`); } getHexString() { const strBuf = this.strBuf; strBuf.length = 0; let ch = this.currentChar; let isFirstHex = true; let firstDigit, secondDigit; this._hexStringNumWarn = 0; while (true) { if (ch < 0) { (0, _util.warn)("Unterminated hex string"); break; } else if (ch === 0x3e) { this.nextChar(); break; } else if (specialChars[ch] === 1) { ch = this.nextChar(); continue; } else { if (isFirstHex) { firstDigit = toHexDigit(ch); if (firstDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } } else { secondDigit = toHexDigit(ch); if (secondDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); } isFirstHex = !isFirstHex; ch = this.nextChar(); } } return strBuf.join(""); } getObj() { let comment = false; let ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (specialChars[ch] !== 1) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return this.getNumber(); case 0x28: return this.getString(); case 0x2f: return this.getName(); case 0x5b: this.nextChar(); return _primitives.Cmd.get("["); case 0x5d: this.nextChar(); return _primitives.Cmd.get("]"); case 0x3c: ch = this.nextChar(); if (ch === 0x3c) { this.nextChar(); return _primitives.Cmd.get("<<"); } return this.getHexString(); case 0x3e: ch = this.nextChar(); if (ch === 0x3e) { this.nextChar(); return _primitives.Cmd.get(">>"); } return _primitives.Cmd.get(">"); case 0x7b: this.nextChar(); return _primitives.Cmd.get("{"); case 0x7d: this.nextChar(); return _primitives.Cmd.get("}"); case 0x29: this.nextChar(); throw new _util.FormatError(`Illegal character: ${ch}`); } let str = String.fromCharCode(ch); const knownCommands = this.knownCommands; let knownCommandFound = knownCommands && knownCommands[str] !== undefined; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { const possibleCommand = str + String.fromCharCode(ch); if (knownCommandFound && knownCommands[possibleCommand] === undefined) { break; } if (str.length === 128) { throw new _util.FormatError(`Command token too long: ${str.length}`); } str = possibleCommand; knownCommandFound = knownCommands && knownCommands[str] !== undefined; } if (str === "true") { return true; } if (str === "false") { return false; } if (str === "null") { return null; } if (str === "BI") { this.beginInlineImagePos = this.stream.pos; } return _primitives.Cmd.get(str); } peekObj() { const streamPos = this.stream.pos, currentChar = this.currentChar, beginInlineImagePos = this.beginInlineImagePos; let nextObj; try { nextObj = this.getObj(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`peekObj: ${ex}`); } this.stream.pos = streamPos; this.currentChar = currentChar; this.beginInlineImagePos = beginInlineImagePos; return nextObj; } skipToNextLine() { let ch = this.currentChar; while (ch >= 0) { if (ch === 0x0d) { ch = this.nextChar(); if (ch === 0x0a) { this.nextChar(); } break; } else if (ch === 0x0a) { this.nextChar(); break; } ch = this.nextChar(); } } } exports.Lexer = Lexer; class Linearization { static create(stream) { function getInt(linDict, name, allowZeroValue = false) { const obj = linDict.get(name); if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { return obj; } throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid."); } function getHints(linDict) { const hints = linDict.get("H"); let hintsLength; if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { for (let index = 0; index < hintsLength; index++) { const hint = hints[index]; if (!(Number.isInteger(hint) && hint > 0)) { throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`); } } return hints; } throw new Error("Hint array in the linearization dictionary is invalid."); } const parser = new Parser({ lexer: new Lexer(stream), xref: null }); const obj1 = parser.getObj(); const obj2 = parser.getObj(); const obj3 = parser.getObj(); const linDict = parser.getObj(); let obj, length; if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) { return null; } else if ((length = getInt(linDict, "L")) !== stream.length) { throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); } return { length, hints: getHints(linDict), objectNumberFirst: getInt(linDict, "O"), endFirst: getInt(linDict, "E"), numPages: getInt(linDict, "N"), mainXRefEntriesOffset: getInt(linDict, "T"), pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 }; } } exports.Linearization = Linearization; /***/ }), /* 12 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); var Stream = function StreamClosure() { function Stream(arrayBuffer, start, length, dict) { this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); this.start = start || 0; this.pos = this.start; this.end = start + length || this.bytes.length; this.dict = dict; } Stream.prototype = { get length() { return this.end - this.start; }, get isEmpty() { return this.length === 0; }, getByte: function Stream_getByte() { if (this.pos >= this.end) { return -1; } return this.bytes[this.pos++]; }, getUint16: function Stream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function Stream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes(length, forceClamped = false) { var bytes = this.bytes; var pos = this.pos; var strEnd = this.end; if (!length) { const subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } var end = pos + length; if (end > strEnd) { end = strEnd; } this.pos = end; const subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function Stream_peekByte() { var peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; }, peekBytes(length, forceClamped = false) { var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } return this.bytes.subarray(begin, end); }, skip: function Stream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function Stream_reset() { this.pos = this.start; }, moveStart: function Stream_moveStart() { this.start = this.pos; }, makeSubStream: function Stream_makeSubStream(start, length, dict) { return new Stream(this.bytes.buffer, start, length, dict); } }; return Stream; }(); exports.Stream = Stream; var StringStream = function StringStreamClosure() { function StringStream(str) { const bytes = (0, _util.stringToBytes)(str); Stream.call(this, bytes); } StringStream.prototype = Stream.prototype; return StringStream; }(); exports.StringStream = StringStream; var DecodeStream = function DecodeStreamClosure() { var emptyBuffer = new Uint8Array(0); function DecodeStream(maybeMinBufferLength) { this._rawMinBufferLength = maybeMinBufferLength || 0; this.pos = 0; this.bufferLength = 0; this.eof = false; this.buffer = emptyBuffer; this.minBufferLength = 512; if (maybeMinBufferLength) { while (this.minBufferLength < maybeMinBufferLength) { this.minBufferLength *= 2; } } } DecodeStream.prototype = { get isEmpty() { while (!this.eof && this.bufferLength === 0) { this.readBlock(); } return this.bufferLength === 0; }, ensureBuffer: function DecodeStream_ensureBuffer(requested) { var buffer = this.buffer; if (requested <= buffer.byteLength) { return buffer; } var size = this.minBufferLength; while (size < requested) { size *= 2; } var buffer2 = new Uint8Array(size); buffer2.set(buffer); return this.buffer = buffer2; }, getByte: function DecodeStream_getByte() { var pos = this.pos; while (this.bufferLength <= pos) { if (this.eof) { return -1; } this.readBlock(); } return this.buffer[this.pos++]; }, getUint16: function DecodeStream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function DecodeStream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes(length, forceClamped = false) { var end, pos = this.pos; if (length) { this.ensureBuffer(pos + length); end = pos + length; while (!this.eof && this.bufferLength < end) { this.readBlock(); } var bufEnd = this.bufferLength; if (end > bufEnd) { end = bufEnd; } } else { while (!this.eof) { this.readBlock(); } end = this.bufferLength; } this.pos = end; const subarray = this.buffer.subarray(pos, end); return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function DecodeStream_peekByte() { var peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; }, peekBytes(length, forceClamped = false) { var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { var end = start + length; while (this.bufferLength <= end && !this.eof) { this.readBlock(); } return new Stream(this.buffer, start, length, dict); }, getByteRange(begin, end) { (0, _util.unreachable)("Should not call DecodeStream.getByteRange"); }, skip: function DecodeStream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function DecodeStream_reset() { this.pos = 0; }, getBaseStreams: function DecodeStream_getBaseStreams() { if (this.str && this.str.getBaseStreams) { return this.str.getBaseStreams(); } return []; } }; return DecodeStream; }(); exports.DecodeStream = DecodeStream; var StreamsSequenceStream = function StreamsSequenceStreamClosure() { function StreamsSequenceStream(streams) { this.streams = streams; let maybeLength = 0; for (let i = 0, ii = streams.length; i < ii; i++) { const stream = streams[i]; if (stream instanceof DecodeStream) { maybeLength += stream._rawMinBufferLength; } else { maybeLength += stream.length; } } DecodeStream.call(this, maybeLength); } StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() { var streams = this.streams; if (streams.length === 0) { this.eof = true; return; } var stream = streams.shift(); var chunk = stream.getBytes(); var bufferLength = this.bufferLength; var newLength = bufferLength + chunk.length; var buffer = this.ensureBuffer(newLength); buffer.set(chunk, bufferLength); this.bufferLength = newLength; }; StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() { var baseStreams = []; for (var i = 0, ii = this.streams.length; i < ii; i++) { var stream = this.streams[i]; if (stream.getBaseStreams) { baseStreams.push(...stream.getBaseStreams()); } } return baseStreams; }; return StreamsSequenceStream; }(); exports.StreamsSequenceStream = StreamsSequenceStream; var FlateStream = function FlateStreamClosure() { var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; function FlateStream(str, maybeLength) { this.str = str; this.dict = str.dict; var cmf = str.getByte(); var flg = str.getByte(); if (cmf === -1 || flg === -1) { throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`); } if ((cmf & 0x0f) !== 0x08) { throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`); } if (((cmf << 8) + flg) % 31 !== 0) { throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`); } if (flg & 0x20) { throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`); } this.codeSize = 0; this.codeBuf = 0; DecodeStream.call(this, maybeLength); } FlateStream.prototype = Object.create(DecodeStream.prototype); FlateStream.prototype.getBits = function FlateStream_getBits(bits) { var str = this.str; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var b; while (codeSize < bits) { if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad encoding in flate stream"); } codeBuf |= b << codeSize; codeSize += 8; } b = codeBuf & (1 << bits) - 1; this.codeBuf = codeBuf >> bits; this.codeSize = codeSize -= bits; return b; }; FlateStream.prototype.getCode = function FlateStream_getCode(table) { var str = this.str; var codes = table[0]; var maxLen = table[1]; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var b; while (codeSize < maxLen) { if ((b = str.getByte()) === -1) { break; } codeBuf |= b << codeSize; codeSize += 8; } var code = codes[codeBuf & (1 << maxLen) - 1]; var codeLen = code >> 16; var codeVal = code & 0xffff; if (codeLen < 1 || codeSize < codeLen) { throw new _util.FormatError("Bad encoding in flate stream"); } this.codeBuf = codeBuf >> codeLen; this.codeSize = codeSize - codeLen; return codeVal; }; FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) { var n = lengths.length; var maxLen = 0; var i; for (i = 0; i < n; ++i) { if (lengths[i] > maxLen) { maxLen = lengths[i]; } } var size = 1 << maxLen; var codes = new Int32Array(size); for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { for (var val = 0; val < n; ++val) { if (lengths[val] === len) { var code2 = 0; var t = code; for (i = 0; i < len; ++i) { code2 = code2 << 1 | t & 1; t >>= 1; } for (i = code2; i < size; i += skip) { codes[i] = len << 16 | val; } ++code; } } } return [codes, maxLen]; }; FlateStream.prototype.readBlock = function FlateStream_readBlock() { var buffer, len; var str = this.str; var hdr = this.getBits(3); if (hdr & 1) { this.eof = true; } hdr >>= 1; if (hdr === 0) { var b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } var blockLen = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } blockLen |= b << 8; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } var check = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } check |= b << 8; if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { throw new _util.FormatError("Bad uncompressed block length in flate stream"); } this.codeBuf = 0; this.codeSize = 0; const bufferLength = this.bufferLength, end = bufferLength + blockLen; buffer = this.ensureBuffer(end); this.bufferLength = end; if (blockLen === 0) { if (str.peekByte() === -1) { this.eof = true; } } else { const block = str.getBytes(blockLen); buffer.set(block, bufferLength); if (block.length < blockLen) { this.eof = true; } } return; } var litCodeTable; var distCodeTable; if (hdr === 1) { litCodeTable = fixedLitCodeTab; distCodeTable = fixedDistCodeTab; } else if (hdr === 2) { var numLitCodes = this.getBits(5) + 257; var numDistCodes = this.getBits(5) + 1; var numCodeLenCodes = this.getBits(4) + 4; var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); var i; for (i = 0; i < numCodeLenCodes; ++i) { codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); } var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); len = 0; i = 0; var codes = numLitCodes + numDistCodes; var codeLengths = new Uint8Array(codes); var bitsLength, bitsOffset, what; while (i < codes) { var code = this.getCode(codeLenCodeTab); if (code === 16) { bitsLength = 2; bitsOffset = 3; what = len; } else if (code === 17) { bitsLength = 3; bitsOffset = 3; what = len = 0; } else if (code === 18) { bitsLength = 7; bitsOffset = 11; what = len = 0; } else { codeLengths[i++] = len = code; continue; } var repeatLength = this.getBits(bitsLength) + bitsOffset; while (repeatLength-- > 0) { codeLengths[i++] = what; } } litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); } else { throw new _util.FormatError("Unknown block type in flate stream"); } buffer = this.buffer; var limit = buffer ? buffer.length : 0; var pos = this.bufferLength; while (true) { var code1 = this.getCode(litCodeTable); if (code1 < 256) { if (pos + 1 >= limit) { buffer = this.ensureBuffer(pos + 1); limit = buffer.length; } buffer[pos++] = code1; continue; } if (code1 === 256) { this.bufferLength = pos; return; } code1 -= 257; code1 = lengthDecode[code1]; var code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } len = (code1 & 0xffff) + code2; code1 = this.getCode(distCodeTable); code1 = distDecode[code1]; code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } var dist = (code1 & 0xffff) + code2; if (pos + len >= limit) { buffer = this.ensureBuffer(pos + len); limit = buffer.length; } for (var k = 0; k < len; ++k, ++pos) { buffer[pos] = buffer[pos - dist]; } } }; return FlateStream; }(); exports.FlateStream = FlateStream; var PredictorStream = function PredictorStreamClosure() { function PredictorStream(str, maybeLength, params) { if (!(0, _primitives.isDict)(params)) { return str; } var predictor = this.predictor = params.get("Predictor") || 1; if (predictor <= 1) { return str; } if (predictor !== 2 && (predictor < 10 || predictor > 15)) { throw new _util.FormatError(`Unsupported predictor: ${predictor}`); } if (predictor === 2) { this.readBlock = this.readBlockTiff; } else { this.readBlock = this.readBlockPng; } this.str = str; this.dict = str.dict; var colors = this.colors = params.get("Colors") || 1; var bits = this.bits = params.get("BitsPerComponent") || 8; var columns = this.columns = params.get("Columns") || 1; this.pixBytes = colors * bits + 7 >> 3; this.rowBytes = columns * colors * bits + 7 >> 3; DecodeStream.call(this, maybeLength); return this; } PredictorStream.prototype = Object.create(DecodeStream.prototype); PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() { var rowBytes = this.rowBytes; var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var bits = this.bits; var colors = this.colors; var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var inbuf = 0, outbuf = 0; var inbits = 0, outbits = 0; var pos = bufferLength; var i; if (bits === 1 && colors === 1) { for (i = 0; i < rowBytes; ++i) { var c = rawBytes[i] ^ inbuf; c ^= c >> 1; c ^= c >> 2; c ^= c >> 4; inbuf = (c & 1) << 7; buffer[pos++] = c; } } else if (bits === 8) { for (i = 0; i < colors; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[pos] = buffer[pos - colors] + rawBytes[i]; pos++; } } else if (bits === 16) { var bytesPerPixel = colors * 2; for (i = 0; i < bytesPerPixel; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; i += 2) { var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); buffer[pos++] = sum >> 8 & 0xff; buffer[pos++] = sum & 0xff; } } else { var compArray = new Uint8Array(colors + 1); var bitMask = (1 << bits) - 1; var j = 0, k = bufferLength; var columns = this.columns; for (i = 0; i < columns; ++i) { for (var kk = 0; kk < colors; ++kk) { if (inbits < bits) { inbuf = inbuf << 8 | rawBytes[j++] & 0xff; inbits += 8; } compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; inbits -= bits; outbuf = outbuf << bits | compArray[kk]; outbits += bits; if (outbits >= 8) { buffer[k++] = outbuf >> outbits - 8 & 0xff; outbits -= 8; } } } if (outbits > 0) { buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); } } this.bufferLength += rowBytes; }; PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() { var rowBytes = this.rowBytes; var pixBytes = this.pixBytes; var predictor = this.str.getByte(); var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); if (prevRow.length === 0) { prevRow = new Uint8Array(rowBytes); } var i, j = bufferLength, up, c; switch (predictor) { case 0: for (i = 0; i < rowBytes; ++i) { buffer[j++] = rawBytes[i]; } break; case 1: for (i = 0; i < pixBytes; ++i) { buffer[j++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; j++; } break; case 2: for (i = 0; i < rowBytes; ++i) { buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; } break; case 3: for (i = 0; i < pixBytes; ++i) { buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; j++; } break; case 4: for (i = 0; i < pixBytes; ++i) { up = prevRow[i]; c = rawBytes[i]; buffer[j++] = up + c; } for (; i < rowBytes; ++i) { up = prevRow[i]; var upLeft = prevRow[i - pixBytes]; var left = buffer[j - pixBytes]; var p = left + up - upLeft; var pa = p - left; if (pa < 0) { pa = -pa; } var pb = p - up; if (pb < 0) { pb = -pb; } var pc = p - upLeft; if (pc < 0) { pc = -pc; } c = rawBytes[i]; if (pa <= pb && pa <= pc) { buffer[j++] = left + c; } else if (pb <= pc) { buffer[j++] = up + c; } else { buffer[j++] = upLeft + c; } } break; default: throw new _util.FormatError(`Unsupported predictor: ${predictor}`); } this.bufferLength += rowBytes; }; return PredictorStream; }(); exports.PredictorStream = PredictorStream; var DecryptStream = function DecryptStreamClosure() { function DecryptStream(str, maybeLength, decrypt) { this.str = str; this.dict = str.dict; this.decrypt = decrypt; this.nextChunk = null; this.initialized = false; DecodeStream.call(this, maybeLength); } var chunkSize = 512; DecryptStream.prototype = Object.create(DecodeStream.prototype); DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { var chunk; if (this.initialized) { chunk = this.nextChunk; } else { chunk = this.str.getBytes(chunkSize); this.initialized = true; } if (!chunk || chunk.length === 0) { this.eof = true; return; } this.nextChunk = this.str.getBytes(chunkSize); var hasMoreData = this.nextChunk && this.nextChunk.length > 0; var decrypt = this.decrypt; chunk = decrypt(chunk, !hasMoreData); var bufferLength = this.bufferLength; var i, n = chunk.length; var buffer = this.ensureBuffer(bufferLength + n); for (i = 0; i < n; i++) { buffer[bufferLength++] = chunk[i]; } this.bufferLength = bufferLength; }; return DecryptStream; }(); exports.DecryptStream = DecryptStream; var Ascii85Stream = function Ascii85StreamClosure() { function Ascii85Stream(str, maybeLength) { this.str = str; this.dict = str.dict; this.input = new Uint8Array(5); if (maybeLength) { maybeLength = 0.8 * maybeLength; } DecodeStream.call(this, maybeLength); } Ascii85Stream.prototype = Object.create(DecodeStream.prototype); Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { var TILDA_CHAR = 0x7e; var Z_LOWER_CHAR = 0x7a; var EOF = -1; var str = this.str; var c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } if (c === EOF || c === TILDA_CHAR) { this.eof = true; return; } var bufferLength = this.bufferLength, buffer; var i; if (c === Z_LOWER_CHAR) { buffer = this.ensureBuffer(bufferLength + 4); for (i = 0; i < 4; ++i) { buffer[bufferLength + i] = 0; } this.bufferLength += 4; } else { var input = this.input; input[0] = c; for (i = 1; i < 5; ++i) { c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } input[i] = c; if (c === EOF || c === TILDA_CHAR) { break; } } buffer = this.ensureBuffer(bufferLength + i - 1); this.bufferLength += i - 1; if (i < 5) { for (; i < 5; ++i) { input[i] = 0x21 + 84; } this.eof = true; } var t = 0; for (i = 0; i < 5; ++i) { t = t * 85 + (input[i] - 0x21); } for (i = 3; i >= 0; --i) { buffer[bufferLength + i] = t & 0xff; t >>= 8; } } }; return Ascii85Stream; }(); exports.Ascii85Stream = Ascii85Stream; var AsciiHexStream = function AsciiHexStreamClosure() { function AsciiHexStream(str, maybeLength) { this.str = str; this.dict = str.dict; this.firstDigit = -1; if (maybeLength) { maybeLength = 0.5 * maybeLength; } DecodeStream.call(this, maybeLength); } AsciiHexStream.prototype = Object.create(DecodeStream.prototype); AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { var UPSTREAM_BLOCK_SIZE = 8000; var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); if (!bytes.length) { this.eof = true; return; } var maxDecodeLength = bytes.length + 1 >> 1; var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); var bufferLength = this.bufferLength; var firstDigit = this.firstDigit; for (var i = 0, ii = bytes.length; i < ii; i++) { var ch = bytes[i], digit; if (ch >= 0x30 && ch <= 0x39) { digit = ch & 0x0f; } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { digit = (ch & 0x0f) + 9; } else if (ch === 0x3e) { this.eof = true; break; } else { continue; } if (firstDigit < 0) { firstDigit = digit; } else { buffer[bufferLength++] = firstDigit << 4 | digit; firstDigit = -1; } } if (firstDigit >= 0 && this.eof) { buffer[bufferLength++] = firstDigit << 4; firstDigit = -1; } this.firstDigit = firstDigit; this.bufferLength = bufferLength; }; return AsciiHexStream; }(); exports.AsciiHexStream = AsciiHexStream; var RunLengthStream = function RunLengthStreamClosure() { function RunLengthStream(str, maybeLength) { this.str = str; this.dict = str.dict; DecodeStream.call(this, maybeLength); } RunLengthStream.prototype = Object.create(DecodeStream.prototype); RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { var repeatHeader = this.str.getBytes(2); if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { this.eof = true; return; } var buffer; var bufferLength = this.bufferLength; var n = repeatHeader[0]; if (n < 128) { buffer = this.ensureBuffer(bufferLength + n + 1); buffer[bufferLength++] = repeatHeader[1]; if (n > 0) { var source = this.str.getBytes(n); buffer.set(source, bufferLength); bufferLength += n; } } else { n = 257 - n; var b = repeatHeader[1]; buffer = this.ensureBuffer(bufferLength + n + 1); for (var i = 0; i < n; i++) { buffer[bufferLength++] = b; } } this.bufferLength = bufferLength; }; return RunLengthStream; }(); exports.RunLengthStream = RunLengthStream; var LZWStream = function LZWStreamClosure() { function LZWStream(str, maybeLength, earlyChange) { this.str = str; this.dict = str.dict; this.cachedData = 0; this.bitsCached = 0; var maxLzwDictionarySize = 4096; var lzwState = { earlyChange, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(maxLzwDictionarySize), dictionaryLengths: new Uint16Array(maxLzwDictionarySize), dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), currentSequence: new Uint8Array(maxLzwDictionarySize), currentSequenceLength: 0 }; for (var i = 0; i < 256; ++i) { lzwState.dictionaryValues[i] = i; lzwState.dictionaryLengths[i] = 1; } this.lzwState = lzwState; DecodeStream.call(this, maybeLength); } LZWStream.prototype = Object.create(DecodeStream.prototype); LZWStream.prototype.readBits = function LZWStream_readBits(n) { var bitsCached = this.bitsCached; var cachedData = this.cachedData; while (bitsCached < n) { var c = this.str.getByte(); if (c === -1) { this.eof = true; return null; } cachedData = cachedData << 8 | c; bitsCached += 8; } this.bitsCached = bitsCached -= n; this.cachedData = cachedData; this.lastCode = null; return cachedData >>> bitsCached & (1 << n) - 1; }; LZWStream.prototype.readBlock = function LZWStream_readBlock() { var blockSize = 512; var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize; var i, j, q; var lzwState = this.lzwState; if (!lzwState) { return; } var earlyChange = lzwState.earlyChange; var nextCode = lzwState.nextCode; var dictionaryValues = lzwState.dictionaryValues; var dictionaryLengths = lzwState.dictionaryLengths; var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; var codeLength = lzwState.codeLength; var prevCode = lzwState.prevCode; var currentSequence = lzwState.currentSequence; var currentSequenceLength = lzwState.currentSequenceLength; var decodedLength = 0; var currentBufferLength = this.bufferLength; var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); for (i = 0; i < blockSize; i++) { var code = this.readBits(codeLength); var hasPrev = currentSequenceLength > 0; if (code < 256) { currentSequence[0] = code; currentSequenceLength = 1; } else if (code >= 258) { if (code < nextCode) { currentSequenceLength = dictionaryLengths[code]; for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { currentSequence[j] = dictionaryValues[q]; q = dictionaryPrevCodes[q]; } } else { currentSequence[currentSequenceLength++] = currentSequence[0]; } } else if (code === 256) { codeLength = 9; nextCode = 258; currentSequenceLength = 0; continue; } else { this.eof = true; delete this.lzwState; break; } if (hasPrev) { dictionaryPrevCodes[nextCode] = prevCode; dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; dictionaryValues[nextCode] = currentSequence[0]; nextCode++; codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; } prevCode = code; decodedLength += currentSequenceLength; if (estimatedDecodedSize < decodedLength) { do { estimatedDecodedSize += decodedSizeDelta; } while (estimatedDecodedSize < decodedLength); buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); } for (j = 0; j < currentSequenceLength; j++) { buffer[currentBufferLength++] = currentSequence[j]; } } lzwState.nextCode = nextCode; lzwState.codeLength = codeLength; lzwState.prevCode = prevCode; lzwState.currentSequenceLength = currentSequenceLength; this.bufferLength = currentBufferLength; }; return LZWStream; }(); exports.LZWStream = LZWStream; var NullStream = function NullStreamClosure() { function NullStream() { Stream.call(this, new Uint8Array(0)); } NullStream.prototype = Stream.prototype; return NullStream; }(); exports.NullStream = NullStream; /***/ }), /* 13 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CCITTFaxStream = void 0; var _primitives = __w_pdfjs_require__(5); var _ccitt = __w_pdfjs_require__(14); var _stream = __w_pdfjs_require__(12); var CCITTFaxStream = function CCITTFaxStreamClosure() { function CCITTFaxStream(str, maybeLength, params) { this.str = str; this.dict = str.dict; if (!(0, _primitives.isDict)(params)) { params = _primitives.Dict.empty; } const source = { next() { return str.getByte(); } }; this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { K: params.get("K"), EndOfLine: params.get("EndOfLine"), EncodedByteAlign: params.get("EncodedByteAlign"), Columns: params.get("Columns"), Rows: params.get("Rows"), EndOfBlock: params.get("EndOfBlock"), BlackIs1: params.get("BlackIs1") }); _stream.DecodeStream.call(this, maybeLength); } CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype); CCITTFaxStream.prototype.readBlock = function () { while (!this.eof) { const c = this.ccittFaxDecoder.readNextChar(); if (c === -1) { this.eof = true; return; } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = c; } }; return CCITTFaxStream; }(); exports.CCITTFaxStream = CCITTFaxStream; /***/ }), /* 14 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CCITTFaxDecoder = void 0; var _util = __w_pdfjs_require__(2); const CCITTFaxDecoder = function CCITTFaxDecoder() { const ccittEOL = -2; const ccittEOF = -1; const twoDimPass = 0; const twoDimHoriz = 1; const twoDimVert0 = 2; const twoDimVertR1 = 3; const twoDimVertL1 = 4; const twoDimVertR2 = 5; const twoDimVertL2 = 6; const twoDimVertR3 = 7; const twoDimVertL3 = 8; const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; function CCITTFaxDecoder(source, options = {}) { if (!source || typeof source.next !== "function") { throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); } this.source = source; this.eof = false; this.encoding = options.K || 0; this.eoline = options.EndOfLine || false; this.byteAlign = options.EncodedByteAlign || false; this.columns = options.Columns || 1728; this.rows = options.Rows || 0; let eoblock = options.EndOfBlock; if (eoblock === null || eoblock === undefined) { eoblock = true; } this.eoblock = eoblock; this.black = options.BlackIs1 || false; this.codingLine = new Uint32Array(this.columns + 1); this.refLine = new Uint32Array(this.columns + 2); this.codingLine[0] = this.columns; this.codingPos = 0; this.row = 0; this.nextLine2D = this.encoding < 0; this.inputBits = 0; this.inputBuf = 0; this.outputBits = 0; this.rowsDone = false; let code1; while ((code1 = this._lookBits(12)) === 0) { this._eatBits(1); } if (code1 === 1) { this._eatBits(12); } if (this.encoding > 0) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } } CCITTFaxDecoder.prototype = { readNextChar() { if (this.eof) { return -1; } const refLine = this.refLine; const codingLine = this.codingLine; const columns = this.columns; let refPos, blackPixels, bits, i; if (this.outputBits === 0) { if (this.rowsDone) { this.eof = true; } if (this.eof) { return -1; } this.err = false; let code1, code2, code3; if (this.nextLine2D) { for (i = 0; codingLine[i] < columns; ++i) { refLine[i] = codingLine[i]; } refLine[i++] = columns; refLine[i] = columns; codingLine[0] = 0; this.codingPos = 0; refPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = this._getTwoDimCode(); switch (code1) { case twoDimPass: this._addPixels(refLine[refPos + 1], blackPixels); if (refLine[refPos + 1] < columns) { refPos += 2; } break; case twoDimHoriz: code1 = code2 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); do { code2 += code3 = this._getWhiteCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); do { code2 += code3 = this._getBlackCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); if (codingLine[this.codingPos] < columns) { this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } break; case twoDimVertR3: this._addPixels(refLine[refPos] + 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR2: this._addPixels(refLine[refPos] + 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR1: this._addPixels(refLine[refPos] + 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVert0: this._addPixels(refLine[refPos], blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL3: this._addPixelsNeg(refLine[refPos] - 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL2: this._addPixelsNeg(refLine[refPos] - 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL1: this._addPixelsNeg(refLine[refPos] - 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case ccittEOF: this._addPixels(columns, 0); this.eof = true; break; default: (0, _util.info)("bad 2d code"); this._addPixels(columns, 0); this.err = true; } } } else { codingLine[0] = 0; this.codingPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); blackPixels ^= 1; } } let gotEOL = false; if (this.byteAlign) { this.inputBits &= ~7; } if (!this.eoblock && this.row === this.rows - 1) { this.rowsDone = true; } else { code1 = this._lookBits(12); if (this.eoline) { while (code1 !== ccittEOF && code1 !== 1) { this._eatBits(1); code1 = this._lookBits(12); } } else { while (code1 === 0) { this._eatBits(1); code1 = this._lookBits(12); } } if (code1 === 1) { this._eatBits(12); gotEOL = true; } else if (code1 === ccittEOF) { this.eof = true; } } if (!this.eof && this.encoding > 0 && !this.rowsDone) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } if (this.eoblock && gotEOL && this.byteAlign) { code1 = this._lookBits(12); if (code1 === 1) { this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } if (this.encoding >= 0) { for (i = 0; i < 4; ++i) { code1 = this._lookBits(12); if (code1 !== 1) { (0, _util.info)("bad rtc code: " + code1); } this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } } } this.eof = true; } } else if (this.err && this.eoline) { while (true) { code1 = this._lookBits(13); if (code1 === ccittEOF) { this.eof = true; return -1; } if (code1 >> 1 === 1) { break; } this._eatBits(1); } this._eatBits(12); if (this.encoding > 0) { this._eatBits(1); this.nextLine2D = !(code1 & 1); } } if (codingLine[0] > 0) { this.outputBits = codingLine[this.codingPos = 0]; } else { this.outputBits = codingLine[this.codingPos = 1]; } this.row++; } let c; if (this.outputBits >= 8) { c = this.codingPos & 1 ? 0 : 0xff; this.outputBits -= 8; if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } } else { bits = 8; c = 0; do { if (this.outputBits > bits) { c <<= bits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - bits; } this.outputBits -= bits; bits = 0; } else { c <<= this.outputBits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - this.outputBits; } bits -= this.outputBits; this.outputBits = 0; if (codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } else if (bits > 0) { c <<= bits; bits = 0; } } } while (bits); } if (this.black) { c ^= 0xff; } return c; }, _addPixels(a1, blackPixels) { const codingLine = this.codingLine; let codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; }, _addPixelsNeg(a1, blackPixels) { const codingLine = this.codingLine; let codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } else if (a1 < codingLine[codingPos]) { if (a1 < 0) { (0, _util.info)("invalid code"); this.err = true; a1 = 0; } while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { --codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; }, _findTableCode(start, end, table, limit) { const limitValue = limit || 0; for (let i = start; i <= end; ++i) { let code = this._lookBits(i); if (code === ccittEOF) { return [true, 1, false]; } if (i < end) { code <<= end - i; } if (!limitValue || code >= limitValue) { const p = table[code - limitValue]; if (p[0] === i) { this._eatBits(i); return [true, p[1], true]; } } } return [false, 0, false]; }, _getTwoDimCode() { let code = 0; let p; if (this.eoblock) { code = this._lookBits(7); p = twoDimTable[code]; if (p && p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { const result = this._findTableCode(1, 7, twoDimTable); if (result[0] && result[2]) { return result[1]; } } (0, _util.info)("Bad two dim code"); return ccittEOF; }, _getWhiteCode() { let code = 0; let p; if (this.eoblock) { code = this._lookBits(12); if (code === ccittEOF) { return 1; } if (code >> 5 === 0) { p = whiteTable1[code]; } else { p = whiteTable2[code >> 3]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { let result = this._findTableCode(1, 9, whiteTable2); if (result[0]) { return result[1]; } result = this._findTableCode(11, 12, whiteTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad white code"); this._eatBits(1); return 1; }, _getBlackCode() { let code, p; if (this.eoblock) { code = this._lookBits(13); if (code === ccittEOF) { return 1; } if (code >> 7 === 0) { p = blackTable1[code]; } else if (code >> 9 === 0 && code >> 7 !== 0) { p = blackTable2[(code >> 1) - 64]; } else { p = blackTable3[code >> 7]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { let result = this._findTableCode(2, 6, blackTable3); if (result[0]) { return result[1]; } result = this._findTableCode(7, 12, blackTable2, 64); if (result[0]) { return result[1]; } result = this._findTableCode(10, 13, blackTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad black code"); this._eatBits(1); return 1; }, _lookBits(n) { let c; while (this.inputBits < n) { if ((c = this.source.next()) === -1) { if (this.inputBits === 0) { return ccittEOF; } return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; } this.inputBuf = this.inputBuf << 8 | c; this.inputBits += 8; } return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; }, _eatBits(n) { if ((this.inputBits -= n) < 0) { this.inputBits = 0; } } }; return CCITTFaxDecoder; }(); exports.CCITTFaxDecoder = CCITTFaxDecoder; /***/ }), /* 15 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Jbig2Stream = void 0; var _primitives = __w_pdfjs_require__(5); var _stream = __w_pdfjs_require__(12); var _jbig = __w_pdfjs_require__(16); var _util = __w_pdfjs_require__(2); const Jbig2Stream = function Jbig2StreamClosure() { function Jbig2Stream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(Jbig2Stream.prototype, "bytes", { get() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); Jbig2Stream.prototype.ensureBuffer = function (requested) {}; Jbig2Stream.prototype.readBlock = function () { if (this.eof) { return; } const jbig2Image = new _jbig.Jbig2Image(); const chunks = []; if ((0, _primitives.isDict)(this.params)) { const globalsStream = this.params.get("JBIG2Globals"); if ((0, _primitives.isStream)(globalsStream)) { const globals = globalsStream.getBytes(); chunks.push({ data: globals, start: 0, end: globals.length }); } } chunks.push({ data: this.bytes, start: 0, end: this.bytes.length }); const data = jbig2Image.parseChunks(chunks); const dataLength = data.length; for (let i = 0; i < dataLength; i++) { data[i] ^= 0xff; } this.buffer = data; this.bufferLength = dataLength; this.eof = true; }; return Jbig2Stream; }(); exports.Jbig2Stream = Jbig2Stream; /***/ }), /* 16 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Jbig2Image = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(8); var _arithmetic_decoder = __w_pdfjs_require__(17); var _ccitt = __w_pdfjs_require__(14); class Jbig2Error extends _util.BaseException { constructor(msg) { super(`JBIG2 error: ${msg}`); } } var Jbig2Image = function Jbig2ImageClosure() { function ContextCache() {} ContextCache.prototype = { getContexts(id) { if (id in this) { return this[id]; } return this[id] = new Int8Array(1 << 16); } }; function DecodingContext(data, start, end) { this.data = data; this.start = start; this.end = end; } DecodingContext.prototype = { get decoder() { var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); return (0, _util.shadow)(this, "decoder", decoder); }, get contextCache() { var cache = new ContextCache(); return (0, _util.shadow)(this, "contextCache", cache); } }; function decodeInteger(contextCache, procedure, decoder) { var contexts = contextCache.getContexts(procedure); var prev = 1; function readBits(length) { var v = 0; for (var i = 0; i < length; i++) { var bit = decoder.readBit(contexts, prev); prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; v = v << 1 | bit; } return v >>> 0; } var sign = readBits(1); var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); if (sign === 0) { return value; } else if (value > 0) { return -value; } return null; } function decodeIAID(contextCache, decoder, codeLength) { var contexts = contextCache.getContexts("IAID"); var prev = 1; for (var i = 0; i < codeLength; i++) { var bit = decoder.readBit(contexts, prev); prev = prev << 1 | bit; } if (codeLength < 31) { return prev & (1 << codeLength) - 1; } return prev & 0x7fffffff; } var SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; var CodingTemplates = [[{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: 2, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -3, y: -1 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }]]; var RefinementTemplates = [{ coding: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: -1, y: 1 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }, { coding: [{ x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }]; var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; var RefinementReusedContexts = [0x0020, 0x0008]; function decodeBitmapTemplate0(width, height, decodingContext) { var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GB"); var contextLabel, i, j, pixel, row, row1, row2, bitmap = []; var OLD_PIXEL_MASK = 0x7bf7; for (i = 0; i < height; i++) { row = bitmap[i] = new Uint8Array(width); row1 = i < 1 ? row : bitmap[i - 1]; row2 = i < 2 ? row : bitmap[i - 2]; contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; for (j = 0; j < width; j++) { row[j] = pixel = decoder.readBit(contexts, contextLabel); contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; } } return bitmap; } function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { if (mmr) { const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); return decodeMMRBitmap(input, width, height, false); } if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { return decodeBitmapTemplate0(width, height, decodingContext); } var useskip = !!skip; var template = CodingTemplates[templateIndex].concat(at); template.sort(function (a, b) { return a.y - b.y || a.x - b.x; }); var templateLength = template.length; var templateX = new Int8Array(templateLength); var templateY = new Int8Array(templateLength); var changingTemplateEntries = []; var reuseMask = 0, minX = 0, maxX = 0, minY = 0; var c, k; for (k = 0; k < templateLength; k++) { templateX[k] = template[k].x; templateY[k] = template[k].y; minX = Math.min(minX, template[k].x); maxX = Math.max(maxX, template[k].x); minY = Math.min(minY, template[k].y); if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { reuseMask |= 1 << templateLength - 1 - k; } else { changingTemplateEntries.push(k); } } var changingEntriesLength = changingTemplateEntries.length; var changingTemplateX = new Int8Array(changingEntriesLength); var changingTemplateY = new Int8Array(changingEntriesLength); var changingTemplateBit = new Uint16Array(changingEntriesLength); for (c = 0; c < changingEntriesLength; c++) { k = changingTemplateEntries[c]; changingTemplateX[c] = template[k].x; changingTemplateY[c] = template[k].y; changingTemplateBit[c] = 1 << templateLength - 1 - k; } var sbb_left = -minX; var sbb_top = -minY; var sbb_right = width - maxX; var pseudoPixelContext = ReusedContexts[templateIndex]; var row = new Uint8Array(width); var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GB"); var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; for (var i = 0; i < height; i++) { if (prediction) { var sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { bitmap.push(row); continue; } } row = new Uint8Array(row); bitmap.push(row); for (j = 0; j < width; j++) { if (useskip && skip[i][j]) { row[j] = 0; continue; } if (j >= sbb_left && j < sbb_right && i >= sbb_top) { contextLabel = contextLabel << 1 & reuseMask; for (k = 0; k < changingEntriesLength; k++) { i0 = i + changingTemplateY[k]; j0 = j + changingTemplateX[k]; bit = bitmap[i0][j0]; if (bit) { bit = changingTemplateBit[k]; contextLabel |= bit; } } } else { contextLabel = 0; shift = templateLength - 1; for (k = 0; k < templateLength; k++, shift--) { j0 = j + templateX[k]; if (j0 >= 0 && j0 < width) { i0 = i + templateY[k]; if (i0 >= 0) { bit = bitmap[i0][j0]; if (bit) { contextLabel |= bit << shift; } } } } } var pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { var codingTemplate = RefinementTemplates[templateIndex].coding; if (templateIndex === 0) { codingTemplate = codingTemplate.concat([at[0]]); } var codingTemplateLength = codingTemplate.length; var codingTemplateX = new Int32Array(codingTemplateLength); var codingTemplateY = new Int32Array(codingTemplateLength); var k; for (k = 0; k < codingTemplateLength; k++) { codingTemplateX[k] = codingTemplate[k].x; codingTemplateY[k] = codingTemplate[k].y; } var referenceTemplate = RefinementTemplates[templateIndex].reference; if (templateIndex === 0) { referenceTemplate = referenceTemplate.concat([at[1]]); } var referenceTemplateLength = referenceTemplate.length; var referenceTemplateX = new Int32Array(referenceTemplateLength); var referenceTemplateY = new Int32Array(referenceTemplateLength); for (k = 0; k < referenceTemplateLength; k++) { referenceTemplateX[k] = referenceTemplate[k].x; referenceTemplateY[k] = referenceTemplate[k].y; } var referenceWidth = referenceBitmap[0].length; var referenceHeight = referenceBitmap.length; var pseudoPixelContext = RefinementReusedContexts[templateIndex]; var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts("GR"); var ltp = 0; for (var i = 0; i < height; i++) { if (prediction) { var sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { throw new Jbig2Error("prediction is not supported"); } } var row = new Uint8Array(width); bitmap.push(row); for (var j = 0; j < width; j++) { var i0, j0; var contextLabel = 0; for (k = 0; k < codingTemplateLength; k++) { i0 = i + codingTemplateY[k]; j0 = j + codingTemplateX[k]; if (i0 < 0 || j0 < 0 || j0 >= width) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | bitmap[i0][j0]; } } for (k = 0; k < referenceTemplateLength; k++) { i0 = i + referenceTemplateY[k] - offsetY; j0 = j + referenceTemplateX[k] - offsetX; if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; } } var pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("symbol refinement with Huffman is not supported"); } var newSymbols = []; var currentHeight = 0; var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; let tableB1, symbolWidths; if (huffman) { tableB1 = getStandardTable(1); symbolWidths = []; symbolCodeLength = Math.max(symbolCodeLength, 1); } while (newSymbols.length < numberOfNewSymbols) { var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); currentHeight += deltaHeight; let currentWidth = 0, totalWidth = 0; const firstSymbol = huffman ? symbolWidths.length : 0; while (true) { var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); if (deltaWidth === null) { break; } currentWidth += deltaWidth; totalWidth += currentWidth; var bitmap; if (refinement) { var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); if (numberOfInstances > 1) { bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); } else { var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); var rdx = decodeInteger(contextCache, "IARDX", decoder); var rdy = decodeInteger(contextCache, "IARDY", decoder); var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); } newSymbols.push(bitmap); } else if (huffman) { symbolWidths.push(currentWidth); } else { bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); newSymbols.push(bitmap); } } if (huffman && !refinement) { const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); huffmanInput.byteAlign(); let collectiveBitmap; if (bitmapSize === 0) { collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); } else { const originalEnd = huffmanInput.end; const bitmapEnd = huffmanInput.position + bitmapSize; huffmanInput.end = bitmapEnd; collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); huffmanInput.end = originalEnd; huffmanInput.position = bitmapEnd; } const numberOfSymbolsDecoded = symbolWidths.length; if (firstSymbol === numberOfSymbolsDecoded - 1) { newSymbols.push(collectiveBitmap); } else { let i, y, xMin = 0, xMax, bitmapWidth, symbolBitmap; for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) { bitmapWidth = symbolWidths[i]; xMax = xMin + bitmapWidth; symbolBitmap = []; for (y = 0; y < currentHeight; y++) { symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } newSymbols.push(symbolBitmap); xMin = xMax; } } } } var exportedSymbols = []; var flags = [], currentFlag = false; var totalSymbolsLength = symbols.length + numberOfNewSymbols; while (flags.length < totalSymbolsLength) { var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); while (runLength--) { flags.push(currentFlag); } currentFlag = !currentFlag; } for (var i = 0, ii = symbols.length; i < ii; i++) { if (flags[i]) { exportedSymbols.push(symbols[i]); } } for (var j = 0; j < numberOfNewSymbols; i++, j++) { if (flags[i]) { exportedSymbols.push(newSymbols[j]); } } return exportedSymbols; } function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } var bitmap = []; var i, row; for (i = 0; i < height; i++) { row = new Uint8Array(width); if (defaultPixelValue) { for (var j = 0; j < width; j++) { row[j] = defaultPixelValue; } } bitmap.push(row); } var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); var firstS = 0; i = 0; while (i < numberOfSymbolInstances) { var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); stripT += deltaT; var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); firstS += deltaFirstS; var currentS = firstS; do { let currentT = 0; if (stripSize > 1) { currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); } var t = stripSize * stripT + currentT; var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); var symbolBitmap = inputSymbols[symbolId]; var symbolWidth = symbolBitmap[0].length; var symbolHeight = symbolBitmap.length; if (applyRefinement) { var rdw = decodeInteger(contextCache, "IARDW", decoder); var rdh = decodeInteger(contextCache, "IARDH", decoder); var rdx = decodeInteger(contextCache, "IARDX", decoder); var rdy = decodeInteger(contextCache, "IARDY", decoder); symbolWidth += rdw; symbolHeight += rdh; symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); } var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); var s2, t2, symbolRow; if (transposed) { for (s2 = 0; s2 < symbolHeight; s2++) { row = bitmap[offsetS + s2]; if (!row) { continue; } symbolRow = symbolBitmap[s2]; var maxWidth = Math.min(width - offsetT, symbolWidth); switch (combinationOperator) { case 0: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] |= symbolRow[t2]; } break; case 2: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] ^= symbolRow[t2]; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } } currentS += symbolHeight - 1; } else { for (t2 = 0; t2 < symbolHeight; t2++) { row = bitmap[offsetT + t2]; if (!row) { continue; } symbolRow = symbolBitmap[t2]; switch (combinationOperator) { case 0: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] |= symbolRow[s2]; } break; case 2: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] ^= symbolRow[s2]; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } } currentS += symbolWidth - 1; } i++; var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); if (deltaS === null) { break; } currentS += deltaS + dsOffset; } while (true); } return bitmap; } function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { const at = []; if (!mmr) { at.push({ x: -patternWidth, y: 0 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } const collectiveWidth = (maxPatternIndex + 1) * patternWidth; const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); const patterns = []; for (let i = 0; i <= maxPatternIndex; i++) { const patternBitmap = []; const xMin = patternWidth * i; const xMax = xMin + patternWidth; for (let y = 0; y < patternHeight; y++) { patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } patterns.push(patternBitmap); } return patterns; } function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { const skip = null; if (enableSkip) { throw new Jbig2Error("skip is not supported"); } if (combinationOperator !== 0) { throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region"); } const regionBitmap = []; let i, j, row; for (i = 0; i < regionHeight; i++) { row = new Uint8Array(regionWidth); if (defaultPixelValue) { for (j = 0; j < regionWidth; j++) { row[j] = defaultPixelValue; } } regionBitmap.push(row); } const numberOfPatterns = patterns.length; const pattern0 = patterns[0]; const patternWidth = pattern0[0].length, patternHeight = pattern0.length; const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); const at = []; if (!mmr) { at.push({ x: template <= 1 ? 3 : 2, y: -1 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } const grayScaleBitPlanes = []; let mmrInput, bitmap; if (mmr) { mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); } for (i = bitsPerValue - 1; i >= 0; i--) { if (mmr) { bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); } else { bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); } grayScaleBitPlanes[i] = bitmap; } let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; for (mg = 0; mg < gridHeight; mg++) { for (ng = 0; ng < gridWidth; ng++) { bit = 0; patternIndex = 0; for (j = bitsPerValue - 1; j >= 0; j--) { bit = grayScaleBitPlanes[j][mg][ng] ^ bit; patternIndex |= bit << j; } patternBitmap = patterns[patternIndex]; x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { for (i = 0; i < patternHeight; i++) { regionRow = regionBitmap[y + i]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionRow[x + j] |= patternRow[j]; } } } else { let regionX, regionY; for (i = 0; i < patternHeight; i++) { regionY = y + i; if (regionY < 0 || regionY >= regionHeight) { continue; } regionRow = regionBitmap[regionY]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionX = x + j; if (regionX >= 0 && regionX < regionWidth) { regionRow[regionX] |= patternRow[j]; } } } } } } return regionBitmap; } function readSegmentHeader(data, start) { var segmentHeader = {}; segmentHeader.number = (0, _core_utils.readUint32)(data, start); var flags = data[start + 4]; var segmentType = flags & 0x3f; if (!SegmentTypes[segmentType]) { throw new Jbig2Error("invalid segment type: " + segmentType); } segmentHeader.type = segmentType; segmentHeader.typeName = SegmentTypes[segmentType]; segmentHeader.deferredNonRetain = !!(flags & 0x80); var pageAssociationFieldSize = !!(flags & 0x40); var referredFlags = data[start + 5]; var referredToCount = referredFlags >> 5 & 7; var retainBits = [referredFlags & 31]; var position = start + 6; if (referredFlags === 7) { referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; position += 3; var bytes = referredToCount + 7 >> 3; retainBits[0] = data[position++]; while (--bytes > 0) { retainBits.push(data[position++]); } } else if (referredFlags === 5 || referredFlags === 6) { throw new Jbig2Error("invalid referred-to flags"); } segmentHeader.retainBits = retainBits; let referredToSegmentNumberSize = 4; if (segmentHeader.number <= 256) { referredToSegmentNumberSize = 1; } else if (segmentHeader.number <= 65536) { referredToSegmentNumberSize = 2; } var referredTo = []; var i, ii; for (i = 0; i < referredToCount; i++) { let number; if (referredToSegmentNumberSize === 1) { number = data[position]; } else if (referredToSegmentNumberSize === 2) { number = (0, _core_utils.readUint16)(data, position); } else { number = (0, _core_utils.readUint32)(data, position); } referredTo.push(number); position += referredToSegmentNumberSize; } segmentHeader.referredTo = referredTo; if (!pageAssociationFieldSize) { segmentHeader.pageAssociation = data[position++]; } else { segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); position += 4; } segmentHeader.length = (0, _core_utils.readUint32)(data, position); position += 4; if (segmentHeader.length === 0xffffffff) { if (segmentType === 38) { var genericRegionInfo = readRegionSegmentInformation(data, position); var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; var genericRegionMmr = !!(genericRegionSegmentFlags & 1); var searchPatternLength = 6; var searchPattern = new Uint8Array(searchPatternLength); if (!genericRegionMmr) { searchPattern[0] = 0xff; searchPattern[1] = 0xac; } searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; searchPattern[5] = genericRegionInfo.height & 0xff; for (i = position, ii = data.length; i < ii; i++) { var j = 0; while (j < searchPatternLength && searchPattern[j] === data[i + j]) { j++; } if (j === searchPatternLength) { segmentHeader.length = i + searchPatternLength; break; } } if (segmentHeader.length === 0xffffffff) { throw new Jbig2Error("segment end was not found"); } } else { throw new Jbig2Error("invalid unknown segment length"); } } segmentHeader.headerEnd = position; return segmentHeader; } function readSegments(header, data, start, end) { var segments = []; var position = start; while (position < end) { var segmentHeader = readSegmentHeader(data, position); position = segmentHeader.headerEnd; var segment = { header: segmentHeader, data }; if (!header.randomAccess) { segment.start = position; position += segmentHeader.length; segment.end = position; } segments.push(segment); if (segmentHeader.type === 51) { break; } } if (header.randomAccess) { for (var i = 0, ii = segments.length; i < ii; i++) { segments[i].start = position; position += segments[i].header.length; segments[i].end = position; } } return segments; } function readRegionSegmentInformation(data, start) { return { width: (0, _core_utils.readUint32)(data, start), height: (0, _core_utils.readUint32)(data, start + 4), x: (0, _core_utils.readUint32)(data, start + 8), y: (0, _core_utils.readUint32)(data, start + 12), combinationOperator: data[start + 16] & 7 }; } var RegionSegmentInformationFieldLength = 17; function processSegment(segment, visitor) { var header = segment.header; var data = segment.data, position = segment.start, end = segment.end; var args, at, i, atLength; switch (header.type) { case 0: var dictionary = {}; var dictionaryFlags = (0, _core_utils.readUint16)(data, position); dictionary.huffman = !!(dictionaryFlags & 1); dictionary.refinement = !!(dictionaryFlags & 2); dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); dictionary.template = dictionaryFlags >> 10 & 3; dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; position += 2; if (!dictionary.huffman) { atLength = dictionary.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.at = at; } if (dictionary.refinement && !dictionary.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.refinementAt = at; } dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); position += 4; dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); position += 4; args = [dictionary, header.number, header.referredTo, data, position, end]; break; case 6: case 7: var textRegion = {}; textRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffman = !!(textRegionSegmentFlags & 1); textRegion.refinement = !!(textRegionSegmentFlags & 2); textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; textRegion.stripSize = 1 << textRegion.logStripSize; textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; textRegion.transposed = !!(textRegionSegmentFlags & 64); textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; if (textRegion.huffman) { var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffmanFS = textRegionHuffmanFlags & 3; textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); } if (textRegion.refinement && !textRegion.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } textRegion.refinementAt = at; } textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); position += 4; args = [textRegion, header.referredTo, data, position, end]; break; case 16: const patternDictionary = {}; const patternDictionaryFlags = data[position++]; patternDictionary.mmr = !!(patternDictionaryFlags & 1); patternDictionary.template = patternDictionaryFlags >> 1 & 3; patternDictionary.patternWidth = data[position++]; patternDictionary.patternHeight = data[position++]; patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); position += 4; args = [patternDictionary, header.number, data, position, end]; break; case 22: case 23: const halftoneRegion = {}; halftoneRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; const halftoneRegionFlags = data[position++]; halftoneRegion.mmr = !!(halftoneRegionFlags & 1); halftoneRegion.template = halftoneRegionFlags >> 1 & 3; halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); position += 2; halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); position += 2; args = [halftoneRegion, header.referredTo, data, position, end]; break; case 38: case 39: var genericRegion = {}; genericRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var genericRegionSegmentFlags = data[position++]; genericRegion.mmr = !!(genericRegionSegmentFlags & 1); genericRegion.template = genericRegionSegmentFlags >> 1 & 3; genericRegion.prediction = !!(genericRegionSegmentFlags & 8); if (!genericRegion.mmr) { atLength = genericRegion.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } genericRegion.at = at; } args = [genericRegion, data, position, end]; break; case 48: var pageInfo = { width: (0, _core_utils.readUint32)(data, position), height: (0, _core_utils.readUint32)(data, position + 4), resolutionX: (0, _core_utils.readUint32)(data, position + 8), resolutionY: (0, _core_utils.readUint32)(data, position + 12) }; if (pageInfo.height === 0xffffffff) { delete pageInfo.height; } var pageSegmentFlags = data[position + 16]; (0, _core_utils.readUint16)(data, position + 17); pageInfo.lossless = !!(pageSegmentFlags & 1); pageInfo.refinement = !!(pageSegmentFlags & 2); pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); args = [pageInfo]; break; case 49: break; case 50: break; case 51: break; case 53: args = [header.number, data, position, end]; break; case 62: break; default: throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented"); } var callbackName = "on" + header.typeName; if (callbackName in visitor) { visitor[callbackName].apply(visitor, args); } } function processSegments(segments, visitor) { for (var i = 0, ii = segments.length; i < ii; i++) { processSegment(segments[i], visitor); } } function parseJbig2Chunks(chunks) { var visitor = new SimpleSegmentVisitor(); for (var i = 0, ii = chunks.length; i < ii; i++) { var chunk = chunks[i]; var segments = readSegments({}, chunk.data, chunk.start, chunk.end); processSegments(segments, visitor); } return visitor.buffer; } function parseJbig2(data) { const end = data.length; let position = 0; if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) { throw new Jbig2Error("parseJbig2 - invalid header."); } const header = Object.create(null); position += 8; const flags = data[position++]; header.randomAccess = !(flags & 1); if (!(flags & 2)) { header.numberOfPages = (0, _core_utils.readUint32)(data, position); position += 4; } const segments = readSegments(header, data, position, end); const visitor = new SimpleSegmentVisitor(); processSegments(segments, visitor); const { width, height } = visitor.currentPageInfo; const bitPacked = visitor.buffer; const imgData = new Uint8ClampedArray(width * height); let q = 0, k = 0; for (let i = 0; i < height; i++) { let mask = 0, buffer; for (let j = 0; j < width; j++) { if (!mask) { mask = 128; buffer = bitPacked[k++]; } imgData[q++] = buffer & mask ? 0 : 255; mask >>= 1; } } return { imgData, width, height }; } function SimpleSegmentVisitor() {} SimpleSegmentVisitor.prototype = { onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { this.currentPageInfo = info; var rowSize = info.width + 7 >> 3; var buffer = new Uint8ClampedArray(rowSize * info.height); if (info.defaultPixelValue) { for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = 0xff; } } this.buffer = buffer; }, drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { var pageInfo = this.currentPageInfo; var width = regionInfo.width, height = regionInfo.height; var rowSize = pageInfo.width + 7 >> 3; var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; var buffer = this.buffer; var mask0 = 128 >> (regionInfo.x & 7); var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); var i, j, mask, offset; switch (combinationOperator) { case 0: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] |= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; case 2: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] ^= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } }, onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) { var regionInfo = region.info; var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { this.onImmediateGenericRegion.apply(this, arguments); }, onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { let huffmanTables, huffmanInput; if (dictionary.huffman) { huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); huffmanInput = new Reader(data, start, end); } var symbols = this.symbols; if (!symbols) { this.symbols = symbols = {}; } var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { const referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var decodingContext = new DecodingContext(data, start, end); symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); }, onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) { var regionInfo = region.info; let huffmanTables, huffmanInput; var symbols = this.symbols; var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { const referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); if (region.huffman) { huffmanInput = new Reader(data, start, end); huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); } var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { this.onImmediateTextRegion.apply(this, arguments); }, onPatternDictionary(dictionary, currentSegment, data, start, end) { let patterns = this.patterns; if (!patterns) { this.patterns = patterns = {}; } const decodingContext = new DecodingContext(data, start, end); patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); }, onImmediateHalftoneRegion(region, referredSegments, data, start, end) { const patterns = this.patterns[referredSegments[0]]; const regionInfo = region.info; const decodingContext = new DecodingContext(data, start, end); const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion.apply(this, arguments); }, onTables(currentSegment, data, start, end) { let customTables = this.customTables; if (!customTables) { this.customTables = customTables = {}; } customTables[currentSegment] = decodeTablesSegment(data, start, end); } }; function HuffmanLine(lineData) { if (lineData.length === 2) { this.isOOB = true; this.rangeLow = 0; this.prefixLength = lineData[0]; this.rangeLength = 0; this.prefixCode = lineData[1]; this.isLowerRange = false; } else { this.isOOB = false; this.rangeLow = lineData[0]; this.prefixLength = lineData[1]; this.rangeLength = lineData[2]; this.prefixCode = lineData[3]; this.isLowerRange = lineData[4] === "lower"; } } function HuffmanTreeNode(line) { this.children = []; if (line) { this.isLeaf = true; this.rangeLength = line.rangeLength; this.rangeLow = line.rangeLow; this.isLowerRange = line.isLowerRange; this.isOOB = line.isOOB; } else { this.isLeaf = false; } } HuffmanTreeNode.prototype = { buildTree(line, shift) { const bit = line.prefixCode >> shift & 1; if (shift <= 0) { this.children[bit] = new HuffmanTreeNode(line); } else { let node = this.children[bit]; if (!node) { this.children[bit] = node = new HuffmanTreeNode(null); } node.buildTree(line, shift - 1); } }, decodeNode(reader) { if (this.isLeaf) { if (this.isOOB) { return null; } const htOffset = reader.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); } const node = this.children[reader.readBit()]; if (!node) { throw new Jbig2Error("invalid Huffman data"); } return node.decodeNode(reader); } }; function HuffmanTable(lines, prefixCodesDone) { if (!prefixCodesDone) { this.assignPrefixCodes(lines); } this.rootNode = new HuffmanTreeNode(null); for (let i = 0, ii = lines.length; i < ii; i++) { const line = lines[i]; if (line.prefixLength > 0) { this.rootNode.buildTree(line, line.prefixLength - 1); } } } HuffmanTable.prototype = { decode(reader) { return this.rootNode.decodeNode(reader); }, assignPrefixCodes(lines) { const linesLength = lines.length; let prefixLengthMax = 0; for (let i = 0; i < linesLength; i++) { prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); } const histogram = new Uint32Array(prefixLengthMax + 1); for (let i = 0; i < linesLength; i++) { histogram[lines[i].prefixLength]++; } let currentLength = 1, firstCode = 0, currentCode, currentTemp, line; histogram[0] = 0; while (currentLength <= prefixLengthMax) { firstCode = firstCode + histogram[currentLength - 1] << 1; currentCode = firstCode; currentTemp = 0; while (currentTemp < linesLength) { line = lines[currentTemp]; if (line.prefixLength === currentLength) { line.prefixCode = currentCode; currentCode++; } currentTemp++; } currentLength++; } } }; function decodeTablesSegment(data, start, end) { const flags = data[start]; const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; const reader = new Reader(data, start + 9, end); const prefixSizeBits = (flags >> 1 & 7) + 1; const rangeSizeBits = (flags >> 4 & 7) + 1; const lines = []; let prefixLength, rangeLength, currentRangeLow = lowestValue; do { prefixLength = reader.readBits(prefixSizeBits); rangeLength = reader.readBits(rangeSizeBits); lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); currentRangeLow += 1 << rangeLength; } while (currentRangeLow < highestValue); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); if (flags & 1) { prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([prefixLength, 0])); } return new HuffmanTable(lines, false); } const standardTablesCache = {}; function getStandardTable(number) { let table = standardTablesCache[number]; if (table) { return table; } let lines; switch (number) { case 1: lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; break; case 2: lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; break; case 3: lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; break; case 4: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; break; case 5: lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; break; case 6: lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; break; case 7: lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; break; case 8: lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; break; case 9: lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; break; case 10: lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; break; case 11: lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 12: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; break; case 13: lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 14: lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; break; case 15: lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; break; default: throw new Jbig2Error(`standard table B.${number} does not exist`); } for (let i = 0, ii = lines.length; i < ii; i++) { lines[i] = new HuffmanLine(lines[i]); } table = new HuffmanTable(lines, true); standardTablesCache[number] = table; return table; } function Reader(data, start, end) { this.data = data; this.start = start; this.end = end; this.position = start; this.shift = -1; this.currentByte = 0; } Reader.prototype = { readBit() { if (this.shift < 0) { if (this.position >= this.end) { throw new Jbig2Error("end of data while reading bit"); } this.currentByte = this.data[this.position++]; this.shift = 7; } const bit = this.currentByte >> this.shift & 1; this.shift--; return bit; }, readBits(numBits) { let result = 0, i; for (i = numBits - 1; i >= 0; i--) { result |= this.readBit() << i; } return result; }, byteAlign() { this.shift = -1; }, next() { if (this.position >= this.end) { return -1; } return this.data[this.position++]; } }; function getCustomHuffmanTable(index, referredTo, customTables) { let currentIndex = 0; for (let i = 0, ii = referredTo.length; i < ii; i++) { const table = customTables[referredTo[i]]; if (table) { if (index === currentIndex) { return table; } currentIndex++; } } throw new Jbig2Error("can't find custom Huffman table"); } function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { const codes = []; for (let i = 0; i <= 34; i++) { const codeLength = reader.readBits(4); codes.push(new HuffmanLine([i, codeLength, 0, 0])); } const runCodesTable = new HuffmanTable(codes, false); codes.length = 0; for (let i = 0; i < numberOfSymbols;) { const codeLength = runCodesTable.decode(reader); if (codeLength >= 32) { let repeatedLength, numberOfRepeats, j; switch (codeLength) { case 32: if (i === 0) { throw new Jbig2Error("no previous value in symbol ID table"); } numberOfRepeats = reader.readBits(2) + 3; repeatedLength = codes[i - 1].prefixLength; break; case 33: numberOfRepeats = reader.readBits(3) + 3; repeatedLength = 0; break; case 34: numberOfRepeats = reader.readBits(7) + 11; repeatedLength = 0; break; default: throw new Jbig2Error("invalid code length in symbol ID table"); } for (j = 0; j < numberOfRepeats; j++) { codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); i++; } } else { codes.push(new HuffmanLine([i, codeLength, 0, 0])); i++; } } reader.byteAlign(); const symbolIDTable = new HuffmanTable(codes, false); let customIndex = 0, tableFirstS, tableDeltaS, tableDeltaT; switch (textRegion.huffmanFS) { case 0: case 1: tableFirstS = getStandardTable(textRegion.huffmanFS + 6); break; case 3: tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman FS selector"); } switch (textRegion.huffmanDS) { case 0: case 1: case 2: tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); break; case 3: tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DS selector"); } switch (textRegion.huffmanDT) { case 0: case 1: case 2: tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); break; case 3: tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DT selector"); } if (textRegion.refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } return { symbolIDTable, tableFirstS, tableDeltaS, tableDeltaT }; } function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { let customIndex = 0, tableDeltaHeight, tableDeltaWidth; switch (dictionary.huffmanDHSelector) { case 0: case 1: tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); break; case 3: tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DH selector"); } switch (dictionary.huffmanDWSelector) { case 0: case 1: tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); break; case 3: tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DW selector"); } let tableBitmapSize, tableAggregateInstances; if (dictionary.bitmapSizeSelector) { tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; } else { tableBitmapSize = getStandardTable(1); } if (dictionary.aggregationInstancesSelector) { tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); } else { tableAggregateInstances = getStandardTable(1); } return { tableDeltaHeight, tableDeltaWidth, tableBitmapSize, tableAggregateInstances }; } function readUncompressedBitmap(reader, width, height) { const bitmap = []; for (let y = 0; y < height; y++) { const row = new Uint8Array(width); bitmap.push(row); for (let x = 0; x < width; x++) { row[x] = reader.readBit(); } reader.byteAlign(); } return bitmap; } function decodeMMRBitmap(input, width, height, endOfBlock) { const params = { K: -1, Columns: width, Rows: height, BlackIs1: true, EndOfBlock: endOfBlock }; const decoder = new _ccitt.CCITTFaxDecoder(input, params); const bitmap = []; let currentByte, eof = false; for (let y = 0; y < height; y++) { const row = new Uint8Array(width); bitmap.push(row); let shift = -1; for (let x = 0; x < width; x++) { if (shift < 0) { currentByte = decoder.readNextChar(); if (currentByte === -1) { currentByte = 0; eof = true; } shift = 7; } row[x] = currentByte >> shift & 1; shift--; } } if (endOfBlock && !eof) { const lookForEOFLimit = 5; for (let i = 0; i < lookForEOFLimit; i++) { if (decoder.readNextChar() === -1) { break; } } } return bitmap; } function Jbig2Image() {} Jbig2Image.prototype = { parseChunks(chunks) { return parseJbig2Chunks(chunks); }, parse(data) { const { imgData, width, height } = parseJbig2(data); this.width = width; this.height = height; return imgData; } }; return Jbig2Image; }(); exports.Jbig2Image = Jbig2Image; /***/ }), /* 17 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ArithmeticDecoder = void 0; const QeTable = [{ qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1 }, { qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0 }, { qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0 }, { qe: 0x0ac1, nmps: 4, nlps: 12, switchFlag: 0 }, { qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0 }, { qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0 }, { qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1 }, { qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0 }, { qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0 }, { qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0 }, { qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0 }, { qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0 }, { qe: 0x1c01, nmps: 13, nlps: 20, switchFlag: 0 }, { qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0 }, { qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1 }, { qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0 }, { qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0 }, { qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0 }, { qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0 }, { qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0 }, { qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0 }, { qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0 }, { qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0 }, { qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0 }, { qe: 0x1c01, nmps: 25, nlps: 22, switchFlag: 0 }, { qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0 }, { qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0 }, { qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0 }, { qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0 }, { qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0 }, { qe: 0x0ac1, nmps: 31, nlps: 28, switchFlag: 0 }, { qe: 0x09c1, nmps: 32, nlps: 29, switchFlag: 0 }, { qe: 0x08a1, nmps: 33, nlps: 30, switchFlag: 0 }, { qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0 }, { qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0 }, { qe: 0x02a1, nmps: 36, nlps: 33, switchFlag: 0 }, { qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0 }, { qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0 }, { qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0 }, { qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0 }, { qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0 }, { qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0 }, { qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0 }, { qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0 }, { qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0 }, { qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0 }, { qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0 }]; class ArithmeticDecoder { constructor(data, start, end) { this.data = data; this.bp = start; this.dataEnd = end; this.chigh = data[start]; this.clow = 0; this.byteIn(); this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; this.clow = this.clow << 7 & 0xffff; this.ct -= 7; this.a = 0x8000; } byteIn() { const data = this.data; let bp = this.bp; if (data[bp] === 0xff) { if (data[bp + 1] > 0x8f) { this.clow += 0xff00; this.ct = 8; } else { bp++; this.clow += data[bp] << 9; this.ct = 7; this.bp = bp; } } else { bp++; this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; this.ct = 8; this.bp = bp; } if (this.clow > 0xffff) { this.chigh += this.clow >> 16; this.clow &= 0xffff; } } readBit(contexts, pos) { let cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; const qeTableIcx = QeTable[cx_index]; const qeIcx = qeTableIcx.qe; let d; let a = this.a - qeIcx; if (this.chigh < qeIcx) { if (a < qeIcx) { a = qeIcx; d = cx_mps; cx_index = qeTableIcx.nmps; } else { a = qeIcx; d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } } else { this.chigh -= qeIcx; if ((a & 0x8000) !== 0) { this.a = a; return cx_mps; } if (a < qeIcx) { d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } else { d = cx_mps; cx_index = qeTableIcx.nmps; } } do { if (this.ct === 0) { this.byteIn(); } a <<= 1; this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; this.clow = this.clow << 1 & 0xffff; this.ct--; } while ((a & 0x8000) === 0); this.a = a; contexts[pos] = cx_index << 1 | cx_mps; return d; } } exports.ArithmeticDecoder = ArithmeticDecoder; /***/ }), /* 18 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpegStream = void 0; var _stream = __w_pdfjs_require__(12); var _primitives = __w_pdfjs_require__(5); var _jpg = __w_pdfjs_require__(19); var _util = __w_pdfjs_require__(2); const JpegStream = function JpegStreamClosure() { function JpegStream(stream, maybeLength, dict, params) { let ch; while ((ch = stream.getByte()) !== -1) { if (ch === 0xff) { stream.skip(-1); break; } } this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpegStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpegStream.prototype, "bytes", { get: function JpegStream_bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpegStream.prototype.ensureBuffer = function (requested) {}; JpegStream.prototype.readBlock = function () { if (this.eof) { return; } const jpegOptions = { decodeTransform: undefined, colorTransform: undefined }; const decodeArr = this.dict.getArray("Decode", "D"); if (this.forceRGB && Array.isArray(decodeArr)) { const bitsPerComponent = this.dict.get("BitsPerComponent") || 8; const decodeArrLength = decodeArr.length; const transform = new Int32Array(decodeArrLength); let transformNeeded = false; const maxValue = (1 << bitsPerComponent) - 1; for (let i = 0; i < decodeArrLength; i += 2) { transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; transform[i + 1] = decodeArr[i] * maxValue | 0; if (transform[i] !== 256 || transform[i + 1] !== 0) { transformNeeded = true; } } if (transformNeeded) { jpegOptions.decodeTransform = transform; } } if ((0, _primitives.isDict)(this.params)) { const colorTransform = this.params.get("ColorTransform"); if (Number.isInteger(colorTransform)) { jpegOptions.colorTransform = colorTransform; } } const jpegImage = new _jpg.JpegImage(jpegOptions); jpegImage.parse(this.bytes); const data = jpegImage.getData({ width: this.drawWidth, height: this.drawHeight, forceRGB: this.forceRGB, isSourcePDF: true }); this.buffer = data; this.bufferLength = data.length; this.eof = true; }; return JpegStream; }(); exports.JpegStream = JpegStream; /***/ }), /* 19 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpegImage = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(8); class JpegError extends _util.BaseException { constructor(msg) { super(`JPEG error: ${msg}`); } } class DNLMarkerError extends _util.BaseException { constructor(message, scanLines) { super(message); this.scanLines = scanLines; } } class EOIMarkerError extends _util.BaseException {} var JpegImage = function JpegImageClosure() { var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); var dctCos1 = 4017; var dctSin1 = 799; var dctCos3 = 3406; var dctSin3 = 2276; var dctCos6 = 1567; var dctSin6 = 3784; var dctSqrt2 = 5793; var dctSqrt1d2 = 2896; function JpegImage({ decodeTransform = null, colorTransform = -1 } = {}) { this._decodeTransform = decodeTransform; this._colorTransform = colorTransform; } function buildHuffmanTable(codeLengths, values) { var k = 0, code = [], i, j, length = 16; while (length > 0 && !codeLengths[length - 1]) { length--; } code.push({ children: [], index: 0 }); var p = code[0], q; for (i = 0; i < length; i++) { for (j = 0; j < codeLengths[i]; j++) { p = code.pop(); p.children[p.index] = values[k]; while (p.index > 0) { p = code.pop(); } p.index++; code.push(p); while (code.length <= i) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } k++; } if (i + 1 < length) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } } return code[0].children; } function getBlockBufferOffset(component, row, col) { return 64 * ((component.blocksPerLine + 1) * row + col); } function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) { var mcusPerLine = frame.mcusPerLine; var progressive = frame.progressive; const startOffset = offset; let bitsData = 0, bitsCount = 0; function readBit() { if (bitsCount > 0) { bitsCount--; return bitsData >> bitsCount & 1; } bitsData = data[offset++]; if (bitsData === 0xff) { var nextByte = data[offset++]; if (nextByte) { if (nextByte === 0xdc && parseDNLMarker) { offset += 2; const scanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; if (scanLines > 0 && scanLines !== frame.scanLines) { throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); } } else if (nextByte === 0xd9) { if (parseDNLMarker) { const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) { throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); } } throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); } throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`); } } bitsCount = 7; return bitsData >>> 7; } function decodeHuffman(tree) { var node = tree; while (true) { node = node[readBit()]; switch (typeof node) { case "number": return node; case "object": continue; } throw new JpegError("invalid huffman sequence"); } } function receive(length) { var n = 0; while (length > 0) { n = n << 1 | readBit(); length--; } return n; } function receiveAndExtend(length) { if (length === 1) { return readBit() === 1 ? 1 : -1; } var n = receive(length); if (n >= 1 << length - 1) { return n; } return n + (-1 << length) + 1; } function decodeBaseline(component, blockOffset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t); component.blockData[blockOffset] = component.pred += diff; var k = 1; while (k < 64) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s); k++; } } function decodeDCFirst(component, blockOffset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t) << successive; component.blockData[blockOffset] = component.pred += diff; } function decodeDCSuccessive(component, blockOffset) { component.blockData[blockOffset] |= readBit() << successive; } var eobrun = 0; function decodeACFirst(component, blockOffset) { if (eobrun > 0) { eobrun--; return; } var k = spectralStart, e = spectralEnd; while (k <= e) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r) - 1; break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); k++; } } var successiveACState = 0, successiveACNextValue; function decodeACSuccessive(component, blockOffset) { var k = spectralStart; var e = spectralEnd; var r = 0; var s; var rs; while (k <= e) { const offsetZ = blockOffset + dctZigZag[k]; const sign = component.blockData[offsetZ] < 0 ? -1 : 1; switch (successiveACState) { case 0: rs = decodeHuffman(component.huffmanTableAC); s = rs & 15; r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r); successiveACState = 4; } else { r = 16; successiveACState = 1; } } else { if (s !== 1) { throw new JpegError("invalid ACn encoding"); } successiveACNextValue = receiveAndExtend(s); successiveACState = r ? 2 : 3; } continue; case 1: case 2: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { r--; if (r === 0) { successiveACState = successiveACState === 2 ? 3 : 0; } } break; case 3: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { component.blockData[offsetZ] = successiveACNextValue << successive; successiveACState = 0; } break; case 4: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } break; } k++; } if (successiveACState === 4) { eobrun--; if (eobrun === 0) { successiveACState = 0; } } } let blockRow = 0; function decodeMcu(component, decode, mcu, row, col) { var mcuRow = mcu / mcusPerLine | 0; var mcuCol = mcu % mcusPerLine; blockRow = mcuRow * component.v + row; var blockCol = mcuCol * component.h + col; const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } function decodeBlock(component, decode, mcu) { blockRow = mcu / component.blocksPerLine | 0; var blockCol = mcu % component.blocksPerLine; const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } var componentsLength = components.length; var component, i, j, k, n; var decodeFn; if (progressive) { if (spectralStart === 0) { decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; } else { decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; } } else { decodeFn = decodeBaseline; } var mcu = 0, fileMarker; var mcuExpected; if (componentsLength === 1) { mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; } else { mcuExpected = mcusPerLine * frame.mcusPerColumn; } var h, v; while (mcu <= mcuExpected) { var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; if (mcuToRead > 0) { for (i = 0; i < componentsLength; i++) { components[i].pred = 0; } eobrun = 0; if (componentsLength === 1) { component = components[0]; for (n = 0; n < mcuToRead; n++) { decodeBlock(component, decodeFn, mcu); mcu++; } } else { for (n = 0; n < mcuToRead; n++) { for (i = 0; i < componentsLength; i++) { component = components[i]; h = component.h; v = component.v; for (j = 0; j < v; j++) { for (k = 0; k < h; k++) { decodeMcu(component, decodeFn, mcu, j, k); } } } mcu++; } } } bitsCount = 0; fileMarker = findNextFileMarker(data, offset); if (!fileMarker) { break; } if (fileMarker.invalid) { const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`); offset = fileMarker.offset; } if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { offset += 2; } else { break; } } return offset - startOffset; } function quantizeAndInverse(component, blockBufferOffset, p) { var qt = component.quantizationTable, blockData = component.blockData; var v0, v1, v2, v3, v4, v5, v6, v7; var p0, p1, p2, p3, p4, p5, p6, p7; var t; if (!qt) { throw new JpegError("missing required Quantization Table."); } for (var row = 0; row < 64; row += 8) { p0 = blockData[blockBufferOffset + row]; p1 = blockData[blockBufferOffset + row + 1]; p2 = blockData[blockBufferOffset + row + 2]; p3 = blockData[blockBufferOffset + row + 3]; p4 = blockData[blockBufferOffset + row + 4]; p5 = blockData[blockBufferOffset + row + 5]; p6 = blockData[blockBufferOffset + row + 6]; p7 = blockData[blockBufferOffset + row + 7]; p0 *= qt[row]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 512 >> 10; p[row] = t; p[row + 1] = t; p[row + 2] = t; p[row + 3] = t; p[row + 4] = t; p[row + 5] = t; p[row + 6] = t; p[row + 7] = t; continue; } p1 *= qt[row + 1]; p2 *= qt[row + 2]; p3 *= qt[row + 3]; p4 *= qt[row + 4]; p5 *= qt[row + 5]; p6 *= qt[row + 6]; p7 *= qt[row + 7]; v0 = dctSqrt2 * p0 + 128 >> 8; v1 = dctSqrt2 * p4 + 128 >> 8; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; v5 = p3 << 4; v6 = p5 << 4; v0 = v0 + v1 + 1 >> 1; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p[row] = v0 + v7; p[row + 7] = v0 - v7; p[row + 1] = v1 + v6; p[row + 6] = v1 - v6; p[row + 2] = v2 + v5; p[row + 5] = v2 - v5; p[row + 3] = v3 + v4; p[row + 4] = v3 - v4; } for (var col = 0; col < 8; ++col) { p0 = p[col]; p1 = p[col + 8]; p2 = p[col + 16]; p3 = p[col + 24]; p4 = p[col + 32]; p5 = p[col + 40]; p6 = p[col + 48]; p7 = p[col + 56]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 8192 >> 14; if (t < -2040) { t = 0; } else if (t >= 2024) { t = 255; } else { t = t + 2056 >> 4; } blockData[blockBufferOffset + col] = t; blockData[blockBufferOffset + col + 8] = t; blockData[blockBufferOffset + col + 16] = t; blockData[blockBufferOffset + col + 24] = t; blockData[blockBufferOffset + col + 32] = t; blockData[blockBufferOffset + col + 40] = t; blockData[blockBufferOffset + col + 48] = t; blockData[blockBufferOffset + col + 56] = t; continue; } v0 = dctSqrt2 * p0 + 2048 >> 12; v1 = dctSqrt2 * p4 + 2048 >> 12; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; v5 = p3; v6 = p5; v0 = (v0 + v1 + 1 >> 1) + 4112; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p0 = v0 + v7; p7 = v0 - v7; p1 = v1 + v6; p6 = v1 - v6; p2 = v2 + v5; p5 = v2 - v5; p3 = v3 + v4; p4 = v3 - v4; if (p0 < 16) { p0 = 0; } else if (p0 >= 4080) { p0 = 255; } else { p0 >>= 4; } if (p1 < 16) { p1 = 0; } else if (p1 >= 4080) { p1 = 255; } else { p1 >>= 4; } if (p2 < 16) { p2 = 0; } else if (p2 >= 4080) { p2 = 255; } else { p2 >>= 4; } if (p3 < 16) { p3 = 0; } else if (p3 >= 4080) { p3 = 255; } else { p3 >>= 4; } if (p4 < 16) { p4 = 0; } else if (p4 >= 4080) { p4 = 255; } else { p4 >>= 4; } if (p5 < 16) { p5 = 0; } else if (p5 >= 4080) { p5 = 255; } else { p5 >>= 4; } if (p6 < 16) { p6 = 0; } else if (p6 >= 4080) { p6 = 255; } else { p6 >>= 4; } if (p7 < 16) { p7 = 0; } else if (p7 >= 4080) { p7 = 255; } else { p7 >>= 4; } blockData[blockBufferOffset + col] = p0; blockData[blockBufferOffset + col + 8] = p1; blockData[blockBufferOffset + col + 16] = p2; blockData[blockBufferOffset + col + 24] = p3; blockData[blockBufferOffset + col + 32] = p4; blockData[blockBufferOffset + col + 40] = p5; blockData[blockBufferOffset + col + 48] = p6; blockData[blockBufferOffset + col + 56] = p7; } } function buildComponentData(frame, component) { var blocksPerLine = component.blocksPerLine; var blocksPerColumn = component.blocksPerColumn; var computationBuffer = new Int16Array(64); for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { var offset = getBlockBufferOffset(component, blockRow, blockCol); quantizeAndInverse(component, offset, computationBuffer); } } return component.blockData; } function findNextFileMarker(data, currentPos, startPos = currentPos) { const maxPos = data.length - 1; var newPos = startPos < currentPos ? startPos : currentPos; if (currentPos >= maxPos) { return null; } var currentMarker = (0, _core_utils.readUint16)(data, currentPos); if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { return { invalid: null, marker: currentMarker, offset: currentPos }; } var newMarker = (0, _core_utils.readUint16)(data, newPos); while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { if (++newPos >= maxPos) { return null; } newMarker = (0, _core_utils.readUint16)(data, newPos); } return { invalid: currentMarker.toString(16), marker: newMarker, offset: newPos }; } JpegImage.prototype = { parse(data, { dnlScanLines = null } = {}) { function readDataBlock() { const length = (0, _core_utils.readUint16)(data, offset); offset += 2; let endOffset = offset + length - 2; var fileMarker = findNextFileMarker(data, endOffset, offset); if (fileMarker && fileMarker.invalid) { (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); endOffset = fileMarker.offset; } var array = data.subarray(offset, endOffset); offset += array.length; return array; } function prepareComponents(frame) { var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); for (var i = 0; i < frame.components.length; i++) { component = frame.components[i]; var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); var blocksPerLineForMcu = mcusPerLine * component.h; var blocksPerColumnForMcu = mcusPerColumn * component.v; var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); component.blockData = new Int16Array(blocksBufferSize); component.blocksPerLine = blocksPerLine; component.blocksPerColumn = blocksPerColumn; } frame.mcusPerLine = mcusPerLine; frame.mcusPerColumn = mcusPerColumn; } var offset = 0; var jfif = null; var adobe = null; var frame, resetInterval; let numSOSMarkers = 0; var quantizationTables = []; var huffmanTablesAC = [], huffmanTablesDC = []; let fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; if (fileMarker !== 0xffd8) { throw new JpegError("SOI not found"); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; markerLoop: while (fileMarker !== 0xffd9) { var i, j, l; switch (fileMarker) { case 0xffe0: case 0xffe1: case 0xffe2: case 0xffe3: case 0xffe4: case 0xffe5: case 0xffe6: case 0xffe7: case 0xffe8: case 0xffe9: case 0xffea: case 0xffeb: case 0xffec: case 0xffed: case 0xffee: case 0xffef: case 0xfffe: var appData = readDataBlock(); if (fileMarker === 0xffe0) { if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { jfif = { version: { major: appData[5], minor: appData[6] }, densityUnits: appData[7], xDensity: appData[8] << 8 | appData[9], yDensity: appData[10] << 8 | appData[11], thumbWidth: appData[12], thumbHeight: appData[13], thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) }; } } if (fileMarker === 0xffee) { if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { adobe = { version: appData[5] << 8 | appData[6], flags0: appData[7] << 8 | appData[8], flags1: appData[9] << 8 | appData[10], transformCode: appData[11] }; } } break; case 0xffdb: const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); offset += 2; var quantizationTablesEnd = quantizationTablesLength + offset - 2; var z; while (offset < quantizationTablesEnd) { var quantizationTableSpec = data[offset++]; var tableData = new Uint16Array(64); if (quantizationTableSpec >> 4 === 0) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = data[offset++]; } } else if (quantizationTableSpec >> 4 === 1) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = (0, _core_utils.readUint16)(data, offset); offset += 2; } } else { throw new JpegError("DQT - invalid table spec"); } quantizationTables[quantizationTableSpec & 15] = tableData; } break; case 0xffc0: case 0xffc1: case 0xffc2: if (frame) { throw new JpegError("Only single frame JPEGs supported"); } offset += 2; frame = {}; frame.extended = fileMarker === 0xffc1; frame.progressive = fileMarker === 0xffc2; frame.precision = data[offset++]; const sofScanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.scanLines = dnlScanLines || sofScanLines; frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.components = []; frame.componentIds = {}; var componentsCount = data[offset++], componentId; var maxH = 0, maxV = 0; for (i = 0; i < componentsCount; i++) { componentId = data[offset]; var h = data[offset + 1] >> 4; var v = data[offset + 1] & 15; if (maxH < h) { maxH = h; } if (maxV < v) { maxV = v; } var qId = data[offset + 2]; l = frame.components.push({ h, v, quantizationId: qId, quantizationTable: null }); frame.componentIds[componentId] = l - 1; offset += 3; } frame.maxH = maxH; frame.maxV = maxV; prepareComponents(frame); break; case 0xffc4: const huffmanLength = (0, _core_utils.readUint16)(data, offset); offset += 2; for (i = 2; i < huffmanLength;) { var huffmanTableSpec = data[offset++]; var codeLengths = new Uint8Array(16); var codeLengthSum = 0; for (j = 0; j < 16; j++, offset++) { codeLengthSum += codeLengths[j] = data[offset]; } var huffmanValues = new Uint8Array(codeLengthSum); for (j = 0; j < codeLengthSum; j++, offset++) { huffmanValues[j] = data[offset]; } i += 17 + codeLengthSum; (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); } break; case 0xffdd: offset += 2; resetInterval = (0, _core_utils.readUint16)(data, offset); offset += 2; break; case 0xffda: const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; offset += 2; var selectorsCount = data[offset++]; var components = [], component; for (i = 0; i < selectorsCount; i++) { const index = data[offset++]; var componentIndex = frame.componentIds[index]; component = frame.components[componentIndex]; component.index = index; var tableSpec = data[offset++]; component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; components.push(component); } var spectralStart = data[offset++]; var spectralEnd = data[offset++]; var successiveApproximation = data[offset++]; try { var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); offset += processed; } catch (ex) { if (ex instanceof DNLMarkerError) { (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`); return this.parse(data, { dnlScanLines: ex.scanLines }); } else if (ex instanceof EOIMarkerError) { (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`); break markerLoop; } throw ex; } break; case 0xffdc: offset += 4; break; case 0xffff: if (data[offset] !== 0xff) { offset--; } break; default: const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); if (nextFileMarker && nextFileMarker.invalid) { (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); offset = nextFileMarker.offset; break; } if (offset >= data.length - 1) { (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); break markerLoop; } throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; } this.width = frame.samplesPerLine; this.height = frame.scanLines; this.jfif = jfif; this.adobe = adobe; this.components = []; for (i = 0; i < frame.components.length; i++) { component = frame.components[i]; var quantizationTable = quantizationTables[component.quantizationId]; if (quantizationTable) { component.quantizationTable = quantizationTable; } this.components.push({ index: component.index, output: buildComponentData(frame, component), scaleX: component.h / frame.maxH, scaleY: component.v / frame.maxV, blocksPerLine: component.blocksPerLine, blocksPerColumn: component.blocksPerColumn }); } this.numComponents = this.components.length; return undefined; }, _getLinearizedBlockData(width, height, isSourcePDF = false) { var scaleX = this.width / width, scaleY = this.height / height; var component, componentScaleX, componentScaleY, blocksPerScanline; var x, y, i, j, k; var index; var offset = 0; var output; var numComponents = this.components.length; var dataLength = width * height * numComponents; var data = new Uint8ClampedArray(dataLength); var xScaleBlockOffset = new Uint32Array(width); var mask3LSB = 0xfffffff8; let lastComponentScaleX; for (i = 0; i < numComponents; i++) { component = this.components[i]; componentScaleX = component.scaleX * scaleX; componentScaleY = component.scaleY * scaleY; offset = i; output = component.output; blocksPerScanline = component.blocksPerLine + 1 << 3; if (componentScaleX !== lastComponentScaleX) { for (x = 0; x < width; x++) { j = 0 | x * componentScaleX; xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; } lastComponentScaleX = componentScaleX; } for (y = 0; y < height; y++) { j = 0 | y * componentScaleY; index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; for (x = 0; x < width; x++) { data[offset] = output[index + xScaleBlockOffset[x]]; offset += numComponents; } } } let transform = this._decodeTransform; if (!isSourcePDF && numComponents === 4 && !transform) { transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); } if (transform) { for (i = 0; i < dataLength;) { for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; } } } return data; }, get _isColorConversionNeeded() { if (this.adobe) { return !!this.adobe.transformCode; } if (this.numComponents === 3) { if (this._colorTransform === 0) { return false; } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { return false; } return true; } if (this._colorTransform === 1) { return true; } return false; }, _convertYccToRgb: function convertYccToRgb(data) { var Y, Cb, Cr; for (var i = 0, length = data.length; i < length; i += 3) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = Y - 179.456 + 1.402 * Cr; data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; data[i + 2] = Y - 226.816 + 1.772 * Cb; } return data; }, _convertYcckToRgb: function convertYcckToRgb(data) { var Y, Cb, Cr, k; var offset = 0; for (var i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; k = data[i + 3]; data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); } return data.subarray(0, offset); }, _convertYcckToCmyk: function convertYcckToCmyk(data) { var Y, Cb, Cr; for (var i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = 434.456 - Y - 1.402 * Cr; data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; data[i + 2] = 481.816 - Y - 1.772 * Cb; } return data; }, _convertCmykToRgb: function convertCmykToRgb(data) { var c, m, y, k; var offset = 0; for (var i = 0, length = data.length; i < length; i += 4) { c = data[i]; m = data[i + 1]; y = data[i + 2]; k = data[i + 3]; data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168); data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); } return data.subarray(0, offset); }, getData({ width, height, forceRGB = false, isSourcePDF = false }) { if (this.numComponents > 4) { throw new JpegError("Unsupported color mode"); } var data = this._getLinearizedBlockData(width, height, isSourcePDF); if (this.numComponents === 1 && forceRGB) { var dataLength = data.length; var rgbData = new Uint8ClampedArray(dataLength * 3); var offset = 0; for (var i = 0; i < dataLength; i++) { var grayColor = data[i]; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; } return rgbData; } else if (this.numComponents === 3 && this._isColorConversionNeeded) { return this._convertYccToRgb(data); } else if (this.numComponents === 4) { if (this._isColorConversionNeeded) { if (forceRGB) { return this._convertYcckToRgb(data); } return this._convertYcckToCmyk(data); } else if (forceRGB) { return this._convertCmykToRgb(data); } } return data; } }; return JpegImage; }(); exports.JpegImage = JpegImage; /***/ }), /* 20 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpxStream = void 0; var _stream = __w_pdfjs_require__(12); var _jpx = __w_pdfjs_require__(21); var _util = __w_pdfjs_require__(2); const JpxStream = function JpxStreamClosure() { function JpxStream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpxStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpxStream.prototype, "bytes", { get: function JpxStream_bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpxStream.prototype.ensureBuffer = function (requested) {}; JpxStream.prototype.readBlock = function () { if (this.eof) { return; } const jpxImage = new _jpx.JpxImage(); jpxImage.parse(this.bytes); const width = jpxImage.width; const height = jpxImage.height; const componentsCount = jpxImage.componentsCount; const tileCount = jpxImage.tiles.length; if (tileCount === 1) { this.buffer = jpxImage.tiles[0].items; } else { const data = new Uint8ClampedArray(width * height * componentsCount); for (let k = 0; k < tileCount; k++) { const tileComponents = jpxImage.tiles[k]; const tileWidth = tileComponents.width; const tileHeight = tileComponents.height; const tileLeft = tileComponents.left; const tileTop = tileComponents.top; const src = tileComponents.items; let srcPosition = 0; let dataPosition = (width * tileTop + tileLeft) * componentsCount; const imgRowSize = width * componentsCount; const tileRowSize = tileWidth * componentsCount; for (let j = 0; j < tileHeight; j++) { const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); data.set(rowBytes, dataPosition); srcPosition += tileRowSize; dataPosition += imgRowSize; } } this.buffer = data; } this.bufferLength = this.buffer.length; this.eof = true; }; return JpxStream; }(); exports.JpxStream = JpxStream; /***/ }), /* 21 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpxImage = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(8); var _arithmetic_decoder = __w_pdfjs_require__(17); class JpxError extends _util.BaseException { constructor(msg) { super(`JPX error: ${msg}`); } } var JpxImage = function JpxImageClosure() { var SubbandsGainLog2 = { LL: 0, LH: 1, HL: 1, HH: 2 }; function JpxImage() { this.failOnCorruptedImage = false; } JpxImage.prototype = { parse: function JpxImage_parse(data) { var head = (0, _core_utils.readUint16)(data, 0); if (head === 0xff4f) { this.parseCodestream(data, 0, data.length); return; } var position = 0, length = data.length; while (position < length) { var headerSize = 8; var lbox = (0, _core_utils.readUint32)(data, position); var tbox = (0, _core_utils.readUint32)(data, position + 4); position += headerSize; if (lbox === 1) { lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); position += 8; headerSize += 8; } if (lbox === 0) { lbox = length - position + headerSize; } if (lbox < headerSize) { throw new JpxError("Invalid box field size"); } var dataLength = lbox - headerSize; var jumpDataLength = true; switch (tbox) { case 0x6a703268: jumpDataLength = false; break; case 0x636f6c72: var method = data[position]; if (method === 1) { var colorspace = (0, _core_utils.readUint32)(data, position + 3); switch (colorspace) { case 16: case 17: case 18: break; default: (0, _util.warn)("Unknown colorspace " + colorspace); break; } } else if (method === 2) { (0, _util.info)("ICC profile not supported"); } break; case 0x6a703263: this.parseCodestream(data, position, position + dataLength); break; case 0x6a502020: if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { (0, _util.warn)("Invalid JP2 signature"); } break; case 0x6a501a1a: case 0x66747970: case 0x72726571: case 0x72657320: case 0x69686472: break; default: var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); (0, _util.warn)("Unsupported header type " + tbox + " (" + headerType + ")"); break; } if (jumpDataLength) { position += dataLength; } } }, parseImageProperties: function JpxImage_parseImageProperties(stream) { var newByte = stream.getByte(); while (newByte >= 0) { var oldByte = newByte; newByte = stream.getByte(); var code = oldByte << 8 | newByte; if (code === 0xff51) { stream.skip(4); var Xsiz = stream.getInt32() >>> 0; var Ysiz = stream.getInt32() >>> 0; var XOsiz = stream.getInt32() >>> 0; var YOsiz = stream.getInt32() >>> 0; stream.skip(16); var Csiz = stream.getUint16(); this.width = Xsiz - XOsiz; this.height = Ysiz - YOsiz; this.componentsCount = Csiz; this.bitsPerComponent = 8; return; } } throw new JpxError("No size marker found in JPX stream"); }, parseCodestream: function JpxImage_parseCodestream(data, start, end) { var context = {}; var doNotRecover = false; try { var position = start; while (position + 1 < end) { var code = (0, _core_utils.readUint16)(data, position); position += 2; var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; switch (code) { case 0xff4f: context.mainHeader = true; break; case 0xffd9: break; case 0xff51: length = (0, _core_utils.readUint16)(data, position); var siz = {}; siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); var componentsCount = (0, _core_utils.readUint16)(data, position + 36); siz.Csiz = componentsCount; var components = []; j = position + 38; for (var i = 0; i < componentsCount; i++) { var component = { precision: (data[j] & 0x7f) + 1, isSigned: !!(data[j] & 0x80), XRsiz: data[j + 1], YRsiz: data[j + 2] }; j += 3; calculateComponentDimensions(component, siz); components.push(component); } context.SIZ = siz; context.components = components; calculateTileGrids(context, components); context.QCC = []; context.COC = []; break; case 0xff5c: length = (0, _core_utils.readUint16)(data, position); var qcd = {}; j = position + 2; sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcd.noQuantization = spqcdSize === 8; qcd.scalarExpounded = scalarExpounded; qcd.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { var spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcd.SPqcds = spqcds; if (context.mainHeader) { context.QCD = qcd; } else { context.currentTile.QCD = qcd; context.currentTile.QCC = []; } break; case 0xff5d: length = (0, _core_utils.readUint16)(data, position); var qcc = {}; j = position + 2; var cqcc; if (context.SIZ.Csiz < 257) { cqcc = data[j++]; } else { cqcc = (0, _core_utils.readUint16)(data, j); j += 2; } sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcc.noQuantization = spqcdSize === 8; qcc.scalarExpounded = scalarExpounded; qcc.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcc.SPqcds = spqcds; if (context.mainHeader) { context.QCC[cqcc] = qcc; } else { context.currentTile.QCC[cqcc] = qcc; } break; case 0xff52: length = (0, _core_utils.readUint16)(data, position); var cod = {}; j = position + 2; var scod = data[j++]; cod.entropyCoderWithCustomPrecincts = !!(scod & 1); cod.sopMarkerUsed = !!(scod & 2); cod.ephMarkerUsed = !!(scod & 4); cod.progressionOrder = data[j++]; cod.layersCount = (0, _core_utils.readUint16)(data, j); j += 2; cod.multipleComponentTransform = data[j++]; cod.decompositionLevelsCount = data[j++]; cod.xcb = (data[j++] & 0xf) + 2; cod.ycb = (data[j++] & 0xf) + 2; var blockStyle = data[j++]; cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); cod.resetContextProbabilities = !!(blockStyle & 2); cod.terminationOnEachCodingPass = !!(blockStyle & 4); cod.verticallyStripe = !!(blockStyle & 8); cod.predictableTermination = !!(blockStyle & 16); cod.segmentationSymbolUsed = !!(blockStyle & 32); cod.reversibleTransformation = data[j++]; if (cod.entropyCoderWithCustomPrecincts) { var precinctsSizes = []; while (j < length + position) { var precinctsSize = data[j++]; precinctsSizes.push({ PPx: precinctsSize & 0xf, PPy: precinctsSize >> 4 }); } cod.precinctsSizes = precinctsSizes; } var unsupported = []; if (cod.selectiveArithmeticCodingBypass) { unsupported.push("selectiveArithmeticCodingBypass"); } if (cod.resetContextProbabilities) { unsupported.push("resetContextProbabilities"); } if (cod.terminationOnEachCodingPass) { unsupported.push("terminationOnEachCodingPass"); } if (cod.verticallyStripe) { unsupported.push("verticallyStripe"); } if (cod.predictableTermination) { unsupported.push("predictableTermination"); } if (unsupported.length > 0) { doNotRecover = true; throw new Error("Unsupported COD options (" + unsupported.join(", ") + ")"); } if (context.mainHeader) { context.COD = cod; } else { context.currentTile.COD = cod; context.currentTile.COC = []; } break; case 0xff90: length = (0, _core_utils.readUint16)(data, position); tile = {}; tile.index = (0, _core_utils.readUint16)(data, position + 2); tile.length = (0, _core_utils.readUint32)(data, position + 4); tile.dataEnd = tile.length + position - 2; tile.partIndex = data[position + 8]; tile.partsCount = data[position + 9]; context.mainHeader = false; if (tile.partIndex === 0) { tile.COD = context.COD; tile.COC = context.COC.slice(0); tile.QCD = context.QCD; tile.QCC = context.QCC.slice(0); } context.currentTile = tile; break; case 0xff93: tile = context.currentTile; if (tile.partIndex === 0) { initializeTile(context, tile.index); buildPackets(context); } length = tile.dataEnd - position; parseTilePackets(context, data, position, length); break; case 0xff55: case 0xff57: case 0xff58: case 0xff64: length = (0, _core_utils.readUint16)(data, position); break; case 0xff53: throw new Error("Codestream code 0xFF53 (COC) is not implemented"); default: throw new Error("Unknown codestream code: " + code.toString(16)); } position += length; } } catch (e) { if (doNotRecover || this.failOnCorruptedImage) { throw new JpxError(e.message); } else { (0, _util.warn)("JPX: Trying to recover from: " + e.message); } } this.tiles = transformComponents(context); this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; this.componentsCount = context.SIZ.Csiz; } }; function calculateComponentDimensions(component, siz) { component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); component.width = component.x1 - component.x0; component.height = component.y1 - component.y0; } function calculateTileGrids(context, components) { var siz = context.SIZ; var tile, tiles = []; var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); for (var q = 0; q < numYtiles; q++) { for (var p = 0; p < numXtiles; p++) { tile = {}; tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); tile.width = tile.tx1 - tile.tx0; tile.height = tile.ty1 - tile.ty0; tile.components = []; tiles.push(tile); } } context.tiles = tiles; var componentsCount = siz.Csiz; for (var i = 0, ii = componentsCount; i < ii; i++) { var component = components[i]; for (var j = 0, jj = tiles.length; j < jj; j++) { var tileComponent = {}; tile = tiles[j]; tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; tile.components[i] = tileComponent; } } } function getBlocksDimensions(context, component, r) { var codOrCoc = component.codingStyleParameters; var result = {}; if (!codOrCoc.entropyCoderWithCustomPrecincts) { result.PPx = 15; result.PPy = 15; } else { result.PPx = codOrCoc.precinctsSizes[r].PPx; result.PPy = codOrCoc.precinctsSizes[r].PPy; } result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); return result; } function buildPrecincts(context, resolution, dimensions) { var precinctWidth = 1 << dimensions.PPx; var precinctHeight = 1 << dimensions.PPy; var isZeroRes = resolution.resLevel === 0; var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; var numprecincts = numprecinctswide * numprecinctshigh; resolution.precinctParameters = { precinctWidth, precinctHeight, numprecinctswide, numprecinctshigh, numprecincts, precinctWidthInSubband, precinctHeightInSubband }; } function buildCodeblocks(context, subband, dimensions) { var xcb_ = dimensions.xcb_; var ycb_ = dimensions.ycb_; var codeblockWidth = 1 << xcb_; var codeblockHeight = 1 << ycb_; var cbx0 = subband.tbx0 >> xcb_; var cby0 = subband.tby0 >> ycb_; var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; var precinctParameters = subband.resolution.precinctParameters; var codeblocks = []; var precincts = []; var i, j, codeblock, precinctNumber; for (j = cby0; j < cby1; j++) { for (i = cbx0; i < cbx1; i++) { codeblock = { cbx: i, cby: j, tbx0: codeblockWidth * i, tby0: codeblockHeight * j, tbx1: codeblockWidth * (i + 1), tby1: codeblockHeight * (j + 1) }; codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); precinctNumber = pi + pj * precinctParameters.numprecinctswide; codeblock.precinctNumber = precinctNumber; codeblock.subbandType = subband.type; codeblock.Lblock = 3; if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { continue; } codeblocks.push(codeblock); var precinct = precincts[precinctNumber]; if (precinct !== undefined) { if (i < precinct.cbxMin) { precinct.cbxMin = i; } else if (i > precinct.cbxMax) { precinct.cbxMax = i; } if (j < precinct.cbyMin) { precinct.cbxMin = j; } else if (j > precinct.cbyMax) { precinct.cbyMax = j; } } else { precincts[precinctNumber] = precinct = { cbxMin: i, cbyMin: j, cbxMax: i, cbyMax: j }; } codeblock.precinct = precinct; } } subband.codeblockParameters = { codeblockWidth: xcb_, codeblockHeight: ycb_, numcodeblockwide: cbx1 - cbx0 + 1, numcodeblockhigh: cby1 - cby0 + 1 }; subband.codeblocks = codeblocks; subband.precincts = precincts; } function createPacket(resolution, precinctNumber, layerNumber) { var precinctCodeblocks = []; var subbands = resolution.subbands; for (var i = 0, ii = subbands.length; i < ii; i++) { var subband = subbands[i]; var codeblocks = subband.codeblocks; for (var j = 0, jj = codeblocks.length; j < jj; j++) { var codeblock = codeblocks[j]; if (codeblock.precinctNumber !== precinctNumber) { continue; } precinctCodeblocks.push(codeblock); } } return { layerNumber, codeblocks: precinctCodeblocks }; } function LayerResolutionComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var l = 0, r = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; l < layersCount; l++) { for (; r <= maxDecompositionLevelsCount; r++) { for (; i < componentsCount; i++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } r = 0; } throw new JpxError("Out of packets"); }; } function ResolutionLayerComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var r = 0, l = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; l < layersCount; l++) { for (; i < componentsCount; i++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } l = 0; } throw new JpxError("Out of packets"); }; } function ResolutionPositionComponentLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var l, r, c, p; var maxDecompositionLevelsCount = 0; for (c = 0; c < componentsCount; c++) { const component = tile.components[c]; maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); } var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); for (r = 0; r <= maxDecompositionLevelsCount; ++r) { var maxNumPrecincts = 0; for (c = 0; c < componentsCount; ++c) { var resolutions = tile.components[c].resolutions; if (r < resolutions.length) { maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); } } maxNumPrecinctsInLevel[r] = maxNumPrecincts; } l = 0; r = 0; c = 0; p = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; p < maxNumPrecinctsInLevel[r]; p++) { for (; c < componentsCount; c++) { const component = tile.components[c]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; if (p >= numprecincts) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, p, l); l++; return packet; } l = 0; } c = 0; } p = 0; } throw new JpxError("Out of packets"); }; } function PositionComponentResolutionLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var precinctsIterationSizes = precinctsSizes; var l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsSizes.components[c].resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } c = 0; } px = 0; } throw new JpxError("Out of packets"); }; } function ComponentPositionResolutionLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; c < componentsCount; ++c) { var component = tile.components[c]; var precinctsIterationSizes = precinctsSizes.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsIterationSizes.resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } px = 0; } py = 0; } throw new JpxError("Out of packets"); }; } function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { var posX = pxIndex * precinctIterationSizes.minWidth; var posY = pyIndex * precinctIterationSizes.minHeight; if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { return null; } var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; return posX / sizeInImageScale.height + startPrecinctRowIndex; } function getPrecinctSizesInImageScale(tile) { var componentsCount = tile.components.length; var minWidth = Number.MAX_VALUE; var minHeight = Number.MAX_VALUE; var maxNumWide = 0; var maxNumHigh = 0; var sizePerComponent = new Array(componentsCount); for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var sizePerResolution = new Array(decompositionLevelsCount + 1); var minWidthCurrentComponent = Number.MAX_VALUE; var minHeightCurrentComponent = Number.MAX_VALUE; var maxNumWideCurrentComponent = 0; var maxNumHighCurrentComponent = 0; var scale = 1; for (var r = decompositionLevelsCount; r >= 0; --r) { var resolution = component.resolutions[r]; var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); sizePerResolution[r] = { width: widthCurrentResolution, height: heightCurrentResolution }; scale <<= 1; } minWidth = Math.min(minWidth, minWidthCurrentComponent); minHeight = Math.min(minHeight, minHeightCurrentComponent); maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); sizePerComponent[c] = { resolutions: sizePerResolution, minWidth: minWidthCurrentComponent, minHeight: minHeightCurrentComponent, maxNumWide: maxNumWideCurrentComponent, maxNumHigh: maxNumHighCurrentComponent }; } return { components: sizePerComponent, minWidth, minHeight, maxNumWide, maxNumHigh }; } function buildPackets(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var componentsCount = siz.Csiz; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var resolutions = []; var subbands = []; for (var r = 0; r <= decompositionLevelsCount; r++) { var blocksDimensions = getBlocksDimensions(context, component, r); var resolution = {}; var scale = 1 << decompositionLevelsCount - r; resolution.trx0 = Math.ceil(component.tcx0 / scale); resolution.try0 = Math.ceil(component.tcy0 / scale); resolution.trx1 = Math.ceil(component.tcx1 / scale); resolution.try1 = Math.ceil(component.tcy1 / scale); resolution.resLevel = r; buildPrecincts(context, resolution, blocksDimensions); resolutions.push(resolution); var subband; if (r === 0) { subband = {}; subband.type = "LL"; subband.tbx0 = Math.ceil(component.tcx0 / scale); subband.tby0 = Math.ceil(component.tcy0 / scale); subband.tbx1 = Math.ceil(component.tcx1 / scale); subband.tby1 = Math.ceil(component.tcy1 / scale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolution.subbands = [subband]; } else { var bscale = 1 << decompositionLevelsCount - r + 1; var resolutionSubbands = []; subband = {}; subband.type = "HL"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "LH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "HH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); resolution.subbands = resolutionSubbands; } } component.resolutions = resolutions; component.subbands = subbands; } var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; switch (progressionOrder) { case 0: tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); break; case 1: tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); break; case 2: tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); break; case 3: tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); break; case 4: tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); break; default: throw new JpxError(`Unsupported progression order ${progressionOrder}`); } } function parseTilePackets(context, data, offset, dataLength) { var position = 0; var buffer, bufferSize = 0, skipNextBit = false; function readBits(count) { while (bufferSize < count) { var b = data[offset + position]; position++; if (skipNextBit) { buffer = buffer << 7 | b; bufferSize += 7; skipNextBit = false; } else { buffer = buffer << 8 | b; bufferSize += 8; } if (b === 0xff) { skipNextBit = true; } } bufferSize -= count; return buffer >>> bufferSize & (1 << count) - 1; } function skipMarkerIfEqual(value) { if (data[offset + position - 1] === 0xff && data[offset + position] === value) { skipBytes(1); return true; } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { skipBytes(2); return true; } return false; } function skipBytes(count) { position += count; } function alignToByte() { bufferSize = 0; if (skipNextBit) { position++; skipNextBit = false; } } function readCodingpasses() { if (readBits(1) === 0) { return 1; } if (readBits(1) === 0) { return 2; } var value = readBits(2); if (value < 3) { return value + 3; } value = readBits(5); if (value < 31) { return value + 6; } value = readBits(7); return value + 37; } var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var sopMarkerUsed = context.COD.sopMarkerUsed; var ephMarkerUsed = context.COD.ephMarkerUsed; var packetsIterator = tile.packetsIterator; while (position < dataLength) { alignToByte(); if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { skipBytes(4); } var packet = packetsIterator.nextPacket(); if (!readBits(1)) { continue; } var layerNumber = packet.layerNumber; var queue = [], codeblock; for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { codeblock = packet.codeblocks[i]; var precinct = codeblock.precinct; var codeblockColumn = codeblock.cbx - precinct.cbxMin; var codeblockRow = codeblock.cby - precinct.cbyMin; var codeblockIncluded = false; var firstTimeInclusion = false; var valueReady; if (codeblock.included !== undefined) { codeblockIncluded = !!readBits(1); } else { precinct = codeblock.precinct; var inclusionTree, zeroBitPlanesTree; if (precinct.inclusionTree !== undefined) { inclusionTree = precinct.inclusionTree; } else { var width = precinct.cbxMax - precinct.cbxMin + 1; var height = precinct.cbyMax - precinct.cbyMin + 1; inclusionTree = new InclusionTree(width, height, layerNumber); zeroBitPlanesTree = new TagTree(width, height); precinct.inclusionTree = inclusionTree; precinct.zeroBitPlanesTree = zeroBitPlanesTree; } if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { while (true) { if (readBits(1)) { valueReady = !inclusionTree.nextLevel(); if (valueReady) { codeblock.included = true; codeblockIncluded = firstTimeInclusion = true; break; } } else { inclusionTree.incrementValue(layerNumber); break; } } } } if (!codeblockIncluded) { continue; } if (firstTimeInclusion) { zeroBitPlanesTree = precinct.zeroBitPlanesTree; zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); while (true) { if (readBits(1)) { valueReady = !zeroBitPlanesTree.nextLevel(); if (valueReady) { break; } } else { zeroBitPlanesTree.incrementValue(); } } codeblock.zeroBitPlanes = zeroBitPlanesTree.value; } var codingpasses = readCodingpasses(); while (readBits(1)) { codeblock.Lblock++; } var codingpassesLog2 = (0, _core_utils.log2)(codingpasses); var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; var codedDataLength = readBits(bits); queue.push({ codeblock, codingpasses, dataLength: codedDataLength }); } alignToByte(); if (ephMarkerUsed) { skipMarkerIfEqual(0x92); } while (queue.length > 0) { var packetItem = queue.shift(); codeblock = packetItem.codeblock; if (codeblock.data === undefined) { codeblock.data = []; } codeblock.data.push({ data, start: offset + position, end: offset + position + packetItem.dataLength, codingpasses: packetItem.codingpasses }); position += packetItem.dataLength; } } return position; } function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { var x0 = subband.tbx0; var y0 = subband.tby0; var width = subband.tbx1 - subband.tbx0; var codeblocks = subband.codeblocks; var right = subband.type.charAt(0) === "H" ? 1 : 0; var bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; for (var i = 0, ii = codeblocks.length; i < ii; ++i) { var codeblock = codeblocks[i]; var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; var blockHeight = codeblock.tby1_ - codeblock.tby0_; if (blockWidth === 0 || blockHeight === 0) { continue; } if (codeblock.data === undefined) { continue; } var bitModel, currentCodingpassType; bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); currentCodingpassType = 2; var data = codeblock.data, totalLength = 0, codingpasses = 0; var j, jj, dataItem; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; totalLength += dataItem.end - dataItem.start; codingpasses += dataItem.codingpasses; } var encodedData = new Uint8Array(totalLength); var position = 0; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); encodedData.set(chunk, position); position += chunk.length; } var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); bitModel.setDecoder(decoder); for (j = 0; j < codingpasses; j++) { switch (currentCodingpassType) { case 0: bitModel.runSignificancePropagationPass(); break; case 1: bitModel.runMagnitudeRefinementPass(); break; case 2: bitModel.runCleanupPass(); if (segmentationSymbolUsed) { bitModel.checkSegmentationSymbol(); } break; } currentCodingpassType = (currentCodingpassType + 1) % 3; } var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; var sign = bitModel.coefficentsSign; var magnitude = bitModel.coefficentsMagnitude; var bitsDecoded = bitModel.bitsDecoded; var magnitudeCorrection = reversible ? 0 : 0.5; var k, n, nb; position = 0; var interleave = subband.type !== "LL"; for (j = 0; j < blockHeight; j++) { var row = offset / width | 0; var levelOffset = 2 * row * (levelWidth - width) + right + bottom; for (k = 0; k < blockWidth; k++) { n = magnitude[position]; if (n !== 0) { n = (n + magnitudeCorrection) * delta; if (sign[position] !== 0) { n = -n; } nb = bitsDecoded[position]; var pos = interleave ? levelOffset + (offset << 1) : offset; if (reversible && nb >= mb) { coefficients[pos] = n; } else { coefficients[pos] = n * (1 << mb - nb); } } offset++; position++; } offset += width - blockWidth; } } } function transformTile(context, tile, c) { var component = tile.components[c]; var codingStyleParameters = component.codingStyleParameters; var quantizationParameters = component.quantizationParameters; var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; var spqcds = quantizationParameters.SPqcds; var scalarExpounded = quantizationParameters.scalarExpounded; var guardBits = quantizationParameters.guardBits; var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; var precision = context.components[c].precision; var reversible = codingStyleParameters.reversibleTransformation; var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); var subbandCoefficients = []; var b = 0; for (var i = 0; i <= decompositionLevelsCount; i++) { var resolution = component.resolutions[i]; var width = resolution.trx1 - resolution.trx0; var height = resolution.try1 - resolution.try0; var coefficients = new Float32Array(width * height); for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { var mu, epsilon; if (!scalarExpounded) { mu = spqcds[0].mu; epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); } else { mu = spqcds[b].mu; epsilon = spqcds[b].epsilon; b++; } var subband = resolution.subbands[j]; var gainLog2 = SubbandsGainLog2[subband.type]; var delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048); var mb = guardBits + epsilon - 1; copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); } subbandCoefficients.push({ width, height, items: coefficients }); } var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); return { left: component.tcx0, top: component.tcy0, width: result.width, height: result.height, items: result.items }; } function transformComponents(context) { var siz = context.SIZ; var components = context.components; var componentsCount = siz.Csiz; var resultImages = []; for (var i = 0, ii = context.tiles.length; i < ii; i++) { var tile = context.tiles[i]; var transformedTiles = []; var c; for (c = 0; c < componentsCount; c++) { transformedTiles[c] = transformTile(context, tile, c); } var tile0 = transformedTiles[0]; var out = new Uint8ClampedArray(tile0.items.length * componentsCount); var result = { left: tile0.left, top: tile0.top, width: tile0.width, height: tile0.height, items: out }; var shift, offset; var pos = 0, j, jj, y0, y1, y2; if (tile.codingStyleDefaultParameters.multipleComponentTransform) { var fourComponents = componentsCount === 4; var y0items = transformedTiles[0].items; var y1items = transformedTiles[1].items; var y2items = transformedTiles[2].items; var y3items = fourComponents ? transformedTiles[3].items : null; shift = components[0].precision - 8; offset = (128 << shift) + 0.5; var component0 = tile.components[0]; var alpha01 = componentsCount - 3; jj = y0items.length; if (!component0.codingStyleParameters.reversibleTransformation) { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; out[pos++] = y0 + 1.402 * y2 >> shift; out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; out[pos++] = y0 + 1.772 * y1 >> shift; } } else { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; const g = y0 - (y2 + y1 >> 2); out[pos++] = g + y2 >> shift; out[pos++] = g >> shift; out[pos++] = g + y1 >> shift; } } if (fourComponents) { for (j = 0, pos = 3; j < jj; j++, pos += 4) { out[pos] = y3items[j] + offset >> shift; } } } else { for (c = 0; c < componentsCount; c++) { var items = transformedTiles[c].items; shift = components[c].precision - 8; offset = (128 << shift) + 0.5; for (pos = c, j = 0, jj = items.length; j < jj; j++) { out[pos] = items[j] + offset >> shift; pos += componentsCount; } } } resultImages.push(result); } return resultImages; } function initializeTile(context, tileIndex) { var siz = context.SIZ; var componentsCount = siz.Csiz; var tile = context.tiles[tileIndex]; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; component.quantizationParameters = qcdOrQcc; var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; component.codingStyleParameters = codOrCoc; } tile.codingStyleDefaultParameters = context.currentTile.COD; } var TagTree = function TagTreeClosure() { function TagTree(width, height) { var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var level = { width, height, items: [] }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } TagTree.prototype = { reset: function TagTree_reset(i, j) { var currentLevel = 0, value = 0, level; while (currentLevel < this.levels.length) { level = this.levels[currentLevel]; var index = i + j * level.width; if (level.items[index] !== undefined) { value = level.items[index]; break; } level.index = index; i >>= 1; j >>= 1; currentLevel++; } currentLevel--; level = this.levels[currentLevel]; level.items[level.index] = value; this.currentLevel = currentLevel; delete this.value; }, incrementValue: function TagTree_incrementValue() { var level = this.levels[this.currentLevel]; level.items[level.index]++; }, nextLevel: function TagTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var value = level.items[level.index]; currentLevel--; if (currentLevel < 0) { this.value = value; return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } }; return TagTree; }(); var InclusionTree = function InclusionTreeClosure() { function InclusionTree(width, height, defaultValue) { var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var items = new Uint8Array(width * height); for (var j = 0, jj = items.length; j < jj; j++) { items[j] = defaultValue; } var level = { width, height, items }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } InclusionTree.prototype = { reset: function InclusionTree_reset(i, j, stopValue) { var currentLevel = 0; while (currentLevel < this.levels.length) { var level = this.levels[currentLevel]; var index = i + j * level.width; level.index = index; var value = level.items[index]; if (value === 0xff) { break; } if (value > stopValue) { this.currentLevel = currentLevel; this.propagateValues(); return false; } i >>= 1; j >>= 1; currentLevel++; } this.currentLevel = currentLevel - 1; return true; }, incrementValue: function InclusionTree_incrementValue(stopValue) { var level = this.levels[this.currentLevel]; level.items[level.index] = stopValue + 1; this.propagateValues(); }, propagateValues: function InclusionTree_propagateValues() { var levelIndex = this.currentLevel; var level = this.levels[levelIndex]; var currentValue = level.items[level.index]; while (--levelIndex >= 0) { level = this.levels[levelIndex]; level.items[level.index] = currentValue; } }, nextLevel: function InclusionTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var value = level.items[level.index]; level.items[level.index] = 0xff; currentLevel--; if (currentLevel < 0) { return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } }; return InclusionTree; }(); var BitModel = function BitModelClosure() { var UNIFORM_CONTEXT = 17; var RUNLENGTH_CONTEXT = 18; var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); function BitModel(width, height, subband, zeroBitPlanes, mb) { this.width = width; this.height = height; let contextLabelTable; if (subband === "HH") { contextLabelTable = HHContextLabel; } else if (subband === "HL") { contextLabelTable = HLContextLabel; } else { contextLabelTable = LLAndLHContextsLabel; } this.contextLabelTable = contextLabelTable; var coefficientCount = width * height; this.neighborsSignificance = new Uint8Array(coefficientCount); this.coefficentsSign = new Uint8Array(coefficientCount); let coefficentsMagnitude; if (mb > 14) { coefficentsMagnitude = new Uint32Array(coefficientCount); } else if (mb > 6) { coefficentsMagnitude = new Uint16Array(coefficientCount); } else { coefficentsMagnitude = new Uint8Array(coefficientCount); } this.coefficentsMagnitude = coefficentsMagnitude; this.processingFlags = new Uint8Array(coefficientCount); var bitsDecoded = new Uint8Array(coefficientCount); if (zeroBitPlanes !== 0) { for (var i = 0; i < coefficientCount; i++) { bitsDecoded[i] = zeroBitPlanes; } } this.bitsDecoded = bitsDecoded; this.reset(); } BitModel.prototype = { setDecoder: function BitModel_setDecoder(decoder) { this.decoder = decoder; }, reset: function BitModel_reset() { this.contexts = new Int8Array(19); this.contexts[0] = 4 << 1 | 0; this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; }, setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) { var neighborsSignificance = this.neighborsSignificance; var width = this.width, height = this.height; var left = column > 0; var right = column + 1 < width; var i; if (row > 0) { i = index - width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (row + 1 < height) { i = index + width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (left) { neighborsSignificance[index - 1] += 0x01; } if (right) { neighborsSignificance[index + 1] += 0x01; } neighborsSignificance[index] |= 0x80; }, runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var neighborsSignificance = this.neighborsSignificance; var processingFlags = this.processingFlags; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processedInverseMask = ~1; var processedMask = 1; var firstMagnitudeBitMask = 2; for (var i0 = 0; i0 < height; i0 += 4) { for (var j = 0; j < width; j++) { var index = i0 * width + j; for (var i1 = 0; i1 < 4; i1++, index += width) { var i = i0 + i1; if (i >= height) { break; } processingFlags[index] &= processedInverseMask; if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { continue; } var contextLabel = labels[neighborsSignificance[index]]; var decision = decoder.readBit(contexts, contextLabel); if (decision) { var sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } }, decodeSignBit: function BitModel_decodeSignBit(row, column, index) { var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contribution, sign0, sign1, significance1; var contextLabel, decoded; significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { sign1 = coefficentsSign[index + 1]; if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign1 - sign0; } else { contribution = 1 - sign1 - sign1; } } else if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign0 - sign0; } else { contribution = 0; } var horizontalContribution = 3 * contribution; significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { sign1 = coefficentsSign[index + width]; if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign1 - sign0 + horizontalContribution; } else { contribution = 1 - sign1 - sign1 + horizontalContribution; } } else if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign0 - sign0 + horizontalContribution; } else { contribution = horizontalContribution; } if (contribution >= 0) { contextLabel = 9 + contribution; decoded = this.decoder.readBit(this.contexts, contextLabel); } else { contextLabel = 9 - contribution; decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; } return decoded; }, runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var neighborsSignificance = this.neighborsSignificance; var contexts = this.contexts; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var length = width * height; var width4 = width * 4; for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { indexNext = Math.min(length, index0 + width4); for (var j = 0; j < width; j++) { for (var index = index0 + j; index < indexNext; index += width) { if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } var contextLabel = 16; if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { processingFlags[index] ^= firstMagnitudeBitMask; var significance = neighborsSignificance[index] & 127; contextLabel = significance === 0 ? 15 : 14; } var bit = decoder.readBit(contexts, contextLabel); coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } }, runCleanupPass: function BitModel_runCleanupPass() { var decoder = this.decoder; var width = this.width, height = this.height; var neighborsSignificance = this.neighborsSignificance; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var oneRowDown = width; var twoRowsDown = width * 2; var threeRowsDown = width * 3; var iNext; for (var i0 = 0; i0 < height; i0 = iNext) { iNext = Math.min(i0 + 4, height); var indexBase = i0 * width; var checkAllEmpty = i0 + 3 < height; for (var j = 0; j < width; j++) { var index0 = indexBase + j; var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; var i1 = 0, index = index0; var i = i0, sign; if (allEmpty) { var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); if (!hasSignificantCoefficent) { bitsDecoded[index0]++; bitsDecoded[index0 + oneRowDown]++; bitsDecoded[index0 + twoRowsDown]++; bitsDecoded[index0 + threeRowsDown]++; continue; } i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (i1 !== 0) { i = i0 + i1; index += i1 * width; } sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; index = index0; for (var i2 = i0; i2 <= i; i2++, index += width) { bitsDecoded[index]++; } i1++; } for (i = i0 + i1; i < iNext; i++, index += width) { if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } var contextLabel = labels[neighborsSignificance[index]]; var decision = decoder.readBit(contexts, contextLabel); if (decision === 1) { sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; } } } }, checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { var decoder = this.decoder; var contexts = this.contexts; var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (symbol !== 0xa) { throw new JpxError("Invalid segmentation symbol"); } } }; return BitModel; }(); var Transform = function TransformClosure() { function Transform() {} Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) { var ll = subbands[0]; for (var i = 1, ii = subbands.length; i < ii; i++) { ll = this.iterate(ll, subbands[i], u0, v0); } return ll; }; Transform.prototype.extend = function extend(buffer, offset, size) { var i1 = offset - 1, j1 = offset + 1; var i2 = offset + size - 2, j2 = offset + size; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1] = buffer[j1]; buffer[j2] = buffer[i2]; }; Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) { var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; var width = hl_lh_hh.width; var height = hl_lh_hh.height; var items = hl_lh_hh.items; var i, j, k, l, u, v; for (k = 0, i = 0; i < llHeight; i++) { l = i * 2 * width; for (j = 0; j < llWidth; j++, k++, l += 2) { items[l] = llItems[k]; } } llItems = ll.items = null; var bufferPadding = 4; var rowBuffer = new Float32Array(width + 2 * bufferPadding); if (width === 1) { if ((u0 & 1) !== 0) { for (v = 0, k = 0; v < height; v++, k += width) { items[k] *= 0.5; } } } else { for (v = 0, k = 0; v < height; v++, k += width) { rowBuffer.set(items.subarray(k, k + width), bufferPadding); this.extend(rowBuffer, bufferPadding, width); this.filter(rowBuffer, bufferPadding, width); items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); } } var numBuffers = 16; var colBuffers = []; for (i = 0; i < numBuffers; i++) { colBuffers.push(new Float32Array(height + 2 * bufferPadding)); } var b, currentBuffer = 0; ll = bufferPadding + height; if (height === 1) { if ((v0 & 1) !== 0) { for (u = 0; u < width; u++) { items[u] *= 0.5; } } } else { for (u = 0; u < width; u++) { if (currentBuffer === 0) { numBuffers = Math.min(width - u, numBuffers); for (k = u, l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { colBuffers[b][l] = items[k + b]; } } currentBuffer = numBuffers; } currentBuffer--; var buffer = colBuffers[currentBuffer]; this.extend(buffer, bufferPadding, height); this.filter(buffer, bufferPadding, height); if (currentBuffer === 0) { k = u - numBuffers + 1; for (l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { items[k + b] = colBuffers[b][l]; } } } } } return { width, height, items }; }; return Transform; }(); var IrreversibleTransform = function IrreversibleTransformClosure() { function IrreversibleTransform() { Transform.call(this); } IrreversibleTransform.prototype = Object.create(Transform.prototype); IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var j, n, current, next; var alpha = -1.586134342059924; var beta = -0.052980118572961; var gamma = 0.882911075530934; var delta = 0.443506852043971; var K = 1.230174104914001; var K_ = 1 / K; j = offset - 3; for (n = len + 4; n--; j += 2) { x[j] *= K_; } j = offset - 2; current = delta * x[j - 1]; for (n = len + 3; n--; j += 2) { next = delta * x[j + 1]; x[j] = K * x[j] - current - next; if (n--) { j += 2; current = delta * x[j + 1]; x[j] = K * x[j] - current - next; } else { break; } } j = offset - 1; current = gamma * x[j - 1]; for (n = len + 2; n--; j += 2) { next = gamma * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = gamma * x[j + 1]; x[j] -= current + next; } else { break; } } j = offset; current = beta * x[j - 1]; for (n = len + 1; n--; j += 2) { next = beta * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = beta * x[j + 1]; x[j] -= current + next; } else { break; } } if (len !== 0) { j = offset + 1; current = alpha * x[j - 1]; for (n = len; n--; j += 2) { next = alpha * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = alpha * x[j + 1]; x[j] -= current + next; } else { break; } } } }; return IrreversibleTransform; }(); var ReversibleTransform = function ReversibleTransformClosure() { function ReversibleTransform() { Transform.call(this); } ReversibleTransform.prototype = Object.create(Transform.prototype); ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var j, n; for (j = offset, n = len + 1; n--; j += 2) { x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; } for (j = offset + 1, n = len; n--; j += 2) { x[j] += x[j - 1] + x[j + 1] >> 1; } }; return ReversibleTransform; }(); return JpxImage; }(); exports.JpxImage = JpxImage; /***/ }), /* 22 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _stream = __w_pdfjs_require__(12); var ARCFourCipher = function ARCFourCipherClosure() { function ARCFourCipher(key) { this.a = 0; this.b = 0; var s = new Uint8Array(256); var i, j = 0, tmp, keyLength = key.length; for (i = 0; i < 256; ++i) { s[i] = i; } for (i = 0; i < 256; ++i) { tmp = s[i]; j = j + tmp + key[i % keyLength] & 0xff; s[i] = s[j]; s[j] = tmp; } this.s = s; } ARCFourCipher.prototype = { encryptBlock: function ARCFourCipher_encryptBlock(data) { var i, n = data.length, tmp, tmp2; var a = this.a, b = this.b, s = this.s; var output = new Uint8Array(n); for (i = 0; i < n; ++i) { a = a + 1 & 0xff; tmp = s[a]; b = b + tmp & 0xff; tmp2 = s[b]; s[a] = tmp2; s[b] = tmp; output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; } this.a = a; this.b = b; return output; } }; ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; ARCFourCipher.prototype.encrypt = ARCFourCipher.prototype.encryptBlock; return ARCFourCipher; }(); exports.ARCFourCipher = ARCFourCipher; var calculateMD5 = function calculateMD5Closure() { var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); function hash(data, offset, length) { var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; var paddedLength = length + 72 & ~63; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = length << 3 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >>> 29 & 0xff; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; var w = new Int32Array(16); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j, i += 4) { w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; } var a = h0, b = h1, c = h2, d = h3, f, g; for (j = 0; j < 64; ++j) { if (j < 16) { f = b & c | ~b & d; g = j; } else if (j < 32) { f = d & b | ~d & c; g = 5 * j + 1 & 15; } else if (j < 48) { f = b ^ c ^ d; g = 3 * j + 5 & 15; } else { f = c ^ (b | ~d); g = 7 * j & 15; } var tmp = d, rotateArg = a + f + k[j] + w[g] | 0, rotate = r[j]; d = c; c = b; b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; a = tmp; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; } return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); } return hash; }(); exports.calculateMD5 = calculateMD5; var Word64 = function Word64Closure() { function Word64(highInteger, lowInteger) { this.high = highInteger | 0; this.low = lowInteger | 0; } Word64.prototype = { and: function Word64_and(word) { this.high &= word.high; this.low &= word.low; }, xor: function Word64_xor(word) { this.high ^= word.high; this.low ^= word.low; }, or: function Word64_or(word) { this.high |= word.high; this.low |= word.low; }, shiftRight: function Word64_shiftRight(places) { if (places >= 32) { this.low = this.high >>> places - 32 | 0; this.high = 0; } else { this.low = this.low >>> places | this.high << 32 - places; this.high = this.high >>> places | 0; } }, shiftLeft: function Word64_shiftLeft(places) { if (places >= 32) { this.high = this.low << places - 32; this.low = 0; } else { this.high = this.high << places | this.low >>> 32 - places; this.low = this.low << places; } }, rotateRight: function Word64_rotateRight(places) { var low, high; if (places & 32) { high = this.low; low = this.high; } else { low = this.low; high = this.high; } places &= 31; this.low = low >>> places | high << 32 - places; this.high = high >>> places | low << 32 - places; }, not: function Word64_not() { this.high = ~this.high; this.low = ~this.low; }, add: function Word64_add(word) { var lowAdd = (this.low >>> 0) + (word.low >>> 0); var highAdd = (this.high >>> 0) + (word.high >>> 0); if (lowAdd > 0xffffffff) { highAdd += 1; } this.low = lowAdd | 0; this.high = highAdd | 0; }, copyTo: function Word64_copyTo(bytes, offset) { bytes[offset] = this.high >>> 24 & 0xff; bytes[offset + 1] = this.high >> 16 & 0xff; bytes[offset + 2] = this.high >> 8 & 0xff; bytes[offset + 3] = this.high & 0xff; bytes[offset + 4] = this.low >>> 24 & 0xff; bytes[offset + 5] = this.low >> 16 & 0xff; bytes[offset + 6] = this.low >> 8 & 0xff; bytes[offset + 7] = this.low & 0xff; }, assign: function Word64_assign(word) { this.high = word.high; this.low = word.low; } }; return Word64; }(); var calculateSHA256 = function calculateSHA256Closure() { function rotr(x, n) { return x >>> n | x << 32 - n; } function ch(x, y, z) { return x & y ^ ~x & z; } function maj(x, y, z) { return x & y ^ x & z ^ y & z; } function sigma(x) { return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); } function sigmaPrime(x) { return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); } function littleSigma(x) { return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; } function littleSigmaPrime(x) { return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; } var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; function hash(data, offset, length) { var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; var paddedLength = Math.ceil((length + 9) / 64) * 64; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; var w = new Uint32Array(64); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; i += 4; } for (j = 16; j < 64; ++j) { w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; } var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, t1, t2; for (j = 0; j < 64; ++j) { t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; t2 = sigma(a) + maj(a, b, c); h = g; g = f; f = e; e = d + t1 | 0; d = c; c = b; b = a; a = t1 + t2 | 0; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; h4 = h4 + e | 0; h5 = h5 + f | 0; h6 = h6 + g | 0; h7 = h7 + h | 0; } return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); } return hash; }(); exports.calculateSHA256 = calculateSHA256; var calculateSHA512 = function calculateSHA512Closure() { function ch(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.not(); tmp.and(z); result.xor(tmp); } function maj(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.and(z); result.xor(tmp); tmp.assign(y); tmp.and(z); result.xor(tmp); } function sigma(result, x, tmp) { result.assign(x); result.rotateRight(28); tmp.assign(x); tmp.rotateRight(34); result.xor(tmp); tmp.assign(x); tmp.rotateRight(39); result.xor(tmp); } function sigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(14); tmp.assign(x); tmp.rotateRight(18); result.xor(tmp); tmp.assign(x); tmp.rotateRight(41); result.xor(tmp); } function littleSigma(result, x, tmp) { result.assign(x); result.rotateRight(1); tmp.assign(x); tmp.rotateRight(8); result.xor(tmp); tmp.assign(x); tmp.shiftRight(7); result.xor(tmp); } function littleSigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(19); tmp.assign(x); tmp.rotateRight(61); result.xor(tmp); tmp.assign(x); tmp.shiftRight(6); result.xor(tmp); } var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; function hash(data, offset, length, mode384) { mode384 = !!mode384; var h0, h1, h2, h3, h4, h5, h6, h7; if (!mode384) { h0 = new Word64(0x6a09e667, 0xf3bcc908); h1 = new Word64(0xbb67ae85, 0x84caa73b); h2 = new Word64(0x3c6ef372, 0xfe94f82b); h3 = new Word64(0xa54ff53a, 0x5f1d36f1); h4 = new Word64(0x510e527f, 0xade682d1); h5 = new Word64(0x9b05688c, 0x2b3e6c1f); h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); h7 = new Word64(0x5be0cd19, 0x137e2179); } else { h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); h1 = new Word64(0x629a292a, 0x367cd507); h2 = new Word64(0x9159015a, 0x3070dd17); h3 = new Word64(0x152fecd8, 0xf70e5939); h4 = new Word64(0x67332667, 0xffc00b31); h5 = new Word64(0x8eb44a87, 0x68581511); h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); h7 = new Word64(0x47b5481d, 0xbefa4fa4); } var paddedLength = Math.ceil((length + 17) / 128) * 128; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; n = paddedLength - 16; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; var w = new Array(80); for (i = 0; i < 80; i++) { w[i] = new Word64(0, 0); } var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); var g = new Word64(0, 0), h = new Word64(0, 0); var t1 = new Word64(0, 0), t2 = new Word64(0, 0); var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3; for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; i += 8; } for (j = 16; j < 80; ++j) { tmp3 = w[j]; littleSigmaPrime(tmp3, w[j - 2], tmp2); tmp3.add(w[j - 7]); littleSigma(tmp1, w[j - 15], tmp2); tmp3.add(tmp1); tmp3.add(w[j - 16]); } a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3); e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7); for (j = 0; j < 80; ++j) { t1.assign(h); sigmaPrime(tmp1, e, tmp2); t1.add(tmp1); ch(tmp1, e, f, g, tmp2); t1.add(tmp1); t1.add(k[j]); t1.add(w[j]); sigma(t2, a, tmp2); maj(tmp1, a, b, c, tmp2); t2.add(tmp1); tmp3 = h; h = g; g = f; f = e; d.add(t1); e = d; d = c; c = b; b = a; tmp3.assign(t1); tmp3.add(t2); a = tmp3; } h0.add(a); h1.add(b); h2.add(c); h3.add(d); h4.add(e); h5.add(f); h6.add(g); h7.add(h); } var result; if (!mode384) { result = new Uint8Array(64); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); h6.copyTo(result, 48); h7.copyTo(result, 56); } else { result = new Uint8Array(48); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); } return result; } return hash; }(); exports.calculateSHA512 = calculateSHA512; var calculateSHA384 = function calculateSHA384Closure() { function hash(data, offset, length) { return calculateSHA512(data, offset, length, true); } return hash; }(); exports.calculateSHA384 = calculateSHA384; var NullCipher = function NullCipherClosure() { function NullCipher() {} NullCipher.prototype = { decryptBlock: function NullCipher_decryptBlock(data) { return data; }, encrypt: function NullCipher_encrypt(data) { return data; } }; return NullCipher; }(); class AESBaseCipher { constructor() { if (this.constructor === AESBaseCipher) { (0, _util.unreachable)("Cannot initialize AESBaseCipher."); } this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); this._mixCol = new Uint8Array(256); for (let i = 0; i < 256; i++) { if (i < 128) { this._mixCol[i] = i << 1; } else { this._mixCol[i] = i << 1 ^ 0x1b; } } this.buffer = new Uint8Array(16); this.bufferPosition = 0; } _expandKey(cipherKey) { (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); } _decrypt(input, key) { let t, u, v; const state = new Uint8Array(16); state.set(input); for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (let j = 0; j < 16; ++j) { state[j] = this._inv_s[state[j]]; } for (let j = 0, k = i * 16; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (let j = 0; j < 16; j += 4) { const s0 = this._mix[state[j]]; const s1 = this._mix[state[j + 1]]; const s2 = this._mix[state[j + 2]]; const s3 = this._mix[state[j + 3]]; t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; state[j] = t >>> 24 & 0xff; state[j + 1] = t >> 16 & 0xff; state[j + 2] = t >> 8 & 0xff; state[j + 3] = t & 0xff; } } t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (let j = 0; j < 16; ++j) { state[j] = this._inv_s[state[j]]; state[j] ^= key[j]; } return state; } _encrypt(input, key) { const s = this._s; let t, u, v; const state = new Uint8Array(16); state.set(input); for (let j = 0; j < 16; ++j) { state[j] ^= key[j]; } for (let i = 1; i < this._cyclesOfRepetition; i++) { for (let j = 0; j < 16; ++j) { state[j] = s[state[j]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (let j = 0; j < 16; j += 4) { const s0 = state[j + 0]; const s1 = state[j + 1]; const s2 = state[j + 2]; const s3 = state[j + 3]; t = s0 ^ s1 ^ s2 ^ s3; state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; } for (let j = 0, k = i * 16; j < 16; ++j, ++k) { state[j] ^= key[k]; } } for (let j = 0; j < 16; ++j) { state[j] = s[state[j]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } return state; } _decryptBlock2(data, finalize) { const sourceLength = data.length; let buffer = this.buffer, bufferLength = this.bufferPosition; const result = []; let iv = this.iv; for (let i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } const plain = this._decrypt(buffer, this._key); for (let j = 0; j < 16; ++j) { plain[j] ^= iv[j]; } iv = buffer; result.push(plain); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } let outputLength = 16 * result.length; if (finalize) { const lastBlock = result[result.length - 1]; let psLen = lastBlock[15]; if (psLen <= 16) { for (let i = 15, ii = 16 - psLen; i >= ii; --i) { if (lastBlock[i] !== psLen) { psLen = 0; break; } } outputLength -= psLen; result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); } } const output = new Uint8Array(outputLength); for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { output.set(result[i], j); } return output; } decryptBlock(data, finalize, iv = null) { const sourceLength = data.length; const buffer = this.buffer; let bufferLength = this.bufferPosition; if (iv) { this.iv = iv; } else { for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { buffer[bufferLength] = data[i]; } if (bufferLength < 16) { this.bufferLength = bufferLength; return new Uint8Array(0); } this.iv = buffer; data = data.subarray(16); } this.buffer = new Uint8Array(16); this.bufferLength = 0; this.decryptBlock = this._decryptBlock2; return this.decryptBlock(data, finalize); } encrypt(data, iv) { const sourceLength = data.length; let buffer = this.buffer, bufferLength = this.bufferPosition; const result = []; if (!iv) { iv = new Uint8Array(16); } for (let i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } for (let j = 0; j < 16; ++j) { buffer[j] ^= iv[j]; } const cipher = this._encrypt(buffer, this._key); iv = cipher; result.push(cipher); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } const outputLength = 16 * result.length; const output = new Uint8Array(outputLength); for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { output.set(result[i], j); } return output; } } class AES128Cipher extends AESBaseCipher { constructor(key) { super(); this._cyclesOfRepetition = 10; this._keySize = 160; this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); this._key = this._expandKey(key); } _expandKey(cipherKey) { const b = 176; const s = this._s; const rcon = this._rcon; const result = new Uint8Array(b); result.set(cipherKey); for (let j = 16, i = 1; j < b; ++i) { let t1 = result[j - 3]; let t2 = result[j - 2]; let t3 = result[j - 1]; let t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 = t1 ^ rcon[i]; for (let n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 16]; j++; result[j] = t2 ^= result[j - 16]; j++; result[j] = t3 ^= result[j - 16]; j++; result[j] = t4 ^= result[j - 16]; j++; } } return result; } } exports.AES128Cipher = AES128Cipher; class AES256Cipher extends AESBaseCipher { constructor(key) { super(); this._cyclesOfRepetition = 14; this._keySize = 224; this._key = this._expandKey(key); } _expandKey(cipherKey) { const b = 240; const s = this._s; const result = new Uint8Array(b); result.set(cipherKey); let r = 1; let t1, t2, t3, t4; for (let j = 32, i = 1; j < b; ++i) { if (j % 32 === 16) { t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; } else if (j % 32 === 0) { t1 = result[j - 3]; t2 = result[j - 2]; t3 = result[j - 1]; t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 = t1 ^ r; if ((r <<= 1) >= 256) { r = (r ^ 0x1b) & 0xff; } } for (let n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 32]; j++; result[j] = t2 ^= result[j - 32]; j++; result[j] = t3 ^= result[j - 32]; j++; result[j] = t4 ^= result[j - 32]; j++; } } return result; } } exports.AES256Cipher = AES256Cipher; var PDF17 = function PDF17Closure() { function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } function PDF17() {} PDF17.prototype = { checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF17; }(); exports.PDF17 = PDF17; var PDF20 = function PDF20Closure() { function concatArrays(array1, array2) { var t = new Uint8Array(array1.length + array2.length); t.set(array1, 0); t.set(array2, array1.length); return t; } function calculatePDF20Hash(password, input, userBytes) { var k = calculateSHA256(input, 0, input.length).subarray(0, 32); var e = [0]; var i = 0; while (i < 64 || e[e.length - 1] > i - 32) { var arrayLength = password.length + k.length + userBytes.length; var k1 = new Uint8Array(arrayLength * 64); var array = concatArrays(password, k); array = concatArrays(array, userBytes); for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { k1.set(array, pos); } var cipher = new AES128Cipher(k.subarray(0, 16)); e = cipher.encrypt(k1, k.subarray(16, 32)); var remainder = 0; for (var z = 0; z < 16; z++) { remainder *= 256 % 3; remainder %= 3; remainder += (e[z] >>> 0) % 3; remainder %= 3; } if (remainder === 0) { k = calculateSHA256(e, 0, e.length); } else if (remainder === 1) { k = calculateSHA384(e, 0, e.length); } else if (remainder === 2) { k = calculateSHA512(e, 0, e.length); } i++; } return k.subarray(0, 32); } function PDF20() {} function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } PDF20.prototype = { hash: function PDF20_hash(password, concatBytes, userBytes) { return calculatePDF20Hash(password, concatBytes, userBytes); }, checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculatePDF20Hash(password, hashData, userBytes); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculatePDF20Hash(password, hashData, []); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculatePDF20Hash(password, hashData, userBytes); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculatePDF20Hash(password, hashData, []); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF20; }(); exports.PDF20 = PDF20; var CipherTransform = function CipherTransformClosure() { function CipherTransform(stringCipherConstructor, streamCipherConstructor) { this.StringCipherConstructor = stringCipherConstructor; this.StreamCipherConstructor = streamCipherConstructor; } CipherTransform.prototype = { createStream: function CipherTransform_createStream(stream, length) { var cipher = new this.StreamCipherConstructor(); return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { return cipher.decryptBlock(data, finalize); }); }, decryptString: function CipherTransform_decryptString(s) { var cipher = new this.StringCipherConstructor(); var data = (0, _util.stringToBytes)(s); data = cipher.decryptBlock(data, true); return (0, _util.bytesToString)(data); }, encryptString: function CipherTransform_encryptString(s) { const cipher = new this.StringCipherConstructor(); if (cipher instanceof AESBaseCipher) { const strLen = s.length; const pad = 16 - strLen % 16; if (pad !== 16) { s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad)); } const iv = new Uint8Array(16); if (typeof crypto !== "undefined") { crypto.getRandomValues(iv); } else { for (let i = 0; i < 16; i++) { iv[i] = Math.floor(256 * Math.random()); } } let data = (0, _util.stringToBytes)(s); data = cipher.encrypt(data, iv); const buf = new Uint8Array(16 + data.length); buf.set(iv); buf.set(data, 16); return (0, _util.bytesToString)(buf); } let data = (0, _util.stringToBytes)(s); data = cipher.encrypt(data); return (0, _util.bytesToString)(data); } }; return CipherTransform; }(); var CipherTransformFactory = function CipherTransformFactoryClosure() { var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]); function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { if (password) { var passwordLength = Math.min(127, password.length); password = password.subarray(0, passwordLength); } else { password = []; } var pdfAlgorithm; if (revision === 6) { pdfAlgorithm = new PDF20(); } else { pdfAlgorithm = new PDF17(); } if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); } return null; } function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { var hashDataSize = 40 + ownerPassword.length + fileId.length; var hashData = new Uint8Array(hashDataSize), i = 0, j, n; if (password) { n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } for (j = 0, n = ownerPassword.length; j < n; ++j) { hashData[i++] = ownerPassword[j]; } hashData[i++] = flags & 0xff; hashData[i++] = flags >> 8 & 0xff; hashData[i++] = flags >> 16 & 0xff; hashData[i++] = flags >>> 24 & 0xff; for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } if (revision >= 4 && !encryptMetadata) { hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, keyLengthInBytes); } } var encryptionKey = hash.subarray(0, keyLengthInBytes); var cipher, checkData; if (revision >= 3) { for (i = 0; i < 32; ++i) { hashData[i] = defaultPasswordBytes[i]; } for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); n = encryptionKey.length; var derivedKey = new Uint8Array(n), k; for (j = 1; j <= 19; ++j) { for (k = 0; k < n; ++k) { derivedKey[k] = encryptionKey[k] ^ j; } cipher = new ARCFourCipher(derivedKey); checkData = cipher.encryptBlock(checkData); } for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } else { cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(defaultPasswordBytes); for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } return encryptionKey; } function decodeUserPassword(password, ownerPassword, revision, keyLength) { var hashData = new Uint8Array(32), i = 0, j, n; n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, hash.length); } } var cipher, userPassword; if (revision >= 3) { userPassword = ownerPassword; var derivedKey = new Uint8Array(keyLengthInBytes), k; for (j = 19; j >= 0; j--) { for (k = 0; k < keyLengthInBytes; ++k) { derivedKey[k] = hash[k] ^ j; } cipher = new ARCFourCipher(derivedKey); userPassword = cipher.encryptBlock(userPassword); } } else { cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); userPassword = cipher.encryptBlock(ownerPassword); } return userPassword; } var identityName = _primitives.Name.get("Identity"); function CipherTransformFactory(dict, fileId, password) { var filter = dict.get("Filter"); if (!(0, _primitives.isName)(filter, "Standard")) { throw new _util.FormatError("unknown encryption method"); } this.dict = dict; var algorithm = dict.get("V"); if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { throw new _util.FormatError("unsupported encryption algorithm"); } this.algorithm = algorithm; var keyLength = dict.get("Length"); if (!keyLength) { if (algorithm <= 3) { keyLength = 40; } else { var cfDict = dict.get("CF"); var streamCryptoName = dict.get("StmF"); if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { cfDict.suppressEncryption = true; var handlerDict = cfDict.get(streamCryptoName.name); keyLength = handlerDict && handlerDict.get("Length") || 128; if (keyLength < 40) { keyLength <<= 3; } } } } if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { throw new _util.FormatError("invalid key length"); } var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); var flags = dict.get("P"); var revision = dict.get("R"); var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; this.encryptMetadata = encryptMetadata; var fileIdBytes = (0, _util.stringToBytes)(fileId); var passwordBytes; if (password) { if (revision === 6) { try { password = (0, _util.utf8StringToString)(password); } catch (ex) { (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); } } passwordBytes = (0, _util.stringToBytes)(password); } var encryptionKey; if (algorithm !== 5) { encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } else { var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); var userEncryption = (0, _util.stringToBytes)(dict.get("UE")); (0, _util.stringToBytes)(dict.get("Perms")); encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption); } if (!encryptionKey && !password) { throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); } else if (!encryptionKey && password) { var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } if (!encryptionKey) { throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); } this.encryptionKey = encryptionKey; if (algorithm >= 4) { var cf = dict.get("CF"); if ((0, _primitives.isDict)(cf)) { cf.suppressEncryption = true; } this.cf = cf; this.stmf = dict.get("StmF") || identityName; this.strf = dict.get("StrF") || identityName; this.eff = dict.get("EFF") || this.stmf; } } function buildObjectKey(num, gen, encryptionKey, isAes) { var key = new Uint8Array(encryptionKey.length + 9), i, n; for (i = 0, n = encryptionKey.length; i < n; ++i) { key[i] = encryptionKey[i]; } key[i++] = num & 0xff; key[i++] = num >> 8 & 0xff; key[i++] = num >> 16 & 0xff; key[i++] = gen & 0xff; key[i++] = gen >> 8 & 0xff; if (isAes) { key[i++] = 0x73; key[i++] = 0x41; key[i++] = 0x6c; key[i++] = 0x54; } var hash = calculateMD5(key, 0, i); return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); } function buildCipherConstructor(cf, name, num, gen, key) { if (!(0, _primitives.isName)(name)) { throw new _util.FormatError("Invalid crypt filter name."); } var cryptFilter = cf.get(name.name); var cfm; if (cryptFilter !== null && cryptFilter !== undefined) { cfm = cryptFilter.get("CFM"); } if (!cfm || cfm.name === "None") { return function cipherTransformFactoryBuildCipherConstructorNone() { return new NullCipher(); }; } if (cfm.name === "V2") { return function cipherTransformFactoryBuildCipherConstructorV2() { return new ARCFourCipher(buildObjectKey(num, gen, key, false)); }; } if (cfm.name === "AESV2") { return function cipherTransformFactoryBuildCipherConstructorAESV2() { return new AES128Cipher(buildObjectKey(num, gen, key, true)); }; } if (cfm.name === "AESV3") { return function cipherTransformFactoryBuildCipherConstructorAESV3() { return new AES256Cipher(key); }; } throw new _util.FormatError("Unknown crypto method"); } CipherTransformFactory.prototype = { createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) { if (this.algorithm === 4 || this.algorithm === 5) { return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); } var key = buildObjectKey(num, gen, this.encryptionKey, false); var cipherConstructor = function buildCipherCipherConstructor() { return new ARCFourCipher(key); }; return new CipherTransform(cipherConstructor, cipherConstructor); } }; return CipherTransformFactory; }(); exports.CipherTransformFactory = CipherTransformFactory; /***/ }), /* 23 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ColorSpace = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { const COMPONENTS = 3; alpha01 = alpha01 !== 1 ? 0 : alpha01; const xRatio = w1 / w2; const yRatio = h1 / h2; let newIndex = 0, oldIndex; const xScaled = new Uint16Array(w2); const w1Scanline = w1 * COMPONENTS; for (let i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; } for (let i = 0; i < h2; i++) { const py = Math.floor(i * yRatio) * w1Scanline; for (let j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; newIndex += alpha01; } } } class ColorSpace { constructor(name, numComps) { if (this.constructor === ColorSpace) { (0, _util.unreachable)("Cannot initialize ColorSpace."); } this.name = name; this.numComps = numComps; } getRgb(src, srcOffset) { const rgb = new Uint8ClampedArray(3); this.getRgbItem(src, srcOffset, rgb, 0); return rgb; } getRgbItem(src, srcOffset, dest, destOffset) { (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); } getOutputLength(inputLength, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); } isPassthrough(bits) { return false; } isDefaultDecode(decodeMap, bpc) { return ColorSpace.isDefaultDecode(decodeMap, this.numComps); } fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { const count = originalWidth * originalHeight; let rgbBuf = null; const numComponentColors = 1 << bpc; const needsResizing = originalHeight !== height || originalWidth !== width; if (this.isPassthrough(bpc)) { rgbBuf = comps; } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); for (let i = 0; i < numComponentColors; i++) { allColors[i] = i; } const colorMap = new Uint8ClampedArray(numComponentColors * 3); this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); if (!needsResizing) { let destPos = 0; for (let i = 0; i < count; ++i) { const key = comps[i] * 3; dest[destPos++] = colorMap[key]; dest[destPos++] = colorMap[key + 1]; dest[destPos++] = colorMap[key + 2]; destPos += alpha01; } } else { rgbBuf = new Uint8Array(count * 3); let rgbPos = 0; for (let i = 0; i < count; ++i) { const key = comps[i] * 3; rgbBuf[rgbPos++] = colorMap[key]; rgbBuf[rgbPos++] = colorMap[key + 1]; rgbBuf[rgbPos++] = colorMap[key + 2]; } } } else { if (!needsResizing) { this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); } else { rgbBuf = new Uint8ClampedArray(count * 3); this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); } } if (rgbBuf) { if (needsResizing) { resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); } else { let destPos = 0, rgbPos = 0; for (let i = 0, ii = width * actualHeight; i < ii; i++) { dest[destPos++] = rgbBuf[rgbPos++]; dest[destPos++] = rgbBuf[rgbPos++]; dest[destPos++] = rgbBuf[rgbPos++]; destPos += alpha01; } } } } get usesZeroToOneRange() { return (0, _util.shadow)(this, "usesZeroToOneRange", true); } static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { if (!localColorSpaceCache) { throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); } if (!parsedColorSpace) { throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); } let csName, csRef; if (cacheKey instanceof _primitives.Ref) { csRef = cacheKey; cacheKey = xref.fetch(cacheKey); } if (cacheKey instanceof _primitives.Name) { csName = cacheKey.name; } if (csName || csRef) { localColorSpaceCache.set(csName, csRef, parsedColorSpace); } } static getCached(cacheKey, xref, localColorSpaceCache) { if (!localColorSpaceCache) { throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); } if (cacheKey instanceof _primitives.Ref) { const localColorSpace = localColorSpaceCache.getByRef(cacheKey); if (localColorSpace) { return localColorSpace; } try { cacheKey = xref.fetch(cacheKey); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } } if (cacheKey instanceof _primitives.Name) { const localColorSpace = localColorSpaceCache.getByName(cacheKey.name); if (localColorSpace) { return localColorSpace; } } return null; } static async parseAsync({ cs, xref, resources = null, pdfFunctionFactory, localColorSpaceCache }) { const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; } static parse({ cs, xref, resources = null, pdfFunctionFactory, localColorSpaceCache }) { const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); if (cachedColorSpace) { return cachedColorSpace; } const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; } static _parse(cs, xref, resources = null, pdfFunctionFactory) { cs = xref.fetchIfRef(cs); if ((0, _primitives.isName)(cs)) { switch (cs.name) { case "DeviceGray": case "G": return this.singletons.gray; case "DeviceRGB": case "RGB": return this.singletons.rgb; case "DeviceCMYK": case "CMYK": return this.singletons.cmyk; case "Pattern": return new PatternCS(null); default: if ((0, _primitives.isDict)(resources)) { const colorSpaces = resources.get("ColorSpace"); if ((0, _primitives.isDict)(colorSpaces)) { const resourcesCS = colorSpaces.get(cs.name); if (resourcesCS) { if ((0, _primitives.isName)(resourcesCS)) { return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); } cs = resourcesCS; break; } } } throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`); } } if (Array.isArray(cs)) { const mode = xref.fetchIfRef(cs[0]).name; let params, numComps, baseCS, whitePoint, blackPoint, gamma; switch (mode) { case "DeviceGray": case "G": return this.singletons.gray; case "DeviceRGB": case "RGB": return this.singletons.rgb; case "DeviceCMYK": case "CMYK": return this.singletons.cmyk; case "CalGray": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.get("Gamma"); return new CalGrayCS(whitePoint, blackPoint, gamma); case "CalRGB": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.getArray("Gamma"); const matrix = params.getArray("Matrix"); return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); case "ICCBased": const stream = xref.fetchIfRef(cs[1]); const dict = stream.dict; numComps = dict.get("N"); const alt = dict.get("Alternate"); if (alt) { const altCS = this._parse(alt, xref, resources, pdfFunctionFactory); if (altCS.numComps === numComps) { return altCS; } (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); } if (numComps === 1) { return this.singletons.gray; } else if (numComps === 3) { return this.singletons.rgb; } else if (numComps === 4) { return this.singletons.cmyk; } break; case "Pattern": baseCS = cs[1] || null; if (baseCS) { baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); } return new PatternCS(baseCS); case "Indexed": case "I": baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); const hiVal = xref.fetchIfRef(cs[2]) + 1; const lookup = xref.fetchIfRef(cs[3]); return new IndexedCS(baseCS, hiVal, lookup); case "Separation": case "DeviceN": const name = xref.fetchIfRef(cs[1]); numComps = Array.isArray(name) ? name.length : 1; baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); const tintFn = pdfFunctionFactory.create(cs[3]); return new AlternateCS(numComps, baseCS, tintFn); case "Lab": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); const range = params.getArray("Range"); return new LabCS(whitePoint, blackPoint, range); default: throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`); } } throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`); } static isDefaultDecode(decode, numComps) { if (!Array.isArray(decode)) { return true; } if (numComps * 2 !== decode.length) { (0, _util.warn)("The decode map is not the correct length"); return true; } for (let i = 0, ii = decode.length; i < ii; i += 2) { if (decode[i] !== 0 || decode[i + 1] !== 1) { return false; } } return true; } static get singletons() { return (0, _util.shadow)(this, "singletons", { get gray() { return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); }, get rgb() { return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); }, get cmyk() { return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); } }); } } exports.ColorSpace = ColorSpace; class AlternateCS extends ColorSpace { constructor(numComps, base, tintFn) { super("Alternate", numComps); this.base = base; this.tintFn = tintFn; this.tmpBuf = new Float32Array(base.numComps); } getRgbItem(src, srcOffset, dest, destOffset) { const tmpBuf = this.tmpBuf; this.tintFn(src, srcOffset, tmpBuf, 0); this.base.getRgbItem(tmpBuf, 0, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const tintFn = this.tintFn; const base = this.base; const scale = 1 / ((1 << bits) - 1); const baseNumComps = base.numComps; const usesZeroToOneRange = base.usesZeroToOneRange; const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; let pos = isPassthrough ? destOffset : 0; const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); const numComps = this.numComps; const scaled = new Float32Array(numComps); const tinted = new Float32Array(baseNumComps); let i, j; for (i = 0; i < count; i++) { for (j = 0; j < numComps; j++) { scaled[j] = src[srcOffset++] * scale; } tintFn(scaled, 0, tinted, 0); if (usesZeroToOneRange) { for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } } else { base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } } if (!isPassthrough) { base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); } } getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); } } class PatternCS extends ColorSpace { constructor(baseCS) { super("Pattern", null); this.base = baseCS; } isDefaultDecode(decodeMap, bpc) { (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); } } class IndexedCS extends ColorSpace { constructor(base, highVal, lookup) { super("Indexed", 1); this.base = base; this.highVal = highVal; const length = base.numComps * highVal; this.lookup = new Uint8Array(length); if ((0, _primitives.isStream)(lookup)) { const bytes = lookup.getBytes(length); this.lookup.set(bytes); } else if (typeof lookup === "string") { for (let i = 0; i < length; ++i) { this.lookup[i] = lookup.charCodeAt(i) & 0xff; } } else { throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`); } } getRgbItem(src, srcOffset, dest, destOffset) { const numComps = this.base.numComps; const start = src[srcOffset] * numComps; this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const base = this.base; const numComps = base.numComps; const outputDelta = base.getOutputLength(numComps, alpha01); const lookup = this.lookup; for (let i = 0; i < count; ++i) { const lookupPos = src[srcOffset++] * numComps; base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); destOffset += outputDelta; } } getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); } isDefaultDecode(decodeMap, bpc) { if (!Array.isArray(decodeMap)) { return true; } if (decodeMap.length !== 2) { (0, _util.warn)("Decode map length is not correct"); return true; } if (!Number.isInteger(bpc) || bpc < 1) { (0, _util.warn)("Bits per component is not correct"); return true; } return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; } } class DeviceGrayCS extends ColorSpace { constructor() { super("DeviceGray", 1); } getRgbItem(src, srcOffset, dest, destOffset) { const c = src[srcOffset] * 255; dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 255 / ((1 << bits) - 1); let j = srcOffset, q = destOffset; for (let i = 0; i < count; ++i) { const c = scale * src[j++]; dest[q++] = c; dest[q++] = c; dest[q++] = c; q += alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } } class DeviceRgbCS extends ColorSpace { constructor() { super("DeviceRGB", 3); } getRgbItem(src, srcOffset, dest, destOffset) { dest[destOffset] = src[srcOffset] * 255; dest[destOffset + 1] = src[srcOffset + 1] * 255; dest[destOffset + 2] = src[srcOffset + 2] * 255; } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { if (bits === 8 && alpha01 === 0) { dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); return; } const scale = 255 / ((1 << bits) - 1); let j = srcOffset, q = destOffset; for (let i = 0; i < count; ++i) { dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; q += alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } isPassthrough(bits) { return bits === 8; } } const DeviceCmykCS = function DeviceCmykCSClosure() { function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { const c = src[srcOffset] * srcScale; const m = src[srcOffset + 1] * srcScale; const y = src[srcOffset + 2] * srcScale; const k = src[srcOffset + 3] * srcScale; dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); } class DeviceCmykCS extends ColorSpace { constructor() { super("DeviceCMYK", 4); } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(src, srcOffset, 1, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; i++) { convertToRgb(src, srcOffset, scale, dest, destOffset); srcOffset += 4; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength / 4 * (3 + alpha01) | 0; } } return DeviceCmykCS; }(); const CalGrayCS = function CalGrayCSClosure() { function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { const A = src[srcOffset] * scale; const AG = A ** cs.G; const L = cs.YW * AG; const val = Math.max(295.8 * L ** 0.333333333333333333 - 40.8, 0); dest[destOffset] = val; dest[destOffset + 1] = val; dest[destOffset + 2] = val; } class CalGrayCS extends ColorSpace { constructor(whitePoint, blackPoint, gamma) { super("CalGray", 1); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); } blackPoint = blackPoint || [0, 0, 0]; gamma = gamma || 1; this.XW = whitePoint[0]; this.YW = whitePoint[1]; this.ZW = whitePoint[2]; this.XB = blackPoint[0]; this.YB = blackPoint[1]; this.ZB = blackPoint[2]; this.G = gamma; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); this.XB = this.YB = this.ZB = 0; } if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); } if (this.G < 1) { (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default."); this.G = 1; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 1; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } } return CalGrayCS; }(); const CalRGBCS = function CalRGBCSClosure() { const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); const tempNormalizeMatrix = new Float32Array(3); const tempConvertMatrix1 = new Float32Array(3); const tempConvertMatrix2 = new Float32Array(3); const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0; function matrixProduct(a, b, result) { result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; } function convertToFlat(sourceWhitePoint, LMS, result) { result[0] = LMS[0] * 1 / sourceWhitePoint[0]; result[1] = LMS[1] * 1 / sourceWhitePoint[1]; result[2] = LMS[2] * 1 / sourceWhitePoint[2]; } function convertToD65(sourceWhitePoint, LMS, result) { const D65X = 0.95047; const D65Y = 1; const D65Z = 1.08883; result[0] = LMS[0] * D65X / sourceWhitePoint[0]; result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; } function sRGBTransferFunction(color) { if (color <= 0.0031308) { return adjustToRange(0, 1, 12.92 * color); } if (color >= 0.99554525) { return 1; } return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055); } function adjustToRange(min, max, value) { return Math.max(min, Math.min(max, value)); } function decodeL(L) { if (L < 0) { return -decodeL(-L); } if (L > 8.0) { return ((L + 16) / 116) ** 3; } return L * DECODE_L_CONSTANT; } function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { result[0] = XYZ_Flat[0]; result[1] = XYZ_Flat[1]; result[2] = XYZ_Flat[2]; return; } const zeroDecodeL = decodeL(0); const X_DST = zeroDecodeL; const X_SRC = decodeL(sourceBlackPoint[0]); const Y_DST = zeroDecodeL; const Y_SRC = decodeL(sourceBlackPoint[1]); const Z_DST = zeroDecodeL; const Z_SRC = decodeL(sourceBlackPoint[2]); const X_Scale = (1 - X_DST) / (1 - X_SRC); const X_Offset = 1 - X_Scale; const Y_Scale = (1 - Y_DST) / (1 - Y_SRC); const Y_Offset = 1 - Y_Scale; const Z_Scale = (1 - Z_DST) / (1 - Z_SRC); const Z_Offset = 1 - Z_Scale; result[0] = XYZ_Flat[0] * X_Scale + X_Offset; result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; } function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { result[0] = XYZ_In[0]; result[1] = XYZ_In[1]; result[2] = XYZ_In[2]; return; } const LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); const LMS_Flat = tempNormalizeMatrix; convertToFlat(sourceWhitePoint, LMS, LMS_Flat); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); } function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { const LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); const LMS_D65 = tempNormalizeMatrix; convertToD65(sourceWhitePoint, LMS, LMS_D65); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); } function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { const A = adjustToRange(0, 1, src[srcOffset] * scale); const B = adjustToRange(0, 1, src[srcOffset + 1] * scale); const C = adjustToRange(0, 1, src[srcOffset + 2] * scale); const AGR = A === 1 ? 1 : A ** cs.GR; const BGG = B === 1 ? 1 : B ** cs.GG; const CGB = C === 1 ? 1 : C ** cs.GB; const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; const XYZ = tempConvertMatrix1; XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; const XYZ_Flat = tempConvertMatrix2; normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); const XYZ_Black = tempConvertMatrix1; compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); const XYZ_D65 = tempConvertMatrix2; normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); const SRGB = tempConvertMatrix1; matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; } class CalRGBCS extends ColorSpace { constructor(whitePoint, blackPoint, gamma, matrix) { super("CalRGB", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); } blackPoint = blackPoint || new Float32Array(3); gamma = gamma || new Float32Array([1, 1, 1]); matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); const XW = whitePoint[0]; const YW = whitePoint[1]; const ZW = whitePoint[2]; this.whitePoint = whitePoint; const XB = blackPoint[0]; const YB = blackPoint[1]; const ZB = blackPoint[2]; this.blackPoint = blackPoint; this.GR = gamma[0]; this.GG = gamma[1]; this.GB = gamma[2]; this.MXA = matrix[0]; this.MYA = matrix[1]; this.MZA = matrix[2]; this.MXB = matrix[3]; this.MYB = matrix[4]; this.MZB = matrix[5]; this.MXC = matrix[6]; this.MYC = matrix[7]; this.MZC = matrix[8]; if (XW < 0 || ZW < 0 || YW !== 1) { throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); } if (XB < 0 || YB < 0 || ZB < 0) { (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default."); this.blackPoint = new Float32Array(3); } if (this.GR < 0 || this.GG < 0 || this.GB < 0) { (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); this.GR = this.GG = this.GB = 1; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 3; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } } return CalRGBCS; }(); const LabCS = function LabCSClosure() { function fn_g(x) { let result; if (x >= 6 / 29) { result = x * x * x; } else { result = 108 / 841 * (x - 4 / 29); } return result; } function decode(value, high1, low2, high2) { return low2 + value * (high2 - low2) / high1; } function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { let Ls = src[srcOffset]; let as = src[srcOffset + 1]; let bs = src[srcOffset + 2]; if (maxVal !== false) { Ls = decode(Ls, maxVal, 0, 100); as = decode(as, maxVal, cs.amin, cs.amax); bs = decode(bs, maxVal, cs.bmin, cs.bmax); } if (as > cs.amax) { as = cs.amax; } else if (as < cs.amin) { as = cs.amin; } if (bs > cs.bmax) { bs = cs.bmax; } else if (bs < cs.bmin) { bs = cs.bmin; } const M = (Ls + 16) / 116; const L = M + as / 500; const N = M - bs / 200; const X = cs.XW * fn_g(L); const Y = cs.YW * fn_g(M); const Z = cs.ZW * fn_g(N); let r, g, b; if (cs.ZW < 1) { r = X * 3.1339 + Y * -1.617 + Z * -0.4906; g = X * -0.9785 + Y * 1.916 + Z * 0.0333; b = X * 0.072 + Y * -0.229 + Z * 1.4057; } else { r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; b = X * 0.0557 + Y * -0.204 + Z * 1.057; } dest[destOffset] = Math.sqrt(r) * 255; dest[destOffset + 1] = Math.sqrt(g) * 255; dest[destOffset + 2] = Math.sqrt(b) * 255; } class LabCS extends ColorSpace { constructor(whitePoint, blackPoint, range) { super("Lab", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space Lab"); } blackPoint = blackPoint || [0, 0, 0]; range = range || [-100, 100, -100, 100]; this.XW = whitePoint[0]; this.YW = whitePoint[1]; this.ZW = whitePoint[2]; this.amin = range[0]; this.amax = range[1]; this.bmin = range[2]; this.bmax = range[3]; this.XB = blackPoint[0]; this.YB = blackPoint[1]; this.ZB = blackPoint[2]; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, _util.info)("Invalid BlackPoint, falling back to default"); this.XB = this.YB = this.ZB = 0; } if (this.amin > this.amax || this.bmin > this.bmax) { (0, _util.info)("Invalid Range, falling back to defaults"); this.amin = -100; this.amax = 100; this.bmin = -100; this.bmax = 100; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, false, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const maxVal = (1 << bits) - 1; for (let i = 0; i < count; i++) { convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); srcOffset += 3; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } isDefaultDecode(decodeMap, bpc) { return true; } get usesZeroToOneRange() { return (0, _util.shadow)(this, "usesZeroToOneRange", false); } } return LabCS; }(); /***/ }), /* 24 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.GlobalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.LocalImageCache = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); class BaseLocalCache { constructor(options) { if (this.constructor === BaseLocalCache) { (0, _util.unreachable)("Cannot initialize BaseLocalCache."); } if (!options || !options.onlyRefs) { this._nameRefMap = new Map(); this._imageMap = new Map(); } this._imageCache = new _primitives.RefSetCache(); } getByName(name) { const ref = this._nameRefMap.get(name); if (ref) { return this.getByRef(ref); } return this._imageMap.get(name) || null; } getByRef(ref) { return this._imageCache.get(ref) || null; } set(name, ref, data) { (0, _util.unreachable)("Abstract method `set` called."); } } class LocalImageCache extends BaseLocalCache { set(name, ref = null, data) { if (!name) { throw new Error('LocalImageCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalImageCache = LocalImageCache; class LocalColorSpaceCache extends BaseLocalCache { set(name = null, ref = null, data) { if (!name && !ref) { throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } if (name) { this._nameRefMap.set(name, ref); } this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalColorSpaceCache = LocalColorSpaceCache; class LocalFunctionCache extends BaseLocalCache { constructor(options) { super({ onlyRefs: true }); } getByName(name) { (0, _util.unreachable)("Should not call `getByName` method."); } set(name = null, ref, data) { if (!ref) { throw new Error('LocalFunctionCache.set - expected "ref" argument.'); } if (this._imageCache.has(ref)) { return; } this._imageCache.put(ref, data); } } exports.LocalFunctionCache = LocalFunctionCache; class LocalGStateCache extends BaseLocalCache { set(name, ref = null, data) { if (!name) { throw new Error('LocalGStateCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalGStateCache = LocalGStateCache; class GlobalImageCache { static get NUM_PAGES_THRESHOLD() { return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2); } static get MAX_IMAGES_TO_CACHE() { return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10); } constructor() { this._refCache = new _primitives.RefSetCache(); this._imageCache = new _primitives.RefSetCache(); } shouldCache(ref, pageIndex) { const pageIndexSet = this._refCache.get(ref); const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1; if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) { return false; } if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) { return false; } return true; } addPageIndex(ref, pageIndex) { let pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { pageIndexSet = new Set(); this._refCache.put(ref, pageIndexSet); } pageIndexSet.add(pageIndex); } getData(ref, pageIndex) { const pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { return null; } if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { return null; } if (!this._imageCache.has(ref)) { return null; } pageIndexSet.add(pageIndex); return this._imageCache.get(ref); } setData(ref, data) { if (!this._refCache.has(ref)) { throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.'); } if (this._imageCache.has(ref)) { return; } if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) { (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE."); return; } this._imageCache.put(ref, data); } clear(onlyData = false) { if (!onlyData) { this._refCache.clear(); } this._imageCache.clear(); } } exports.GlobalImageCache = GlobalImageCache; /***/ }), /* 25 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getQuadPoints = getQuadPoints; exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; var _util = __w_pdfjs_require__(2); var _obj = __w_pdfjs_require__(10); var _primitives = __w_pdfjs_require__(5); var _colorspace = __w_pdfjs_require__(23); var _core_utils = __w_pdfjs_require__(8); var _operator_list = __w_pdfjs_require__(26); var _stream = __w_pdfjs_require__(12); var _writer = __w_pdfjs_require__(27); class AnnotationFactory { static create(xref, ref, pdfManager, idFactory) { return pdfManager.ensureCatalog("acroForm").then(acroForm => { return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm]); }); } static _create(xref, ref, pdfManager, idFactory, acroForm) { const dict = xref.fetchIfRef(ref); if (!(0, _primitives.isDict)(dict)) { return undefined; } const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`; let subtype = dict.get("Subtype"); subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; const parameters = { xref, ref, dict, subtype, id, pdfManager, acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty }; switch (subtype) { case "Link": return new LinkAnnotation(parameters); case "Text": return new TextAnnotation(parameters); case "Widget": let fieldType = (0, _core_utils.getInheritableProperty)({ dict, key: "FT" }); fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; switch (fieldType) { case "Tx": return new TextWidgetAnnotation(parameters); case "Btn": return new ButtonWidgetAnnotation(parameters); case "Ch": return new ChoiceWidgetAnnotation(parameters); } (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base field type."); return new WidgetAnnotation(parameters); case "Popup": return new PopupAnnotation(parameters); case "FreeText": return new FreeTextAnnotation(parameters); case "Line": return new LineAnnotation(parameters); case "Square": return new SquareAnnotation(parameters); case "Circle": return new CircleAnnotation(parameters); case "PolyLine": return new PolylineAnnotation(parameters); case "Polygon": return new PolygonAnnotation(parameters); case "Caret": return new CaretAnnotation(parameters); case "Ink": return new InkAnnotation(parameters); case "Highlight": return new HighlightAnnotation(parameters); case "Underline": return new UnderlineAnnotation(parameters); case "Squiggly": return new SquigglyAnnotation(parameters); case "StrikeOut": return new StrikeOutAnnotation(parameters); case "Stamp": return new StampAnnotation(parameters); case "FileAttachment": return new FileAttachmentAnnotation(parameters); default: if (!subtype) { (0, _util.warn)("Annotation is missing the required /Subtype."); } else { (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base annotation."); } return new Annotation(parameters); } } } exports.AnnotationFactory = AnnotationFactory; function getQuadPoints(dict, rect) { if (!dict.has("QuadPoints")) { return null; } const quadPoints = dict.getArray("QuadPoints"); if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) { return null; } const quadPointsLists = []; for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) { quadPointsLists.push([]); for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { const x = quadPoints[j]; const y = quadPoints[j + 1]; if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) { return null; } quadPointsLists[i].push({ x, y }); } } return quadPointsLists; } function getTransformMatrix(rect, bbox, matrix) { const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); if (minX === maxX || minY === maxY) { return [1, 0, 0, 1, rect[0], rect[1]]; } const xRatio = (rect[2] - rect[0]) / (maxX - minX); const yRatio = (rect[3] - rect[1]) / (maxY - minY); return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; } class Annotation { constructor(params) { const dict = params.dict; this.setContents(dict.get("Contents")); this.setModificationDate(dict.get("M")); this.setFlags(dict.get("F")); this.setRectangle(dict.getArray("Rect")); this.setColor(dict.getArray("C")); this.setBorderStyle(dict); this.setAppearance(dict); this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, contents: this.contents, hasAppearance: !!this.appearance, id: params.id, modificationDate: this.modificationDate, rect: this.rectangle, subtype: params.subtype }; } _hasFlag(flags, flag) { return !!(flags & flag); } _isViewable(flags) { return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); } _isPrintable(flags) { return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN); } get viewable() { if (this.flags === 0) { return true; } return this._isViewable(this.flags); } get printable() { if (this.flags === 0) { return false; } return this._isPrintable(this.flags); } setContents(contents) { this.contents = (0, _util.stringToPDFString)(contents || ""); } setModificationDate(modificationDate) { this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null; } setFlags(flags) { this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; } hasFlag(flag) { return this._hasFlag(this.flags, flag); } setRectangle(rectangle) { if (Array.isArray(rectangle) && rectangle.length === 4) { this.rectangle = _util.Util.normalizeRect(rectangle); } else { this.rectangle = [0, 0, 0, 0]; } } setColor(color) { const rgbColor = new Uint8ClampedArray(3); if (!Array.isArray(color)) { this.color = rgbColor; return; } switch (color.length) { case 0: this.color = null; break; case 1: _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 3: _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 4: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; default: this.color = rgbColor; break; } } setBorderStyle(borderStyle) { this.borderStyle = new AnnotationBorderStyle(); if (!(0, _primitives.isDict)(borderStyle)) { return; } if (borderStyle.has("BS")) { const dict = borderStyle.get("BS"); const dictType = dict.get("Type"); if (!dictType || (0, _primitives.isName)(dictType, "Border")) { this.borderStyle.setWidth(dict.get("W"), this.rectangle); this.borderStyle.setStyle(dict.get("S")); this.borderStyle.setDashArray(dict.getArray("D")); } } else if (borderStyle.has("Border")) { const array = borderStyle.getArray("Border"); if (Array.isArray(array) && array.length >= 3) { this.borderStyle.setHorizontalCornerRadius(array[0]); this.borderStyle.setVerticalCornerRadius(array[1]); this.borderStyle.setWidth(array[2], this.rectangle); if (array.length === 4) { this.borderStyle.setDashArray(array[3]); } } } else { this.borderStyle.setWidth(0); } } setAppearance(dict) { this.appearance = null; const appearanceStates = dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } const normalAppearanceState = appearanceStates.get("N"); if ((0, _primitives.isStream)(normalAppearanceState)) { this.appearance = normalAppearanceState; return; } if (!(0, _primitives.isDict)(normalAppearanceState)) { return; } const as = dict.get("AS"); if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { return; } this.appearance = normalAppearanceState.get(as.name); } loadResources(keys) { return this.appearance.dict.getAsync("Resources").then(resources => { if (!resources) { return undefined; } const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref); return objectLoader.load().then(function () { return resources; }); }); } getOperatorList(evaluator, task, renderForms, annotationStorage) { if (!this.appearance) { return Promise.resolve(new _operator_list.OperatorList()); } const appearance = this.appearance; const data = this.data; const appearanceDict = appearance.dict; const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]); const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; const transform = getTransformMatrix(data.rect, bbox, matrix); return resourcesPromise.then(resources => { const opList = new _operator_list.OperatorList(); opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]); return evaluator.getOperatorList({ stream: appearance, task, resources, operatorList: opList }).then(() => { opList.addOp(_util.OPS.endAnnotation, []); appearance.reset(); return opList; }); }); } async save(evaluator, task, annotationStorage) { return null; } } exports.Annotation = Annotation; class AnnotationBorderStyle { constructor() { this.width = 1; this.style = _util.AnnotationBorderStyleType.SOLID; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0; } setWidth(width, rect = [0, 0, 0, 0]) { if ((0, _primitives.isName)(width)) { this.width = 0; return; } if (Number.isInteger(width)) { if (width > 0) { const maxWidth = (rect[2] - rect[0]) / 2; const maxHeight = (rect[3] - rect[1]) / 2; if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`); width = 1; } } this.width = width; } } setStyle(style) { if (!(0, _primitives.isName)(style)) { return; } switch (style.name) { case "S": this.style = _util.AnnotationBorderStyleType.SOLID; break; case "D": this.style = _util.AnnotationBorderStyleType.DASHED; break; case "B": this.style = _util.AnnotationBorderStyleType.BEVELED; break; case "I": this.style = _util.AnnotationBorderStyleType.INSET; break; case "U": this.style = _util.AnnotationBorderStyleType.UNDERLINE; break; } } setDashArray(dashArray) { if (Array.isArray(dashArray) && dashArray.length > 0) { let isValid = true; let allZeros = true; for (const element of dashArray) { const validNumber = +element >= 0; if (!validNumber) { isValid = false; break; } else if (element > 0) { allZeros = false; } } if (isValid && !allZeros) { this.dashArray = dashArray; } else { this.width = 0; } } else if (dashArray) { this.width = 0; } } setHorizontalCornerRadius(radius) { if (Number.isInteger(radius)) { this.horizontalCornerRadius = radius; } } setVerticalCornerRadius(radius) { if (Number.isInteger(radius)) { this.verticalCornerRadius = radius; } } } exports.AnnotationBorderStyle = AnnotationBorderStyle; class MarkupAnnotation extends Annotation { constructor(parameters) { super(parameters); const dict = parameters.dict; if (dict.has("IRT")) { const rawIRT = dict.getRaw("IRT"); this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null; const rt = dict.get("RT"); this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY; } if (this.data.replyType === _util.AnnotationReplyType.GROUP) { const parent = dict.get("IRT"); this.data.title = (0, _util.stringToPDFString)(parent.get("T") || ""); this.setContents(parent.get("Contents")); this.data.contents = this.contents; if (!parent.has("CreationDate")) { this.data.creationDate = null; } else { this.setCreationDate(parent.get("CreationDate")); this.data.creationDate = this.creationDate; } if (!parent.has("M")) { this.data.modificationDate = null; } else { this.setModificationDate(parent.get("M")); this.data.modificationDate = this.modificationDate; } this.data.hasPopup = parent.has("Popup"); if (!parent.has("C")) { this.data.color = null; } else { this.setColor(parent.getArray("C")); this.data.color = this.color; } } else { this.data.title = (0, _util.stringToPDFString)(dict.get("T") || ""); this.setCreationDate(dict.get("CreationDate")); this.data.creationDate = this.creationDate; this.data.hasPopup = dict.has("Popup"); if (!dict.has("C")) { this.data.color = null; } } } setCreationDate(creationDate) { this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null; } } exports.MarkupAnnotation = MarkupAnnotation; class WidgetAnnotation extends Annotation { constructor(params) { super(params); const dict = params.dict; const data = this.data; this.ref = params.ref; data.annotationType = _util.AnnotationType.WIDGET; data.fieldName = this._constructFieldName(dict); const fieldValue = (0, _core_utils.getInheritableProperty)({ dict, key: "V", getArray: true }); data.fieldValue = this._decodeFormValue(fieldValue); data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); data.defaultAppearance = (0, _core_utils.getInheritableProperty)({ dict, key: "DA" }) || params.acroForm.get("DA") || ""; const fieldType = (0, _core_utils.getInheritableProperty)({ dict, key: "FT" }); data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; this.fieldResources = (0, _core_utils.getInheritableProperty)({ dict, key: "DR" }) || params.acroForm.get("DR") || _primitives.Dict.empty; data.fieldFlags = (0, _core_utils.getInheritableProperty)({ dict, key: "Ff" }); if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { data.fieldFlags = 0; } data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); if (data.fieldType === "Sig") { data.fieldValue = null; this.setFlags(_util.AnnotationFlag.HIDDEN); } } _constructFieldName(dict) { if (!dict.has("T") && !dict.has("Parent")) { (0, _util.warn)("Unknown field name, falling back to empty field name."); return ""; } if (!dict.has("Parent")) { return (0, _util.stringToPDFString)(dict.get("T")); } const fieldName = []; if (dict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); } let loopDict = dict; while (loopDict.has("Parent")) { loopDict = loopDict.get("Parent"); if (!(0, _primitives.isDict)(loopDict)) { break; } if (loopDict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); } } return fieldName.join("."); } _decodeFormValue(formValue) { if (Array.isArray(formValue)) { return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, _util.stringToPDFString)(item)); } else if ((0, _primitives.isName)(formValue)) { return (0, _util.stringToPDFString)(formValue.name); } else if ((0, _util.isString)(formValue)) { return (0, _util.stringToPDFString)(formValue); } return null; } hasFieldFlag(flag) { return !!(this.data.fieldFlags & flag); } getOperatorList(evaluator, task, renderForms, annotationStorage) { if (renderForms) { return Promise.resolve(new _operator_list.OperatorList()); } if (!this._hasText) { return super.getOperatorList(evaluator, task, renderForms, annotationStorage); } return this._getAppearance(evaluator, task, annotationStorage).then(content => { if (this.appearance && content === null) { return super.getOperatorList(evaluator, task, renderForms, annotationStorage); } const operatorList = new _operator_list.OperatorList(); if (!this.data.defaultAppearance || content === null) { return operatorList; } const matrix = [1, 0, 0, 1, 0, 0]; const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; const transform = getTransformMatrix(this.data.rect, bbox, matrix); operatorList.addOp(_util.OPS.beginAnnotation, [this.data.rect, transform, matrix]); const stream = new _stream.StringStream(content); return evaluator.getOperatorList({ stream, task, resources: this.fieldResources, operatorList }).then(function () { operatorList.addOp(_util.OPS.endAnnotation, []); return operatorList; }); }); } async save(evaluator, task, annotationStorage) { if (this.data.fieldValue === annotationStorage[this.data.id]) { return null; } let appearance = await this._getAppearance(evaluator, task, annotationStorage); if (appearance === null) { return null; } const dict = evaluator.xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; const newRef = evaluator.xref.getNewRef(); const AP = new _primitives.Dict(evaluator.xref); AP.set("N", newRef); const value = annotationStorage[this.data.id]; const encrypt = evaluator.xref.encrypt; let originalTransform = null; let newTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen); appearance = newTransform.encryptString(appearance); } dict.set("V", value); dict.set("AP", AP); dict.set("M", `D:${(0, _util.getModificationDate)()}`); const appearanceDict = new _primitives.Dict(evaluator.xref); appearanceDict.set("Length", appearance.length); appearanceDict.set("Subtype", _primitives.Name.get("Form")); appearanceDict.set("Resources", this.fieldResources); appearanceDict.set("BBox", bbox); const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); bufferOriginal.push("\nendobj\n"); const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`]; (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform); bufferNew.push(" stream\n"); bufferNew.push(appearance); bufferNew.push("\nendstream\nendobj\n"); return [{ ref: this.ref, data: bufferOriginal.join("") }, { ref: newRef, data: bufferNew.join("") }]; } async _getAppearance(evaluator, task, annotationStorage) { const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); if (!annotationStorage || isPassword) { return null; } const value = annotationStorage[this.data.id]; if (value === "") { return ""; } const defaultPadding = 2; const hPadding = defaultPadding; const totalHeight = this.data.rect[3] - this.data.rect[1]; const totalWidth = this.data.rect[2] - this.data.rect[0]; const fontInfo = await this._getFontData(evaluator, task); const [font, fontName] = fontInfo; let fontSize = fontInfo[2]; fontSize = this._computeFontSize(font, fontName, fontSize, totalHeight); let descent = font.descent; if (isNaN(descent)) { descent = 0; } const vPadding = defaultPadding + Math.abs(descent) * fontSize; const defaultAppearance = this.data.defaultAppearance; const alignment = this.data.textAlignment; if (this.data.comb) { return this._getCombAppearance(defaultAppearance, value, totalWidth, hPadding, vPadding); } if (this.data.multiLine) { return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding); } if (alignment === 0 || alignment > 2) { return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(value)}) Tj` + " ET Q EMC"; } const renderedText = this._renderText(value, font, fontSize, totalWidth, alignment, hPadding, vPadding); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; } async _getFontData(evaluator, task) { const operatorList = new _operator_list.OperatorList(); const initialState = { fontSize: 0, font: null, fontName: null, clone() { return this; } }; await evaluator.getOperatorList({ stream: new _stream.StringStream(this.data.defaultAppearance), task, resources: this.fieldResources, operatorList, initialState }); return [initialState.font, initialState.fontName, initialState.fontSize]; } _computeFontSize(font, fontName, fontSize, height) { if (fontSize === null || fontSize === 0) { const em = font.charsToGlyphs("M", true)[0].width / 1000; const capHeight = 0.7 * em; fontSize = Math.max(1, Math.floor(height / (1.5 * capHeight))); let fontRegex = new RegExp(`/${fontName}\\s+[0-9\.]+\\s+Tf`); if (this.data.defaultAppearance.search(fontRegex) === -1) { fontRegex = new RegExp(`/${fontName}\\s+Tf`); } this.data.defaultAppearance = this.data.defaultAppearance.replace(fontRegex, `/${fontName} ${fontSize} Tf`); } return fontSize; } _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) { const glyphs = font.charsToGlyphs(text); const scale = fontSize / 1000; let width = 0; for (const glyph of glyphs) { width += glyph.width * scale; } let shift; if (alignment === 1) { shift = (totalWidth - width) / 2; } else if (alignment === 2) { shift = totalWidth - width - hPadding; } else { shift = hPadding; } shift = shift.toFixed(2); vPadding = vPadding.toFixed(2); return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`; } } class TextWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this._hasText = true; const dict = params.dict; if (!(0, _util.isString)(this.data.fieldValue)) { this.data.fieldValue = ""; } let alignment = (0, _core_utils.getInheritableProperty)({ dict, key: "Q" }); if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { alignment = null; } this.data.textAlignment = alignment; let maximumLength = (0, _core_utils.getInheritableProperty)({ dict, key: "MaxLen" }); if (!Number.isInteger(maximumLength) || maximumLength < 0) { maximumLength = null; } this.data.maxLen = maximumLength; this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null; } _getCombAppearance(defaultAppearance, text, width, hPadding, vPadding) { const combWidth = (width / this.data.maxLen).toFixed(2); const buf = []; for (const character of text) { buf.push(`(${(0, _util.escapeString)(character)}) Tj`); } const renderedComb = buf.join(` ${combWidth} 0 Td `); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; } _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) { const lines = text.split(/\r\n|\r|\n/); const buf = []; const totalWidth = width - 2 * hPadding; for (const line of lines) { const chunks = this._splitLine(line, font, fontSize, totalWidth); for (const chunk of chunks) { const padding = buf.length === 0 ? hPadding : 0; buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize)); } } const renderedText = buf.join("\n"); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; } _splitLine(line, font, fontSize, width) { if (line.length <= 1) { return [line]; } const scale = fontSize / 1000; const whitespace = font.charsToGlyphs(" ", true)[0].width * scale; const chunks = []; let lastSpacePos = -1, startChunk = 0, currentWidth = 0; for (let i = 0, ii = line.length; i < ii; i++) { const character = line.charAt(i); if (character === " ") { if (currentWidth + whitespace > width) { chunks.push(line.substring(startChunk, i)); startChunk = i; currentWidth = whitespace; lastSpacePos = -1; } else { currentWidth += whitespace; lastSpacePos = i; } } else { const charWidth = font.charsToGlyphs(character, false)[0].width * scale; if (currentWidth + charWidth > width) { if (lastSpacePos !== -1) { chunks.push(line.substring(startChunk, lastSpacePos + 1)); startChunk = i = lastSpacePos + 1; lastSpacePos = -1; currentWidth = 0; } else { chunks.push(line.substring(startChunk, i)); startChunk = i; currentWidth = charWidth; } } else { currentWidth += charWidth; } } } if (startChunk < line.length) { chunks.push(line.substring(startChunk, line.length)); } return chunks; } } class ButtonWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.checkedAppearance = null; this.uncheckedAppearance = null; this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); if (this.data.checkBox) { this._processCheckBox(params); } else if (this.data.radioButton) { this._processRadioButton(params); } else if (this.data.pushButton) { this._processPushButton(params); } else { (0, _util.warn)("Invalid field flags for button widget annotation"); } } getOperatorList(evaluator, task, renderForms, annotationStorage) { if (this.data.pushButton) { return super.getOperatorList(evaluator, task, false, annotationStorage); } if (annotationStorage) { const value = annotationStorage[this.data.id] || false; let appearance; if (value) { appearance = this.checkedAppearance; } else { appearance = this.uncheckedAppearance; } if (appearance) { const savedAppearance = this.appearance; this.appearance = appearance; const operatorList = super.getOperatorList(evaluator, task, renderForms, annotationStorage); this.appearance = savedAppearance; return operatorList; } return Promise.resolve(new _operator_list.OperatorList()); } return super.getOperatorList(evaluator, task, renderForms, annotationStorage); } async save(evaluator, task, annotationStorage) { if (this.data.checkBox) { return this._saveCheckbox(evaluator, task, annotationStorage); } if (this.data.radioButton) { return this._saveRadioButton(evaluator, task, annotationStorage); } return super.save(evaluator, task, annotationStorage); } async _saveCheckbox(evaluator, task, annotationStorage) { const defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off"; const value = annotationStorage[this.data.id]; if (defaultValue === value) { return null; } const dict = evaluator.xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const name = _primitives.Name.get(value ? this.data.exportValue : "Off"); dict.set("V", name); dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); const encrypt = evaluator.xref.encrypt; let originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); return [{ ref: this.ref, data: buffer.join("") }]; } async _saveRadioButton(evaluator, task, annotationStorage) { const defaultValue = this.data.fieldValue === this.data.buttonValue; const value = annotationStorage[this.data.id]; if (defaultValue === value) { return null; } const dict = evaluator.xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); let parentBuffer = null; const encrypt = evaluator.xref.encrypt; if (value) { if ((0, _primitives.isRef)(this.parent)) { const parent = evaluator.xref.fetch(this.parent); let parentTransform = null; if (encrypt) { parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen); } parent.set("V", name); parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`]; (0, _writer.writeDict)(parent, parentBuffer, parentTransform); parentBuffer.push("\nendobj\n"); } else if ((0, _primitives.isDict)(this.parent)) { this.parent.set("V", name); } } dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); let originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); const newRefs = [{ ref: this.ref, data: buffer.join("") }]; if (parentBuffer !== null) { newRefs.push({ ref: this.parent, data: parentBuffer.join("") }); } return newRefs; } _processCheckBox(params) { const customAppearance = params.dict.get("AP"); if (!(0, _primitives.isDict)(customAppearance)) { return; } const normalAppearance = customAppearance.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } const exportValues = normalAppearance.getKeys(); if (!exportValues.includes("Off")) { exportValues.push("Off"); } if (exportValues.length !== 2) { return; } this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0]; this.checkedAppearance = normalAppearance.get(this.data.exportValue); this.uncheckedAppearance = normalAppearance.get("Off") || null; } _processRadioButton(params) { this.data.fieldValue = this.data.buttonValue = null; const fieldParent = params.dict.get("Parent"); if ((0, _primitives.isDict)(fieldParent) && fieldParent.has("V")) { const fieldParentValue = fieldParent.get("V"); if ((0, _primitives.isName)(fieldParentValue)) { this.parent = params.dict.getRaw("Parent"); this.data.fieldValue = this._decodeFormValue(fieldParentValue); } } const appearanceStates = params.dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } const normalAppearance = appearanceStates.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } for (const key of normalAppearance.getKeys()) { if (key !== "Off") { this.data.buttonValue = key; break; } } this.checkedAppearance = normalAppearance.get(this.data.buttonValue); this.uncheckedAppearance = normalAppearance.get("Off") || null; } _processPushButton(params) { if (!params.dict.has("A")) { (0, _util.warn)("Push buttons without action dictionaries are not supported"); return; } _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } } class ChoiceWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.data.options = []; const options = (0, _core_utils.getInheritableProperty)({ dict: params.dict, key: "Opt" }); if (Array.isArray(options)) { const xref = params.xref; for (let i = 0, ii = options.length; i < ii; i++) { const option = xref.fetchIfRef(options[i]); const isOptionArray = Array.isArray(option); this.data.options[i] = { exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) }; } } if ((0, _util.isString)(this.data.fieldValue)) { this.data.fieldValue = [this.data.fieldValue]; } else if (!this.data.fieldValue) { this.data.fieldValue = []; } this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); this._hasText = true; } } class TextAnnotation extends MarkupAnnotation { constructor(parameters) { const DEFAULT_ICON_SIZE = 22; super(parameters); const dict = parameters.dict; this.data.annotationType = _util.AnnotationType.TEXT; if (this.data.hasAppearance) { this.data.name = "NoIcon"; } else { this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; this.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; } if (dict.has("State")) { this.data.state = dict.get("State") || null; this.data.stateModel = dict.get("StateModel") || null; } else { this.data.state = null; this.data.stateModel = null; } } } class LinkAnnotation extends Annotation { constructor(params) { super(params); this.data.annotationType = _util.AnnotationType.LINK; const quadPoints = getQuadPoints(params.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } } class PopupAnnotation extends Annotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POPUP; let parentItem = parameters.dict.get("Parent"); if (!parentItem) { (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); return; } const parentSubtype = parentItem.get("Subtype"); this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; const rawParent = parameters.dict.getRaw("Parent"); this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null; const rt = parentItem.get("RT"); if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { parentItem = parentItem.get("IRT"); } if (!parentItem.has("M")) { this.data.modificationDate = null; } else { this.setModificationDate(parentItem.get("M")); this.data.modificationDate = this.modificationDate; } if (!parentItem.has("C")) { this.data.color = null; } else { this.setColor(parentItem.getArray("C")); this.data.color = this.color; } if (!this.viewable) { const parentFlags = parentItem.get("F"); if (this._isViewable(parentFlags)) { this.setFlags(parentFlags); } } this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || ""); this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || ""); } } class FreeTextAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.FREETEXT; } } class LineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.LINE; this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L")); } } class SquareAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.SQUARE; } } class CircleAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.CIRCLE; } } class PolylineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POLYLINE; const rawVertices = parameters.dict.getArray("Vertices"); this.data.vertices = []; for (let i = 0, ii = rawVertices.length; i < ii; i += 2) { this.data.vertices.push({ x: rawVertices[i], y: rawVertices[i + 1] }); } } } class PolygonAnnotation extends PolylineAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POLYGON; } } class CaretAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.CARET; } } class InkAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.INK; const xref = parameters.xref; const originalInkLists = parameters.dict.getArray("InkList"); this.data.inkLists = []; for (let i = 0, ii = originalInkLists.length; i < ii; ++i) { this.data.inkLists.push([]); for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) { this.data.inkLists[i].push({ x: xref.fetchIfRef(originalInkLists[i][j]), y: xref.fetchIfRef(originalInkLists[i][j + 1]) }); } } } } class HighlightAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.HIGHLIGHT; const quadPoints = getQuadPoints(parameters.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } } } class UnderlineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.UNDERLINE; const quadPoints = getQuadPoints(parameters.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } } } class SquigglyAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.SQUIGGLY; const quadPoints = getQuadPoints(parameters.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } } } class StrikeOutAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.STRIKEOUT; const quadPoints = getQuadPoints(parameters.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } } } class StampAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.STAMP; } } class FileAttachmentAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref); this.data.annotationType = _util.AnnotationType.FILEATTACHMENT; this.data.file = file.serializable; } } /***/ }), /* 26 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.OperatorList = void 0; var _util = __w_pdfjs_require__(2); var QueueOptimizer = function QueueOptimizerClosure() { function addState(parentState, pattern, checkFn, iterateFn, processFn) { var state = parentState; for (var i = 0, ii = pattern.length - 1; i < ii; i++) { var item = pattern[i]; state = state[item] || (state[item] = []); } state[pattern[pattern.length - 1]] = { checkFn, iterateFn, processFn }; } function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { var iFirstPIMXO = iFirstSave + 2; for (var i = 0; i < count; i++) { var arg = argsArray[iFirstPIMXO + 4 * i]; var imageMask = arg.length === 1 && arg[0]; if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask; continue; } break; } return count - i; } var InitialState = []; addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintInlineImageXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`); }, function foundInlineImageGroup(context, i) { var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; var MAX_WIDTH = 1000; var IMAGE_PADDING = 1; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIIXO = curr - 1; var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { return i - (i - iFirstSave) % 4; } var maxX = 0; var map = [], maxLineHeight = 0; var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; var q; for (q = 0; q < count; q++) { var transform = argsArray[iFirstTransform + (q << 2)]; var img = argsArray[iFirstPIIXO + (q << 2)][0]; if (currentX + img.width > MAX_WIDTH) { maxX = Math.max(maxX, currentX); currentY += maxLineHeight + 2 * IMAGE_PADDING; currentX = 0; maxLineHeight = 0; } map.push({ transform, x: currentX, y: currentY, w: img.width, h: img.height }); currentX += img.width + 2 * IMAGE_PADDING; maxLineHeight = Math.max(maxLineHeight, img.height); } var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); var imgRowSize = imgWidth << 2; for (q = 0; q < count; q++) { var data = argsArray[iFirstPIIXO + (q << 2)][0].data; var rowSize = map[q].w << 2; var dataOffset = 0; var offset = map[q].x + map[q].y * imgWidth << 2; imgData.set(data.subarray(0, rowSize), offset - imgRowSize); for (var k = 0, kk = map[q].h; k < kk; k++) { imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); dataOffset += rowSize; offset += imgRowSize; } imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); while (offset >= 0) { data[offset - 4] = data[offset]; data[offset - 3] = data[offset + 1]; data[offset - 2] = data[offset + 2]; data[offset - 1] = data[offset + 3]; data[offset + rowSize] = data[offset + rowSize - 4]; data[offset + rowSize + 1] = data[offset + rowSize - 3]; data[offset + rowSize + 2] = data[offset + rowSize - 2]; data[offset + rowSize + 3] = data[offset + rowSize - 1]; offset -= imgRowSize; } } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); argsArray.splice(iFirstSave, count * 4, [{ width: imgWidth, height: imgHeight, kind: _util.ImageKind.RGBA_32BPP, data: imgData }, map]); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintImageMaskXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`); }, function foundImageMaskGroup(context, i) { var MIN_IMAGES_IN_MASKS_BLOCK = 10; var MAX_IMAGES_IN_MASKS_BLOCK = 100; var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIMXO = curr - 1; var count = Math.floor((i - iFirstSave) / 4); count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); if (count < MIN_IMAGES_IN_MASKS_BLOCK) { return i - (i - iFirstSave) % 4; } var q; var isSameImage = false; var iTransform, transformArgs; var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; const firstTransformArg0 = argsArray[iFirstTransform][0], firstTransformArg1 = argsArray[iFirstTransform][1], firstTransformArg2 = argsArray[iFirstTransform][2], firstTransformArg3 = argsArray[iFirstTransform][3]; if (firstTransformArg1 === firstTransformArg2) { isSameImage = true; iTransform = iFirstTransform + 4; var iPIMXO = iFirstPIMXO + 4; for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { transformArgs = argsArray[iTransform]; if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { if (q < MIN_IMAGES_IN_MASKS_BLOCK) { isSameImage = false; } else { count = q; } break; } } } if (isSameImage) { count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); var positions = new Float32Array(count * 2); iTransform = iFirstTransform; for (q = 0; q < count; q++, iTransform += 4) { transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); } else { count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); var images = []; for (q = 0; q < count; q++) { transformArgs = argsArray[iFirstTransform + (q << 2)]; var maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; images.push({ data: maskParams.data, width: maskParams.width, height: maskParams.height, transform: transformArgs }); } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); argsArray.splice(iFirstSave, count * 4, [images]); } return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { var argsArray = context.argsArray; var iFirstTransform = context.iCurr - 2; return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; }, function iterateImageGroup(context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: if (fnArray[i] !== _util.OPS.transform) { return false; } var iFirstTransform = context.iCurr - 2; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { return false; } return true; case 2: if (fnArray[i] !== _util.OPS.paintImageXObject) { return false; } var iFirstPIXO = context.iCurr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; if (argsArray[i][0] !== firstPIXOArg0) { return false; } return true; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateImageGroup - invalid pos: ${pos}`); }, function (context, i) { var MIN_IMAGES_IN_BLOCK = 3; var MAX_IMAGES_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIXO = curr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); if (count < MIN_IMAGES_IN_BLOCK) { return i - (i - iFirstSave) % 4; } var positions = new Float32Array(count * 2); var iTransform = iFirstTransform; for (var q = 0; q < count; q++, iTransform += 4) { var transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); argsArray.splice(iFirstSave, count * 4, args); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 4; var pos = (i - iFirstSave) % 5; switch (pos) { case 0: return fnArray[i] === _util.OPS.beginText; case 1: return fnArray[i] === _util.OPS.setFont; case 2: return fnArray[i] === _util.OPS.setTextMatrix; case 3: if (fnArray[i] !== _util.OPS.showText) { return false; } var iFirstSetFont = context.iCurr - 3; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var firstSetFontArg1 = argsArray[iFirstSetFont][1]; if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { return false; } return true; case 4: return fnArray[i] === _util.OPS.endText; } throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`); }, function (context, i) { var MIN_CHARS_IN_BLOCK = 3; var MAX_CHARS_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstBeginText = curr - 4; var iFirstSetFont = curr - 3; var iFirstSetTextMatrix = curr - 2; var iFirstShowText = curr - 1; var iFirstEndText = curr; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var firstSetFontArg1 = argsArray[iFirstSetFont][1]; var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); if (count < MIN_CHARS_IN_BLOCK) { return i - (i - iFirstBeginText) % 5; } var iFirst = iFirstBeginText; if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { count++; iFirst -= 5; } var iEndText = iFirst + 4; for (var q = 1; q < count; q++) { fnArray.splice(iEndText, 3); argsArray.splice(iEndText, 3); iEndText += 2; } return iEndText + 1; }); function QueueOptimizer(queue) { this.queue = queue; this.state = null; this.context = { iCurr: 0, fnArray: queue.fnArray, argsArray: queue.argsArray }; this.match = null; this.lastProcessed = 0; } QueueOptimizer.prototype = { _optimize() { const fnArray = this.queue.fnArray; let i = this.lastProcessed, ii = fnArray.length; let state = this.state; let match = this.match; if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { this.lastProcessed = ii; return; } const context = this.context; while (i < ii) { if (match) { const iterate = (0, match.iterateFn)(context, i); if (iterate) { i++; continue; } i = (0, match.processFn)(context, i + 1); ii = fnArray.length; match = null; state = null; if (i >= ii) { break; } } state = (state || InitialState)[fnArray[i]]; if (!state || Array.isArray(state)) { i++; continue; } context.iCurr = i; i++; if (state.checkFn && !(0, state.checkFn)(context)) { state = null; continue; } match = state; state = null; } this.state = state; this.match = match; this.lastProcessed = i; }, push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); this._optimize(); }, flush() { while (this.match) { const length = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, length); this.match = null; this.state = null; this._optimize(); } }, reset() { this.state = null; this.match = null; this.lastProcessed = 0; } }; return QueueOptimizer; }(); var NullOptimizer = function NullOptimizerClosure() { function NullOptimizer(queue) { this.queue = queue; } NullOptimizer.prototype = { push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); }, flush() {}, reset() {} }; return NullOptimizer; }(); var OperatorList = function OperatorListClosure() { var CHUNK_SIZE = 1000; var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; function OperatorList(intent, streamSink) { this._streamSink = streamSink; this.fnArray = []; this.argsArray = []; if (streamSink && intent !== "oplist") { this.optimizer = new QueueOptimizer(this); } else { this.optimizer = new NullOptimizer(this); } this.dependencies = new Set(); this._totalLength = 0; this.weight = 0; this._resolved = streamSink ? null : Promise.resolve(); } OperatorList.prototype = { get length() { return this.argsArray.length; }, get ready() { return this._resolved || this._streamSink.ready; }, get totalLength() { return this._totalLength + this.length; }, addOp(fn, args) { this.optimizer.push(fn, args); this.weight++; if (this._streamSink) { if (this.weight >= CHUNK_SIZE) { this.flush(); } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { this.flush(); } } }, addDependency(dependency) { if (this.dependencies.has(dependency)) { return; } this.dependencies.add(dependency); this.addOp(_util.OPS.dependency, [dependency]); }, addDependencies(dependencies) { for (const dependency of dependencies) { this.addDependency(dependency); } }, addOpList(opList) { if (!(opList instanceof OperatorList)) { (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); return; } for (const dependency of opList.dependencies) { this.dependencies.add(dependency); } for (var i = 0, ii = opList.length; i < ii; i++) { this.addOp(opList.fnArray[i], opList.argsArray[i]); } }, getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length }; }, get _transfers() { const transfers = []; const { fnArray, argsArray, length } = this; for (let i = 0; i < length; i++) { switch (fnArray[i]) { case _util.OPS.paintInlineImageXObject: case _util.OPS.paintInlineImageXObjectGroup: case _util.OPS.paintImageMaskXObject: const arg = argsArray[i][0]; if (!arg.cached) { transfers.push(arg.data.buffer); } break; } } return transfers; }, flush(lastChunk = false) { this.optimizer.flush(); const length = this.length; this._totalLength += length; this._streamSink.enqueue({ fnArray: this.fnArray, argsArray: this.argsArray, lastChunk, length }, 1, this._transfers); this.dependencies.clear(); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset(); } }; return OperatorList; }(); exports.OperatorList = OperatorList; /***/ }), /* 27 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.writeDict = writeDict; exports.incrementalUpdate = incrementalUpdate; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _crypto = __w_pdfjs_require__(22); function writeDict(dict, buffer, transform) { buffer.push("<<"); for (const key of dict.getKeys()) { buffer.push(` /${key} `); writeValue(dict.getRaw(key), buffer, transform); } buffer.push(">>"); } function writeStream(stream, buffer, transform) { writeDict(stream.dict, buffer, transform); buffer.push(" stream\n"); let string = (0, _util.bytesToString)(stream.getBytes()); if (transform !== null) { string = transform.encryptString(string); } buffer.push(string); buffer.push("\nendstream\n"); } function writeArray(array, buffer, transform) { buffer.push("["); let first = true; for (const val of array) { if (!first) { buffer.push(" "); } else { first = false; } writeValue(val, buffer, transform); } buffer.push("]"); } function numberToString(value) { if (Number.isInteger(value)) { return value.toString(); } const roundedValue = Math.round(value * 100); if (roundedValue % 100 === 0) { return (roundedValue / 100).toString(); } if (roundedValue % 10 === 0) { return value.toFixed(1); } return value.toFixed(2); } function writeValue(value, buffer, transform) { if ((0, _primitives.isName)(value)) { buffer.push(`/${value.name}`); } else if ((0, _primitives.isRef)(value)) { buffer.push(`${value.num} ${value.gen} R`); } else if (Array.isArray(value)) { writeArray(value, buffer, transform); } else if (typeof value === "string") { if (transform !== null) { value = transform.encryptString(value); } buffer.push(`(${(0, _util.escapeString)(value)})`); } else if (typeof value === "number") { buffer.push(numberToString(value)); } else if ((0, _primitives.isDict)(value)) { writeDict(value, buffer, transform); } else if ((0, _primitives.isStream)(value)) { writeStream(value, buffer, transform); } } function writeInt(number, size, offset, buffer) { for (let i = size + offset - 1; i > offset - 1; i--) { buffer[i] = number & 0xff; number >>= 8; } return offset + size; } function writeString(string, offset, buffer) { for (let i = 0, len = string.length; i < len; i++) { buffer[offset + i] = string.charCodeAt(i) & 0xff; } } function computeMD5(filesize, xrefInfo) { const time = Math.floor(Date.now() / 1000); const filename = xrefInfo.filename || ""; const md5Buffer = [time.toString(), filename, filesize.toString()]; let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); for (const value of Object.values(xrefInfo.info)) { md5Buffer.push(value); md5BufferLen += value.length; } const array = new Uint8Array(md5BufferLen); let offset = 0; for (const str of md5Buffer) { writeString(str, offset, array); offset += str.length; } return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); } function incrementalUpdate(originalData, xrefInfo, newRefs) { const newXref = new _primitives.Dict(null); const refForXrefTable = xrefInfo.newRef; let buffer, baseOffset; const lastByte = originalData[originalData.length - 1]; if (lastByte === 0x0a || lastByte === 0x0d) { buffer = []; baseOffset = originalData.length; } else { buffer = ["\n"]; baseOffset = originalData.length + 1; } newXref.set("Size", refForXrefTable.num + 1); newXref.set("Prev", xrefInfo.startXRef); newXref.set("Type", _primitives.Name.get("XRef")); if (xrefInfo.rootRef !== null) { newXref.set("Root", xrefInfo.rootRef); } if (xrefInfo.infoRef !== null) { newXref.set("Info", xrefInfo.infoRef); } if (xrefInfo.encrypt !== null) { newXref.set("Encrypt", xrefInfo.encrypt); } newRefs.push({ ref: refForXrefTable, data: "" }); newRefs = newRefs.sort((a, b) => { return a.ref.num - b.ref.num; }); const xrefTableData = [[0, 1, 0xffff]]; const indexes = [0, 1]; let maxOffset = 0; for (const { ref, data } of newRefs) { maxOffset = Math.max(maxOffset, baseOffset); xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); baseOffset += data.length; indexes.push(ref.num); indexes.push(1); buffer.push(data); } newXref.set("Index", indexes); if (xrefInfo.fileIds.length !== 0) { const md5 = computeMD5(baseOffset, xrefInfo); newXref.set("ID", [xrefInfo.fileIds[0], md5]); } const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); const sizes = [1, offsetSize, 2]; const structSize = sizes[0] + sizes[1] + sizes[2]; const tableLength = structSize * xrefTableData.length; newXref.set("W", sizes); newXref.set("Length", tableLength); buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); writeDict(newXref, buffer, null); buffer.push(" stream\n"); const bufferLen = buffer.reduce((a, str) => a + str.length, 0); const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); array.set(originalData); let offset = originalData.length; for (const str of buffer) { writeString(str, offset, array); offset += str.length; } for (const [type, objOffset, gen] of xrefTableData) { offset = writeInt(type, sizes[0], offset, array); offset = writeInt(objOffset, sizes[1], offset, array); offset = writeInt(gen, sizes[2], offset, array); } writeString(footer, offset, array); return array; } /***/ }), /* 28 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PartialEvaluator = void 0; var _util = __w_pdfjs_require__(2); var _cmap = __w_pdfjs_require__(29); var _primitives = __w_pdfjs_require__(5); var _fonts = __w_pdfjs_require__(30); var _encodings = __w_pdfjs_require__(33); var _core_utils = __w_pdfjs_require__(8); var _unicode = __w_pdfjs_require__(36); var _standard_fonts = __w_pdfjs_require__(35); var _pattern = __w_pdfjs_require__(39); var _function = __w_pdfjs_require__(40); var _parser = __w_pdfjs_require__(11); var _image_utils = __w_pdfjs_require__(24); var _bidi = __w_pdfjs_require__(42); var _colorspace = __w_pdfjs_require__(23); var _stream = __w_pdfjs_require__(12); var _glyphlist = __w_pdfjs_require__(34); var _metrics = __w_pdfjs_require__(43); var _murmurhash = __w_pdfjs_require__(44); var _operator_list = __w_pdfjs_require__(26); var _image = __w_pdfjs_require__(45); const DefaultPartialEvaluatorOptions = Object.freeze({ maxImageSize: -1, disableFontFace: false, ignoreErrors: false, isEvalSupported: true, fontExtraProperties: false }); const PatternType = { TILING: 1, SHADING: 2 }; const deferred = Promise.resolve(); function normalizeBlendMode(value, parsingArray = false) { if (Array.isArray(value)) { for (let i = 0, ii = value.length; i < ii; i++) { const maybeBM = normalizeBlendMode(value[i], true); if (maybeBM) { return maybeBM; } } (0, _util.warn)(`Unsupported blend mode Array: ${value}`); return "source-over"; } if (!(0, _primitives.isName)(value)) { if (parsingArray) { return null; } return "source-over"; } switch (value.name) { case "Normal": case "Compatible": return "source-over"; case "Multiply": return "multiply"; case "Screen": return "screen"; case "Overlay": return "overlay"; case "Darken": return "darken"; case "Lighten": return "lighten"; case "ColorDodge": return "color-dodge"; case "ColorBurn": return "color-burn"; case "HardLight": return "hard-light"; case "SoftLight": return "soft-light"; case "Difference": return "difference"; case "Exclusion": return "exclusion"; case "Hue": return "hue"; case "Saturation": return "saturation"; case "Color": return "color"; case "Luminosity": return "luminosity"; } if (parsingArray) { return null; } (0, _util.warn)(`Unsupported blend mode: ${value.name}`); return "source-over"; } class TimeSlotManager { static get TIME_SLOT_DURATION_MS() { return (0, _util.shadow)(this, "TIME_SLOT_DURATION_MS", 20); } static get CHECK_TIME_EVERY() { return (0, _util.shadow)(this, "CHECK_TIME_EVERY", 100); } constructor() { this.reset(); } check() { if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { return false; } this.checked = 0; return this.endTime <= Date.now(); } reset() { this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; this.checked = 0; } } class PartialEvaluator { constructor({ xref, handler, pageIndex, idFactory, fontCache, builtInCMapCache, globalImageCache, options = null }) { this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; this.idFactory = idFactory; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.globalImageCache = globalImageCache; this.options = options || DefaultPartialEvaluatorOptions; this.parsingType3Font = false; this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); } get _pdfFunctionFactory() { const pdfFunctionFactory = new _function.PDFFunctionFactory({ xref: this.xref, isEvalSupported: this.options.isEvalSupported }); return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); } clone(newOptions = DefaultPartialEvaluatorOptions) { var newEvaluator = Object.create(this); newEvaluator.options = newOptions; return newEvaluator; } hasBlendModes(resources) { if (!(resources instanceof _primitives.Dict)) { return false; } const processed = new _primitives.RefSet(); if (resources.objId) { processed.put(resources.objId); } var nodes = [resources], xref = this.xref; while (nodes.length) { var node = nodes.shift(); var graphicStates = node.get("ExtGState"); if (graphicStates instanceof _primitives.Dict) { for (let graphicState of graphicStates.getRawValues()) { if (graphicState instanceof _primitives.Ref) { if (processed.has(graphicState)) { continue; } try { graphicState = xref.fetch(graphicState); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } processed.put(graphicState); (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`); continue; } } if (!(graphicState instanceof _primitives.Dict)) { continue; } if (graphicState.objId) { processed.put(graphicState.objId); } const bm = graphicState.get("BM"); if (bm instanceof _primitives.Name) { if (bm.name !== "Normal") { return true; } continue; } if (bm !== undefined && Array.isArray(bm)) { for (const element of bm) { if (element instanceof _primitives.Name && element.name !== "Normal") { return true; } } } } } var xObjects = node.get("XObject"); if (!(xObjects instanceof _primitives.Dict)) { continue; } for (let xObject of xObjects.getRawValues()) { if (xObject instanceof _primitives.Ref) { if (processed.has(xObject)) { continue; } try { xObject = xref.fetch(xObject); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } processed.put(xObject); (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`); continue; } } if (!(0, _primitives.isStream)(xObject)) { continue; } if (xObject.dict.objId) { processed.put(xObject.dict.objId); } var xResources = xObject.dict.get("Resources"); if (!(xResources instanceof _primitives.Dict)) { continue; } if (xResources.objId && processed.has(xResources.objId)) { continue; } nodes.push(xResources); if (xResources.objId) { processed.put(xResources.objId); } } } return false; } async fetchBuiltInCMap(name) { const cachedData = this.builtInCMapCache.get(name); if (cachedData) { return cachedData; } const readableStream = this.handler.sendWithStream("FetchBuiltInCMap", { name }); const reader = readableStream.getReader(); const data = await new Promise(function (resolve, reject) { function pump() { reader.read().then(function ({ value, done }) { if (done) { return; } resolve(value); pump(); }, reject); } pump(); }); if (data.compressionType !== _util.CMapCompressionType.NONE) { this.builtInCMapCache.set(name, data); } return data; } async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { var dict = xobj.dict; var matrix = dict.getArray("Matrix"); var bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { bbox = _util.Util.normalizeRect(bbox); } else { bbox = null; } let optionalContent = null; if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); } var group = dict.get("Group"); if (group) { var groupOptions = { matrix, bbox, smask, isolated: false, knockout: false }; var groupSubtype = group.get("S"); var colorSpace = null; if ((0, _primitives.isName)(groupSubtype, "Transparency")) { groupOptions.isolated = group.get("I") || false; groupOptions.knockout = group.get("K") || false; if (group.has("CS")) { const cs = group.getRaw("CS"); const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); if (cachedColorSpace) { colorSpace = cachedColorSpace; } else { colorSpace = await this.parseColorSpace({ cs, resources, localColorSpaceCache }); } } } if (smask && smask.backdrop) { colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); } operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); } operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]); return this.getOperatorList({ stream: xobj, task, resources: dict.get("Resources") || resources, operatorList, initialState }).then(function () { operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); if (group) { operatorList.addOp(_util.OPS.endGroup, [groupOptions]); } if (optionalContent) { operatorList.addOp(_util.OPS.endMarkedContent, []); } }); } _sendImgData(objId, imgData, cacheGlobally = false) { const transfers = imgData ? [imgData.data.buffer] : null; if (this.parsingType3Font || cacheGlobally) { return this.handler.send("commonobj", [objId, "Image", imgData], transfers); } return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); } async buildPaintImageXObject({ resources, image, isInline = false, operatorList, cacheKey, localImageCache, localColorSpaceCache }) { var dict = image.dict; const imageRef = dict.objId; var w = dict.get("Width", "W"); var h = dict.get("Height", "H"); if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) { (0, _util.warn)("Image dimensions are missing, or not numbers."); return undefined; } var maxImageSize = this.options.maxImageSize; if (maxImageSize !== -1 && w * h > maxImageSize) { (0, _util.warn)("Image exceeded maximum allowed size and was removed."); return undefined; } var imageMask = dict.get("ImageMask", "IM") || false; var imgData, args; if (imageMask) { var width = dict.get("Width", "W"); var height = dict.get("Height", "H"); var bitStrideLength = width + 7 >> 3; var imgArray = image.getBytes(bitStrideLength * height, true); var decode = dict.getArray("Decode", "D"); imgData = _image.PDFImage.createMask({ imgArray, width, height, imageIsFromDecodeStream: image instanceof _stream.DecodeStream, inverseDecode: !!decode && decode[0] > 0 }); imgData.cached = !!cacheKey; args = [imgData]; operatorList.addOp(_util.OPS.paintImageMaskXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageMaskXObject, args }); } return undefined; } var softMask = dict.get("SMask", "SM") || false; var mask = dict.get("Mask") || false; var SMALL_IMAGE_DIMENSIONS = 200; if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) { const imageObj = new _image.PDFImage({ xref: this.xref, res: resources, image, isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }); imgData = imageObj.createImageData(true); operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); return undefined; } let objId = `img_${this.idFactory.createObjId()}`, cacheGlobally = false; if (this.parsingType3Font) { objId = `${this.idFactory.getDocId()}_type3_${objId}`; } else if (imageRef) { cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); if (cacheGlobally) { objId = `${this.idFactory.getDocId()}_${objId}`; } } operatorList.addDependency(objId); args = [objId, w, h]; _image.PDFImage.buildImage({ xref: this.xref, res: resources, image, isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }).then(imageObj => { imgData = imageObj.createImageData(false); return this._sendImgData(objId, imgData, cacheGlobally); }).catch(reason => { (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`); return this._sendImgData(objId, null, cacheGlobally); }); operatorList.addOp(_util.OPS.paintImageXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageXObject, args }); if (imageRef) { (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); this.globalImageCache.addPageIndex(imageRef, this.pageIndex); if (cacheGlobally) { this.globalImageCache.setData(imageRef, { objId, fn: _util.OPS.paintImageXObject, args }); } } } return undefined; } handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { var smaskContent = smask.get("G"); var smaskOptions = { subtype: smask.get("S").name, backdrop: smask.get("BC") }; var transferObj = smask.get("TR"); if ((0, _function.isPDFFunction)(transferObj)) { const transferFn = this._pdfFunctionFactory.create(transferObj); var transferMap = new Uint8Array(256); var tmp = new Float32Array(1); for (var i = 0; i < 256; i++) { tmp[0] = i / 255; transferFn(tmp, 0, tmp, 0); transferMap[i] = tmp[0] * 255 | 0; } smaskOptions.transferMap = transferMap; } return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); } handleTransferFunction(tr) { let transferArray; if (Array.isArray(tr)) { transferArray = tr; } else if ((0, _function.isPDFFunction)(tr)) { transferArray = [tr]; } else { return null; } const transferMaps = []; let numFns = 0, numEffectfulFns = 0; for (const entry of transferArray) { const transferObj = this.xref.fetchIfRef(entry); numFns++; if ((0, _primitives.isName)(transferObj, "Identity")) { transferMaps.push(null); continue; } else if (!(0, _function.isPDFFunction)(transferObj)) { return null; } const transferFn = this._pdfFunctionFactory.create(transferObj); const transferMap = new Uint8Array(256), tmp = new Float32Array(1); for (let j = 0; j < 256; j++) { tmp[0] = j / 255; transferFn(tmp, 0, tmp, 0); transferMap[j] = tmp[0] * 255 | 0; } transferMaps.push(transferMap); numEffectfulFns++; } if (!(numFns === 1 || numFns === 4)) { return null; } if (numEffectfulFns === 0) { return null; } return transferMaps; } handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) { const tilingOpList = new _operator_list.OperatorList(); const patternResources = _primitives.Dict.merge({ xref: this.xref, dictArray: [patternDict.get("Resources"), resources] }); return this.getOperatorList({ stream: pattern, task, resources: patternResources, operatorList: tilingOpList }).then(function () { return (0, _pattern.getTilingPatternIR)({ fnArray: tilingOpList.fnArray, argsArray: tilingOpList.argsArray }, patternDict, args); }).then(function (tilingPatternIR) { operatorList.addDependencies(tilingOpList.dependencies); operatorList.addOp(fn, tilingPatternIR); }, reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern }); (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`); return; } throw reason; }); } handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) { var fontName, fontSize = 0; if (fontArgs) { fontArgs = fontArgs.slice(); fontName = fontArgs[0].name; fontSize = fontArgs[1]; } return this.loadFont(fontName, fontRef, resources).then(translated => { if (!translated.font.isType3Font) { return translated; } return translated.loadType3Data(this, resources, task).then(function () { operatorList.addDependencies(translated.type3Dependencies); return translated; }).catch(reason => { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3 }); return new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`), dict: translated.font, extraProperties: this.options.fontExtraProperties }); }); }).then(translated => { state.font = translated.font; state.fontSize = fontSize; state.fontName = fontName; translated.send(this.handler); return translated.loadedName; }); } handleText(chars, state) { const font = state.font; const glyphs = font.charsToGlyphs(chars); if (font.data) { const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { PartialEvaluator.buildFontPaths(font, glyphs, this.handler); } } return glyphs; } ensureStateFont(state) { if (state.font) { return; } const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontState }); (0, _util.warn)(`ensureStateFont: "${reason}".`); return; } throw reason; } async setGState({ resources, gState, operatorList, cacheKey, task, stateManager, localGStateCache, localColorSpaceCache }) { const gStateRef = gState.objId; let isSimpleGState = true; var gStateObj = []; var gStateKeys = gState.getKeys(); var promise = Promise.resolve(); for (var i = 0, ii = gStateKeys.length; i < ii; i++) { const key = gStateKeys[i]; const value = gState.get(key); switch (key) { case "Type": break; case "LW": case "LC": case "LJ": case "ML": case "D": case "RI": case "FL": case "CA": case "ca": gStateObj.push([key, value]); break; case "Font": isSimpleGState = false; promise = promise.then(() => { return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { operatorList.addDependency(loadedName); gStateObj.push([key, [loadedName, value[1]]]); }); }); break; case "BM": gStateObj.push([key, normalizeBlendMode(value)]); break; case "SMask": if ((0, _primitives.isName)(value, "None")) { gStateObj.push([key, false]); break; } if ((0, _primitives.isDict)(value)) { isSimpleGState = false; promise = promise.then(() => { return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); }); gStateObj.push([key, true]); } else { (0, _util.warn)("Unsupported SMask type"); } break; case "TR": const transferMaps = this.handleTransferFunction(value); gStateObj.push([key, transferMaps]); break; case "OP": case "op": case "OPM": case "BG": case "BG2": case "UCR": case "UCR2": case "TR2": case "HT": case "SM": case "SA": case "AIS": case "TK": (0, _util.info)("graphic state operator " + key); break; default: (0, _util.info)("Unknown graphic state operator " + key); break; } } return promise.then(function () { if (gStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [gStateObj]); } if (isSimpleGState) { localGStateCache.set(cacheKey, gStateRef, gStateObj); } }); } loadFont(fontName, font, resources) { const errorFont = () => { return Promise.resolve(new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`), dict: font, extraProperties: this.options.fontExtraProperties })); }; var fontRef, xref = this.xref; if (font) { if (!(0, _primitives.isRef)(font)) { throw new _util.FormatError('The "font" object should be a reference.'); } fontRef = font; } else { var fontRes = resources.get("Font"); if (fontRes) { fontRef = fontRes.getRaw(fontName); } } if (!fontRef) { const partialMsg = `Font "${fontName || font && font.toString()}" is not available`; if (!this.options.ignoreErrors && !this.parsingType3Font) { (0, _util.warn)(`${partialMsg}.`); return errorFont(); } this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing }); (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`); fontRef = PartialEvaluator.fallbackFontDict; } if (this.fontCache.has(fontRef)) { return this.fontCache.get(fontRef); } font = xref.fetchIfRef(fontRef); if (!(0, _primitives.isDict)(font)) { return errorFont(); } if (font.translated) { return font.translated; } var fontCapability = (0, _util.createPromiseCapability)(); var preEvaluatedFont = this.preEvaluateFont(font); const { descriptor, hash } = preEvaluatedFont; var fontRefIsRef = (0, _primitives.isRef)(fontRef), fontID; if (fontRefIsRef) { fontID = `f${fontRef.toString()}`; } if (hash && (0, _primitives.isDict)(descriptor)) { if (!descriptor.fontAliases) { descriptor.fontAliases = Object.create(null); } var fontAliases = descriptor.fontAliases; if (fontAliases[hash]) { var aliasFontRef = fontAliases[hash].aliasRef; if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { this.fontCache.putAlias(fontRef, aliasFontRef); return this.fontCache.get(fontRef); } } else { fontAliases[hash] = { fontID: this.idFactory.createFontId() }; } if (fontRefIsRef) { fontAliases[hash].aliasRef = fontRef; } fontID = fontAliases[hash].fontID; } if (fontRefIsRef) { this.fontCache.put(fontRef, fontCapability.promise); } else { if (!fontID) { fontID = this.idFactory.createFontId(); } this.fontCache.put(`id_${fontID}`, fontCapability.promise); } (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.'); font.loadedName = `${this.idFactory.getDocId()}_${fontID}`; font.translated = fontCapability.promise; var translatedPromise; try { translatedPromise = this.translateFont(preEvaluatedFont); } catch (e) { translatedPromise = Promise.reject(e); } translatedPromise.then(translatedFont => { if (translatedFont.fontType !== undefined) { var xrefFontStats = xref.stats.fontTypes; xrefFontStats[translatedFont.fontType] = true; } fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: translatedFont, dict: font, extraProperties: this.options.fontExtraProperties })); }).catch(reason => { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate }); try { var fontFile3 = descriptor && descriptor.get("FontFile3"); var subtype = fontFile3 && fontFile3.get("Subtype"); var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name); var xrefFontStats = xref.stats.fontTypes; xrefFontStats[fontType] = true; } catch (ex) {} fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), dict: font, extraProperties: this.options.fontExtraProperties })); }); return fontCapability.promise; } buildPath(operatorList, fn, args, parsingText = false) { var lastIndex = operatorList.length - 1; if (!args) { args = []; } if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { if (parsingText) { (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`); operatorList.addOp(_util.OPS.save, null); } operatorList.addOp(_util.OPS.constructPath, [[fn], args]); if (parsingText) { operatorList.addOp(_util.OPS.restore, null); } } else { var opArgs = operatorList.argsArray[lastIndex]; opArgs[0].push(fn); Array.prototype.push.apply(opArgs[1], args); } } parseColorSpace({ cs, resources, localColorSpaceCache }) { return _colorspace.ColorSpace.parseAsync({ cs, xref: this.xref, resources, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }).catch(reason => { if (reason instanceof _util.AbortException) { return null; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace }); (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`); return null; } throw reason; }); } async handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache) { var patternName = args[args.length - 1]; var pattern; if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) { var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; var typeNum = dict.get("PatternType"); if (typeNum === PatternType.TILING) { var color = cs.base ? cs.base.getRgb(args, 0) : null; return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task); } else if (typeNum === PatternType.SHADING) { var shading = dict.get("Shading"); var matrix = dict.getArray("Matrix"); pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache); operatorList.addOp(fn, pattern.getIR()); return undefined; } throw new _util.FormatError(`Unknown PatternType: ${typeNum}`); } throw new _util.FormatError(`Unknown PatternName: ${patternName}`); } async parseMarkedContentProps(contentProperties, resources) { let optionalContent; if ((0, _primitives.isName)(contentProperties)) { const properties = resources.get("Properties"); optionalContent = properties.get(contentProperties.name); } else if ((0, _primitives.isDict)(contentProperties)) { optionalContent = contentProperties; } else { throw new _util.FormatError("Optional content properties malformed."); } const optionalContentType = optionalContent.get("Type").name; if (optionalContentType === "OCG") { return { type: optionalContentType, id: optionalContent.objId }; } else if (optionalContentType === "OCMD") { const optionalContentGroups = optionalContent.get("OCGs"); if (Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups)) { const groupIds = []; if (Array.isArray(optionalContentGroups)) { optionalContent.get("OCGs").forEach(ocg => { groupIds.push(ocg.toString()); }); } else { groupIds.push(optionalContentGroups.objId); } let expression = null; if (optionalContent.get("VE")) { expression = true; } return { type: optionalContentType, ids: groupIds, policy: (0, _primitives.isName)(optionalContent.get("P")) ? optionalContent.get("P").name : null, expression }; } else if ((0, _primitives.isRef)(optionalContentGroups)) { return { type: optionalContentType, id: optionalContentGroups.toString() }; } } return null; } getOperatorList({ stream, task, resources, operatorList, initialState = null }) { resources = resources || _primitives.Dict.empty; initialState = initialState || new EvalState(); if (!operatorList) { throw new Error('getOperatorList: missing "operatorList" parameter'); } var self = this; var xref = this.xref; let parsingText = false; const localImageCache = new _image_utils.LocalImageCache(); const localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); const localGStateCache = new _image_utils.LocalGStateCache(); var xobjs = resources.get("XObject") || _primitives.Dict.empty; var patterns = resources.get("Pattern") || _primitives.Dict.empty; var stateManager = new StateManager(initialState); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var timeSlotManager = new TimeSlotManager(); function closePendingRestoreOPS(argument) { for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { operatorList.addOp(_util.OPS.restore, []); } } return new Promise(function promiseBody(resolve, reject) { const next = function (promise) { Promise.all([promise, operatorList.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, i, ii, cs, name; while (!(stop = timeSlotManager.check())) { operation.args = null; if (!preprocessor.read(operation)) { break; } var args = operation.args; var fn = operation.fn; switch (fn | 0) { case _util.OPS.paintXObject: name = args[0].name; if (name) { const localImage = localImageCache.getByName(name); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); args = null; continue; } } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError("XObject must be referred to by name."); } let xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { const localImage = localImageCache.getByRef(xobj); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); resolveXObject(); return; } const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); if (globalImage) { operatorList.addDependency(globalImage.objId); operatorList.addOp(globalImage.fn, globalImage.args); resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } const type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name === "Form") { stateManager.save(); self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { stateManager.restore(); resolveXObject(); }, rejectXObject); return; } else if (type.name === "Image") { self.buildPaintImageXObject({ resources, image: xobj, operatorList, cacheKey: name, localImageCache, localColorSpaceCache }).then(resolveXObject, rejectXObject); return; } else if (type.name === "PS") { (0, _util.info)("Ignored XObject subtype PS"); } else { throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`); } resolveXObject(); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorXObject }); (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`); return; } throw reason; })); return; case _util.OPS.setFont: var fontSize = args[1]; next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) { operatorList.addDependency(loadedName); operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); })); return; case _util.OPS.beginText: parsingText = true; break; case _util.OPS.endText: parsingText = false; break; case _util.OPS.endInlineImage: var cacheKey = args[0].cacheKey; if (cacheKey) { const localImage = localImageCache.getByName(cacheKey); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); args = null; continue; } } next(self.buildPaintImageXObject({ resources, image: args[0], isInline: true, operatorList, cacheKey, localImageCache, localColorSpaceCache })); return; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } args[0] = self.handleText(args[0], stateManager.state); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } var arr = args[0]; var combinedGlyphs = []; var arrLength = arr.length; var state = stateManager.state; for (i = 0; i < arrLength; ++i) { var arrItem = arr[i]; if ((0, _util.isString)(arrItem)) { Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); } else if ((0, _util.isNum)(arrItem)) { combinedGlyphs.push(arrItem); } } args[0] = combinedGlyphs; fn = _util.OPS.showText; break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.setTextRenderingMode: stateManager.state.textRenderingMode = args[0]; break; case _util.OPS.setFillColorSpace: { const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (cachedColorSpace) { stateManager.state.fillColorSpace = cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources, localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.fillColorSpace = colorSpace; } })); return; } case _util.OPS.setStrokeColorSpace: { const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (cachedColorSpace) { stateManager.state.strokeColorSpace = cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources, localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.strokeColorSpace = colorSpace; } })); return; } case _util.OPS.setFillColor: cs = stateManager.state.fillColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColor: cs = stateManager.state.strokeColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillGray: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeGray: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillCMYKColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeCMYKColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillRGBColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setStrokeRGBColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setFillColorN: cs = stateManager.state.fillColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColorN: cs = stateManager.state.strokeColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.shadingFill: var shadingRes = resources.get("Shading"); if (!shadingRes) { throw new _util.FormatError("No shading resource found"); } var shading = shadingRes.get(args[0].name); if (!shading) { throw new _util.FormatError("No shading object found"); } var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self._pdfFunctionFactory, localColorSpaceCache); var patternIR = shadingFill.getIR(); args = [patternIR]; fn = _util.OPS.shadingFill; break; case _util.OPS.setGState: name = args[0].name; if (name) { const localGStateObj = localGStateCache.getByName(name); if (localGStateObj) { if (localGStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [localGStateObj]); } args = null; continue; } } next(new Promise(function (resolveGState, rejectGState) { if (!name) { throw new _util.FormatError("GState must be referred to by name."); } const extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } const gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } self.setGState({ resources, gState, operatorList, cacheKey: name, task, stateManager, localGStateCache, localColorSpaceCache }).then(resolveGState, rejectGState); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorExtGState }); (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`); return; } throw reason; })); return; case _util.OPS.moveTo: case _util.OPS.lineTo: case _util.OPS.curveTo: case _util.OPS.curveTo2: case _util.OPS.curveTo3: case _util.OPS.closePath: case _util.OPS.rectangle: self.buildPath(operatorList, fn, args, parsingText); continue; case _util.OPS.markPoint: case _util.OPS.markPointProps: case _util.OPS.beginCompat: case _util.OPS.endCompat: continue; case _util.OPS.beginMarkedContentProps: if (!(0, _primitives.isName)(args[0])) { (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`); continue; } if (args[0].name === "OC") { next(self.parseMarkedContentProps(args[1], resources).then(data => { operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent }); (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`); return; } throw reason; })); return; } args = [args[0].name]; break; case _util.OPS.beginMarkedContent: case _util.OPS.endMarkedContent: default: if (args !== null) { for (i = 0, ii = args.length; i < ii; i++) { if (args[i] instanceof _primitives.Dict) { break; } } if (i < ii) { (0, _util.warn)("getOperatorList - ignoring operator: " + fn); continue; } } } operatorList.addOp(fn, args); } if (stop) { next(deferred); return; } closePendingRestoreOPS(); resolve(); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`); closePendingRestoreOPS(); return; } throw reason; }); } getTextContent({ stream, task, resources, stateManager = null, normalizeWhitespace = false, combineTextItems = false, sink, seenStyles = Object.create(null) }) { resources = resources || _primitives.Dict.empty; stateManager = stateManager || new StateManager(new TextState()); var WhitespaceRegexp = /\s/g; var textContent = { items: [], styles: Object.create(null) }; var textContentItem = { initialized: false, str: [], width: 0, height: 0, vertical: false, lastAdvanceWidth: 0, lastAdvanceHeight: 0, textAdvanceScale: 0, spaceWidth: 0, fakeSpaceMin: Infinity, fakeMultiSpaceMin: Infinity, fakeMultiSpaceMax: -0, textRunBreakAllowed: false, transform: null, fontName: null }; var SPACE_FACTOR = 0.3; var MULTI_SPACE_FACTOR = 1.5; var MULTI_SPACE_FACTOR_MAX = 4; var self = this; var xref = this.xref; var xobjs = null; const emptyXObjectCache = new _image_utils.LocalImageCache(); const emptyGStateCache = new _image_utils.LocalGStateCache(); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var textState; function ensureTextContentItem() { if (textContentItem.initialized) { return textContentItem; } var font = textState.font; if (!(font.loadedName in seenStyles)) { seenStyles[font.loadedName] = true; textContent.styles[font.loadedName] = { fontFamily: font.fallbackName, ascent: font.ascent, descent: font.descent, vertical: font.vertical }; } textContentItem.fontName = font.loadedName; var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { const glyphHeight = font.bbox[3] - font.bbox[1]; if (glyphHeight > 0) { tsm[3] *= glyphHeight * textState.fontMatrix[3]; } } var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); textContentItem.transform = trm; if (!font.vertical) { textContentItem.width = 0; textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); textContentItem.vertical = false; } else { textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); textContentItem.height = 0; textContentItem.vertical = true; } var a = textState.textLineMatrix[0]; var b = textState.textLineMatrix[1]; var scaleLineX = Math.sqrt(a * a + b * b); a = textState.ctm[0]; b = textState.ctm[1]; var scaleCtmX = Math.sqrt(a * a + b * b); textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; textContentItem.lastAdvanceWidth = 0; textContentItem.lastAdvanceHeight = 0; var spaceWidth = font.spaceWidth / 1000 * textState.fontSize; if (spaceWidth) { textContentItem.spaceWidth = spaceWidth; textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR; textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR; textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX; textContentItem.textRunBreakAllowed = !font.isMonospace; } else { textContentItem.spaceWidth = 0; textContentItem.fakeSpaceMin = Infinity; textContentItem.fakeMultiSpaceMin = Infinity; textContentItem.fakeMultiSpaceMax = 0; textContentItem.textRunBreakAllowed = false; } textContentItem.initialized = true; return textContentItem; } function replaceWhitespace(str) { var i = 0, ii = str.length, code; while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) { i++; } return i < ii ? str.replace(WhitespaceRegexp, " ") : str; } function runBidiTransform(textChunk) { var str = textChunk.str.join(""); var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical); return { str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str, dir: bidiResult.dir, width: textChunk.width, height: textChunk.height, transform: textChunk.transform, fontName: textChunk.fontName }; } function handleSetFont(fontName, fontRef) { return self.loadFont(fontName, fontRef, resources).then(function (translated) { textState.font = translated.font; textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; }); } function buildTextContentItem(chars) { var font = textState.font; var textChunk = ensureTextContentItem(); var width = 0; var height = 0; var glyphs = font.charsToGlyphs(chars); for (var i = 0; i < glyphs.length; i++) { var glyph = glyphs[i]; var glyphWidth = null; if (font.vertical && glyph.vmetric) { glyphWidth = glyph.vmetric[0]; } else { glyphWidth = glyph.width; } var glyphUnicode = glyph.unicode; var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); if (NormalizedUnicodes[glyphUnicode] !== undefined) { glyphUnicode = NormalizedUnicodes[glyphUnicode]; } glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); var charSpacing = textState.charSpacing; if (glyph.isSpace) { var wordSpacing = textState.wordSpacing; charSpacing += wordSpacing; if (wordSpacing > 0) { addFakeSpaces(wordSpacing, textChunk.str); } } var tx = 0; var ty = 0; if (!font.vertical) { var w0 = glyphWidth * textState.fontMatrix[0]; tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale; width += tx; } else { var w1 = glyphWidth * textState.fontMatrix[0]; ty = w1 * textState.fontSize + charSpacing; height += ty; } textState.translateTextMatrix(tx, ty); textChunk.str.push(glyphUnicode); } if (!font.vertical) { textChunk.lastAdvanceWidth = width; textChunk.width += width; } else { textChunk.lastAdvanceHeight = height; textChunk.height += Math.abs(height); } return textChunk; } function addFakeSpaces(width, strBuf) { if (width < textContentItem.fakeSpaceMin) { return; } if (width < textContentItem.fakeMultiSpaceMin) { strBuf.push(" "); return; } var fakeSpaces = Math.round(width / textContentItem.spaceWidth); while (fakeSpaces-- > 0) { strBuf.push(" "); } } function flushTextContentItem() { if (!textContentItem.initialized) { return; } if (!textContentItem.vertical) { textContentItem.width *= textContentItem.textAdvanceScale; } else { textContentItem.height *= textContentItem.textAdvanceScale; } textContent.items.push(runBidiTransform(textContentItem)); textContentItem.initialized = false; textContentItem.str.length = 0; } function enqueueChunk() { const length = textContent.items.length; if (length > 0) { sink.enqueue(textContent, length); textContent.items = []; textContent.styles = Object.create(null); } } var timeSlotManager = new TimeSlotManager(); return new Promise(function promiseBody(resolve, reject) { const next = function (promise) { enqueueChunk(); Promise.all([promise, sink.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, args = []; while (!(stop = timeSlotManager.check())) { args.length = 0; operation.args = args; if (!preprocessor.read(operation)) { break; } textState = stateManager.state; var fn = operation.fn; args = operation.args; var advance, diff; switch (fn | 0) { case _util.OPS.setFont: var fontNameArg = args[0].name, fontSizeArg = args[1]; if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { break; } flushTextContentItem(); textState.fontName = fontNameArg; textState.fontSize = fontSizeArg; next(handleSetFont(fontNameArg, null)); return; case _util.OPS.setTextRise: flushTextContentItem(); textState.textRise = args[0]; break; case _util.OPS.setHScale: flushTextContentItem(); textState.textHScale = args[0] / 100; break; case _util.OPS.setLeading: flushTextContentItem(); textState.leading = args[0]; break; case _util.OPS.moveText: var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0; advance = args[0] - args[1]; if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(args[0], args[1]); textContentItem.width += args[0] - textContentItem.lastAdvanceWidth; textContentItem.height += args[1] - textContentItem.lastAdvanceHeight; diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.setLeadingMoveText: flushTextContentItem(); textState.leading = -args[1]; textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.nextLine: flushTextContentItem(); textState.carriageReturn(); break; case _util.OPS.setTextMatrix: advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]); if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(advance.width, advance.height); textContentItem.width += advance.width - textContentItem.lastAdvanceWidth; textContentItem.height += advance.height - textContentItem.lastAdvanceHeight; diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.setCharSpacing: textState.charSpacing = args[0]; break; case _util.OPS.setWordSpacing: textState.wordSpacing = args[0]; break; case _util.OPS.beginText: flushTextContentItem(); textState.textMatrix = _util.IDENTITY_MATRIX.slice(); textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } var items = args[0]; var offset; for (var j = 0, jj = items.length; j < jj; j++) { if (typeof items[j] === "string") { buildTextContentItem(items[j]); } else if ((0, _util.isNum)(items[j])) { ensureTextContentItem(); advance = items[j] * textState.fontSize / 1000; var breakTextRun = false; if (textState.font.vertical) { offset = advance; textState.translateTextMatrix(0, offset); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.height += offset; } } else { advance = -advance; offset = advance * textState.textHScale; textState.translateTextMatrix(offset, 0); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.width += offset; } } if (breakTextRun) { flushTextContentItem(); } else if (advance > 0) { addFakeSpaces(advance, textContentItem.str); } } } break; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } buildTextContentItem(args[0]); break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } flushTextContentItem(); textState.carriageReturn(); buildTextContentItem(args[0]); break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } flushTextContentItem(); textState.wordSpacing = args[0]; textState.charSpacing = args[1]; textState.carriageReturn(); buildTextContentItem(args[2]); break; case _util.OPS.paintXObject: flushTextContentItem(); if (!xobjs) { xobjs = resources.get("XObject") || _primitives.Dict.empty; } var name = args[0].name; if (name && emptyXObjectCache.getByName(name)) { break; } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError("XObject must be referred to by name."); } let xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { if (emptyXObjectCache.getByRef(xobj)) { resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } const type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name !== "Form") { emptyXObjectCache.set(name, xobj.dict.objId, true); resolveXObject(); return; } const currentState = stateManager.state.clone(); const xObjStateManager = new StateManager(currentState); const matrix = xobj.dict.getArray("Matrix"); if (Array.isArray(matrix) && matrix.length === 6) { xObjStateManager.transform(matrix); } enqueueChunk(); const sinkWrapper = { enqueueInvoked: false, enqueue(chunk, size) { this.enqueueInvoked = true; sink.enqueue(chunk, size); }, get desiredSize() { return sink.desiredSize; }, get ready() { return sink.ready; } }; self.getTextContent({ stream: xobj, task, resources: xobj.dict.get("Resources") || resources, stateManager: xObjStateManager, normalizeWhitespace, combineTextItems, sink: sinkWrapper, seenStyles }).then(function () { if (!sinkWrapper.enqueueInvoked) { emptyXObjectCache.set(name, xobj.dict.objId, true); } resolveXObject(); }, rejectXObject); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`); return; } throw reason; })); return; case _util.OPS.setGState: name = args[0].name; if (name && emptyGStateCache.getByName(name)) { break; } next(new Promise(function (resolveGState, rejectGState) { if (!name) { throw new _util.FormatError("GState must be referred to by name."); } const extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } const gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } const gStateFont = gState.get("Font"); if (!gStateFont) { emptyGStateCache.set(name, gState.objId, true); resolveGState(); return; } flushTextContentItem(); textState.fontName = null; textState.fontSize = gStateFont[1]; handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`); return; } throw reason; })); return; } if (textContent.items.length >= sink.desiredSize) { stop = true; break; } } if (stop) { next(deferred); return; } flushTextContentItem(); enqueueChunk(); resolve(); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`); flushTextContentItem(); enqueueChunk(); return; } throw reason; }); } extractDataStructures(dict, baseDict, properties) { const xref = this.xref; let cidToGidBytes; var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined); if (properties.composite) { var cidSystemInfo = dict.get("CIDSystemInfo"); if ((0, _primitives.isDict)(cidSystemInfo)) { properties.cidSystemInfo = { registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), supplement: cidSystemInfo.get("Supplement") }; } var cidToGidMap = dict.get("CIDToGIDMap"); if ((0, _primitives.isStream)(cidToGidMap)) { cidToGidBytes = cidToGidMap.getBytes(); } } var differences = []; var baseEncodingName = null; var encoding; if (dict.has("Encoding")) { encoding = dict.get("Encoding"); if ((0, _primitives.isDict)(encoding)) { baseEncodingName = encoding.get("BaseEncoding"); baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null; if (encoding.has("Differences")) { var diffEncoding = encoding.get("Differences"); var index = 0; for (var j = 0, jj = diffEncoding.length; j < jj; j++) { var data = xref.fetchIfRef(diffEncoding[j]); if ((0, _util.isNum)(data)) { index = data; } else if ((0, _primitives.isName)(data)) { differences[index++] = data.name; } else { throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`); } } } } else if ((0, _primitives.isName)(encoding)) { baseEncodingName = encoding.name; } else { throw new _util.FormatError("Encoding is not a Name nor a Dict"); } if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { baseEncodingName = null; } } if (baseEncodingName) { properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice(); } else { var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic); var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic); encoding = _encodings.StandardEncoding; if (properties.type === "TrueType" && !isNonsymbolicFont) { encoding = _encodings.WinAnsiEncoding; } if (isSymbolicFont) { encoding = _encodings.MacRomanEncoding; if (!properties.file) { if (/Symbol/i.test(properties.name)) { encoding = _encodings.SymbolSetEncoding; } else if (/Dingbats|Wingdings/i.test(properties.name)) { encoding = _encodings.ZapfDingbatsEncoding; } } } properties.defaultEncoding = encoding; } properties.differences = differences; properties.baseEncodingName = baseEncodingName; properties.hasEncoding = !!baseEncodingName || differences.length > 0; properties.dict = dict; return toUnicodePromise.then(readToUnicode => { properties.toUnicode = readToUnicode; return this.buildToUnicode(properties); }).then(builtToUnicode => { properties.toUnicode = builtToUnicode; if (cidToGidBytes) { properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode); } return properties; }); } _buildSimpleFontToUnicode(properties, forceGlyphs = false) { (0, _util.assert)(!properties.composite, "Must be a simple font."); const toUnicode = []; const encoding = properties.defaultEncoding.slice(); const baseEncodingName = properties.baseEncodingName; const differences = properties.differences; for (const charcode in differences) { const glyphName = differences[charcode]; if (glyphName === ".notdef") { continue; } encoding[charcode] = glyphName; } const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (const charcode in encoding) { let glyphName = encoding[charcode]; if (glyphName === "") { continue; } else if (glyphsUnicodeMap[glyphName] === undefined) { let code = 0; switch (glyphName[0]) { case "G": if (glyphName.length === 3) { code = parseInt(glyphName.substring(1), 16); } break; case "g": if (glyphName.length === 5) { code = parseInt(glyphName.substring(1), 16); } break; case "C": case "c": if (glyphName.length >= 3 && glyphName.length <= 4) { const codeStr = glyphName.substring(1); if (forceGlyphs) { code = parseInt(codeStr, 16); break; } code = +codeStr; if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { return this._buildSimpleFontToUnicode(properties, true); } } break; default: const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { code = unicode; } } if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { if (baseEncodingName && code === +charcode) { const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); if (baseEncoding && (glyphName = baseEncoding[charcode])) { toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); continue; } } toUnicode[charcode] = String.fromCodePoint(code); } continue; } toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); } return new _fonts.ToUnicodeMap(toUnicode); } buildToUnicode(properties) { properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; if (properties.hasIncludedToUnicodeMap) { if (!properties.composite && properties.hasEncoding) { properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties); } return Promise.resolve(properties.toUnicode); } if (!properties.composite) { return Promise.resolve(this._buildSimpleFontToUnicode(properties)); } if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { const registry = properties.cidSystemInfo.registry; const ordering = properties.cidSystemInfo.ordering; const ucs2CMapName = _primitives.Name.get(registry + "-" + ordering + "-UCS2"); return _cmap.CMapFactory.create({ encoding: ucs2CMapName, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (ucs2CMap) { const cMap = properties.cMap; const toUnicode = []; cMap.forEach(function (charcode, cid) { if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } const ucs2 = ucs2CMap.lookup(cid); if (ucs2) { toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); } }); return new _fonts.ToUnicodeMap(toUnicode); }); } return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar)); } readToUnicode(toUnicode) { var cmapObj = toUnicode; if ((0, _primitives.isName)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xffff); } return new _fonts.ToUnicodeMap(cmap.getMap()); }); } else if ((0, _primitives.isStream)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xffff); } var map = new Array(cmap.length); cmap.forEach(function (charCode, token) { var str = []; for (var k = 0; k < token.length; k += 2) { var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); if ((w1 & 0xf800) !== 0xd800) { str.push(w1); continue; } k += 2; var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); } map[charCode] = String.fromCodePoint.apply(String, str); }); return new _fonts.ToUnicodeMap(map); }, reason => { if (reason instanceof _util.AbortException) { return null; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode }); (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`); return null; } throw reason; }); } return Promise.resolve(null); } readCidToGidMap(glyphsData, toUnicode) { var result = []; for (var j = 0, jj = glyphsData.length; j < jj; j++) { var glyphID = glyphsData[j++] << 8 | glyphsData[j]; const code = j >> 1; if (glyphID === 0 && !toUnicode.has(code)) { continue; } result[code] = glyphID; } return result; } extractWidths(dict, descriptor, properties) { var xref = this.xref; var glyphsWidths = []; var defaultWidth = 0; var glyphsVMetrics = []; var defaultVMetrics; var i, ii, j, jj, start, code, widths; if (properties.composite) { defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; widths = dict.get("W"); if (widths) { for (i = 0, ii = widths.length; i < ii; i++) { start = xref.fetchIfRef(widths[i++]); code = xref.fetchIfRef(widths[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsWidths[start++] = xref.fetchIfRef(code[j]); } } else { var width = xref.fetchIfRef(widths[++i]); for (j = start; j <= code; j++) { glyphsWidths[j] = width; } } } } if (properties.vertical) { var vmetrics = dict.getArray("DW2") || [880, -1000]; defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; vmetrics = dict.get("W2"); if (vmetrics) { for (i = 0, ii = vmetrics.length; i < ii; i++) { start = xref.fetchIfRef(vmetrics[i++]); code = xref.fetchIfRef(vmetrics[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; } } else { var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; for (j = start; j <= code; j++) { glyphsVMetrics[j] = vmetric; } } } } } } else { var firstChar = properties.firstChar; widths = dict.get("Widths"); if (widths) { j = firstChar; for (i = 0, ii = widths.length; i < ii; i++) { glyphsWidths[j++] = xref.fetchIfRef(widths[i]); } defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; } else { var baseFontName = dict.get("BaseFont"); if ((0, _primitives.isName)(baseFontName)) { var metrics = this.getBaseFontMetrics(baseFontName.name); glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); defaultWidth = metrics.defaultWidth; } } } var isMonospace = true; var firstWidth = defaultWidth; for (var glyph in glyphsWidths) { var glyphWidth = glyphsWidths[glyph]; if (!glyphWidth) { continue; } if (!firstWidth) { firstWidth = glyphWidth; continue; } if (firstWidth !== glyphWidth) { isMonospace = false; break; } } if (isMonospace) { properties.flags |= _fonts.FontFlags.FixedPitch; } properties.defaultWidth = defaultWidth; properties.widths = glyphsWidths; properties.defaultVMetrics = defaultVMetrics; properties.vmetrics = glyphsVMetrics; } isSerifFont(baseFontName) { var fontNameWoStyle = baseFontName.split("-")[0]; return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; } getBaseFontMetrics(name) { var defaultWidth = 0; var widths = []; var monospace = false; var stdFontMap = (0, _standard_fonts.getStdFontMap)(); var lookupName = stdFontMap[name] || name; var Metrics = (0, _metrics.getMetrics)(); if (!(lookupName in Metrics)) { if (this.isSerifFont(name)) { lookupName = "Times-Roman"; } else { lookupName = "Helvetica"; } } var glyphWidths = Metrics[lookupName]; if ((0, _util.isNum)(glyphWidths)) { defaultWidth = glyphWidths; monospace = true; } else { widths = glyphWidths(); } return { defaultWidth, monospace, widths }; } buildCharCodeToWidth(widthsByGlyphName, properties) { var widths = Object.create(null); var differences = properties.differences; var encoding = properties.defaultEncoding; for (var charCode = 0; charCode < 256; charCode++) { if (charCode in differences && widthsByGlyphName[differences[charCode]]) { widths[charCode] = widthsByGlyphName[differences[charCode]]; continue; } if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { widths[charCode] = widthsByGlyphName[encoding[charCode]]; continue; } } return widths; } preEvaluateFont(dict) { var baseDict = dict; var type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } var composite = false; var uint8array; if (type.name === "Type0") { var df = dict.get("DescendantFonts"); if (!df) { throw new _util.FormatError("Descendant fonts are not specified"); } dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } composite = true; } var descriptor = dict.get("FontDescriptor"); if (descriptor) { var hash = new _murmurhash.MurmurHash3_64(); var encoding = baseDict.getRaw("Encoding"); if ((0, _primitives.isName)(encoding)) { hash.update(encoding.name); } else if ((0, _primitives.isRef)(encoding)) { hash.update(encoding.toString()); } else if ((0, _primitives.isDict)(encoding)) { for (const entry of encoding.getRawValues()) { if ((0, _primitives.isName)(entry)) { hash.update(entry.name); } else if ((0, _primitives.isRef)(entry)) { hash.update(entry.toString()); } else if (Array.isArray(entry)) { var diffLength = entry.length, diffBuf = new Array(diffLength); for (var j = 0; j < diffLength; j++) { var diffEntry = entry[j]; if ((0, _primitives.isName)(diffEntry)) { diffBuf[j] = diffEntry.name; } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) { diffBuf[j] = diffEntry.toString(); } } hash.update(diffBuf.join()); } } } const firstChar = dict.get("FirstChar") || 0; const lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); hash.update(`${firstChar}-${lastChar}`); var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); if ((0, _primitives.isStream)(toUnicode)) { var stream = toUnicode.str || toUnicode; uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); hash.update(uint8array); } else if ((0, _primitives.isName)(toUnicode)) { hash.update(toUnicode.name); } var widths = dict.get("Widths") || baseDict.get("Widths"); if (widths) { uint8array = new Uint8Array(new Uint32Array(widths).buffer); hash.update(uint8array); } } return { descriptor, dict, baseDict, composite, type: type.name, hash: hash ? hash.hexdigest() : "" }; } translateFont(preEvaluatedFont) { var baseDict = preEvaluatedFont.baseDict; var dict = preEvaluatedFont.dict; var composite = preEvaluatedFont.composite; var descriptor = preEvaluatedFont.descriptor; var type = preEvaluatedFont.type; var maxCharIndex = composite ? 0xffff : 0xff; var properties; const firstChar = dict.get("FirstChar") || 0; const lastChar = dict.get("LastChar") || maxCharIndex; if (!descriptor) { if (type === "Type3") { descriptor = new _primitives.Dict(null); descriptor.set("FontName", _primitives.Name.get(type)); descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); } else { var baseFontName = dict.get("BaseFont"); if (!(0, _primitives.isName)(baseFontName)) { throw new _util.FormatError("Base font is not specified"); } baseFontName = baseFontName.name.replace(/[,_]/g, "-"); var metrics = this.getBaseFontMetrics(baseFontName); var fontNameWoStyle = baseFontName.split("-")[0]; var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic); properties = { type, name: baseFontName, widths: metrics.widths, defaultWidth: metrics.defaultWidth, flags, firstChar, lastChar }; const widths = dict.get("Widths"); return this.extractDataStructures(dict, dict, properties).then(newProperties => { if (widths) { const glyphWidths = []; let j = firstChar; for (let i = 0, ii = widths.length; i < ii; i++) { glyphWidths[j++] = this.xref.fetchIfRef(widths[i]); } newProperties.widths = glyphWidths; } else { newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties); } return new _fonts.Font(baseFontName, null, newProperties); }); } } var fontName = descriptor.get("FontName"); var baseFont = dict.get("BaseFont"); if ((0, _util.isString)(fontName)) { fontName = _primitives.Name.get(fontName); } if ((0, _util.isString)(baseFont)) { baseFont = _primitives.Name.get(baseFont); } if (type !== "Type3") { var fontNameStr = fontName && fontName.name; var baseFontStr = baseFont && baseFont.name; if (fontNameStr !== baseFontStr) { (0, _util.info)(`The FontDescriptor\'s FontName is "${fontNameStr}" but ` + `should be the same as the Font\'s BaseFont "${baseFontStr}".`); if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { fontName = baseFont; } } } fontName = fontName || baseFont; if (!(0, _primitives.isName)(fontName)) { throw new _util.FormatError("invalid font name"); } var fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); if (fontFile) { if (fontFile.dict) { var subtype = fontFile.dict.get("Subtype"); if (subtype) { subtype = subtype.name; } var length1 = fontFile.dict.get("Length1"); var length2 = fontFile.dict.get("Length2"); var length3 = fontFile.dict.get("Length3"); } } properties = { type, name: fontName.name, subtype, file: fontFile, length1, length2, length3, loadedName: baseDict.loadedName, composite, fixedPitch: false, fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, firstChar: firstChar || 0, lastChar: lastChar || maxCharIndex, bbox: descriptor.getArray("FontBBox"), ascent: descriptor.get("Ascent"), descent: descriptor.get("Descent"), xHeight: descriptor.get("XHeight"), capHeight: descriptor.get("CapHeight"), flags: descriptor.get("Flags"), italicAngle: descriptor.get("ItalicAngle"), isType3Font: false }; var cMapPromise; if (composite) { var cidEncoding = baseDict.get("Encoding"); if ((0, _primitives.isName)(cidEncoding)) { properties.cidEncoding = cidEncoding.name; } cMapPromise = _cmap.CMapFactory.create({ encoding: cidEncoding, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cMap) { properties.cMap = cMap; properties.vertical = properties.cMap.vertical; }); } else { cMapPromise = Promise.resolve(undefined); } return cMapPromise.then(() => { return this.extractDataStructures(dict, baseDict, properties); }).then(newProperties => { this.extractWidths(dict, descriptor, newProperties); if (type === "Type3") { newProperties.isType3Font = true; } return new _fonts.Font(fontName.name, fontFile, newProperties); }); } static buildFontPaths(font, glyphs, handler) { function buildPath(fontChar) { if (font.renderer.hasBuiltPath(fontChar)) { return; } handler.send("commonobj", [`${font.loadedName}_path_${fontChar}`, "FontPath", font.renderer.getPathJs(fontChar)]); } for (const glyph of glyphs) { buildPath(glyph.fontChar); const accent = glyph.accent; if (accent && accent.fontChar) { buildPath(accent.fontChar); } } } static get fallbackFontDict() { const dict = new _primitives.Dict(); dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont")); dict.set("Type", _primitives.Name.get("FallbackType")); dict.set("Subtype", _primitives.Name.get("FallbackType")); dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); return (0, _util.shadow)(this, "fallbackFontDict", dict); } } exports.PartialEvaluator = PartialEvaluator; class TranslatedFont { constructor({ loadedName, font, dict, extraProperties = false }) { this.loadedName = loadedName; this.font = font; this.dict = dict; this._extraProperties = extraProperties; this.type3Loaded = null; this.type3Dependencies = font.isType3Font ? new Set() : null; this.sent = false; } send(handler) { if (this.sent) { return; } this.sent = true; handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]); } fallback(handler) { if (!this.font.data) { return; } this.font.disableFontFace = true; const glyphs = this.font.glyphCacheValues; PartialEvaluator.buildFontPaths(this.font, glyphs, handler); } loadType3Data(evaluator, resources, task) { if (this.type3Loaded) { return this.type3Loaded; } if (!this.font.isType3Font) { throw new Error("Must be a Type3 font."); } var type3Options = Object.create(evaluator.options); type3Options.ignoreErrors = false; var type3Evaluator = evaluator.clone(type3Options); type3Evaluator.parsingType3Font = true; const translatedFont = this.font, type3Dependencies = this.type3Dependencies; var loadCharProcsPromise = Promise.resolve(); var charProcs = this.dict.get("CharProcs"); var fontResources = this.dict.get("Resources") || resources; var charProcOperatorList = Object.create(null); for (const key of charProcs.getKeys()) { loadCharProcsPromise = loadCharProcsPromise.then(function () { var glyphStream = charProcs.get(key); var operatorList = new _operator_list.OperatorList(); return type3Evaluator.getOperatorList({ stream: glyphStream, task, resources: fontResources, operatorList }).then(function () { charProcOperatorList[key] = operatorList.getIR(); for (const dependency of operatorList.dependencies) { type3Dependencies.add(dependency); } }).catch(function (reason) { (0, _util.warn)(`Type3 font resource "${key}" is not available.`); const dummyOperatorList = new _operator_list.OperatorList(); charProcOperatorList[key] = dummyOperatorList.getIR(); }); }); } this.type3Loaded = loadCharProcsPromise.then(function () { translatedFont.charProcOperatorList = charProcOperatorList; }); return this.type3Loaded; } } class StateManager { constructor(initialState) { this.state = initialState; this.stateStack = []; } save() { var old = this.state; this.stateStack.push(this.state); this.state = old.clone(); } restore() { var prev = this.stateStack.pop(); if (prev) { this.state = prev; } } transform(args) { this.state.ctm = _util.Util.transform(this.state.ctm, args); } } class TextState { constructor() { this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.fontName = null; this.fontSize = 0; this.font = null; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.textMatrix = _util.IDENTITY_MATRIX.slice(); this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); this.charSpacing = 0; this.wordSpacing = 0; this.leading = 0; this.textHScale = 1; this.textRise = 0; } setTextMatrix(a, b, c, d, e, f) { var m = this.textMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } setTextLineMatrix(a, b, c, d, e, f) { var m = this.textLineMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } translateTextMatrix(x, y) { var m = this.textMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } translateTextLineMatrix(x, y) { var m = this.textLineMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } calcTextLineMatrixAdvance(a, b, c, d, e, f) { var font = this.font; if (!font) { return null; } var m = this.textLineMatrix; if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) { return null; } var txDiff = e - m[4], tyDiff = f - m[5]; if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) { return null; } var tx, ty, denominator = a * d - b * c; if (font.vertical) { tx = -tyDiff * c / denominator; ty = tyDiff * a / denominator; } else { tx = txDiff * d / denominator; ty = -txDiff * b / denominator; } return { width: tx, height: ty, value: font.vertical ? ty : tx }; } calcRenderMatrix(ctm) { var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise]; return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm)); } carriageReturn() { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice(); } clone() { var clone = Object.create(this); clone.textMatrix = this.textMatrix.slice(); clone.textLineMatrix = this.textLineMatrix.slice(); clone.fontMatrix = this.fontMatrix.slice(); return clone; } } class EvalState { constructor() { this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.font = null; this.textRenderingMode = _util.TextRenderingMode.FILL; this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; } clone() { return Object.create(this); } } class EvaluatorPreprocessor { static get opMap() { const getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.w = { id: _util.OPS.setLineWidth, numArgs: 1, variableArgs: false }; t.J = { id: _util.OPS.setLineCap, numArgs: 1, variableArgs: false }; t.j = { id: _util.OPS.setLineJoin, numArgs: 1, variableArgs: false }; t.M = { id: _util.OPS.setMiterLimit, numArgs: 1, variableArgs: false }; t.d = { id: _util.OPS.setDash, numArgs: 2, variableArgs: false }; t.ri = { id: _util.OPS.setRenderingIntent, numArgs: 1, variableArgs: false }; t.i = { id: _util.OPS.setFlatness, numArgs: 1, variableArgs: false }; t.gs = { id: _util.OPS.setGState, numArgs: 1, variableArgs: false }; t.q = { id: _util.OPS.save, numArgs: 0, variableArgs: false }; t.Q = { id: _util.OPS.restore, numArgs: 0, variableArgs: false }; t.cm = { id: _util.OPS.transform, numArgs: 6, variableArgs: false }; t.m = { id: _util.OPS.moveTo, numArgs: 2, variableArgs: false }; t.l = { id: _util.OPS.lineTo, numArgs: 2, variableArgs: false }; t.c = { id: _util.OPS.curveTo, numArgs: 6, variableArgs: false }; t.v = { id: _util.OPS.curveTo2, numArgs: 4, variableArgs: false }; t.y = { id: _util.OPS.curveTo3, numArgs: 4, variableArgs: false }; t.h = { id: _util.OPS.closePath, numArgs: 0, variableArgs: false }; t.re = { id: _util.OPS.rectangle, numArgs: 4, variableArgs: false }; t.S = { id: _util.OPS.stroke, numArgs: 0, variableArgs: false }; t.s = { id: _util.OPS.closeStroke, numArgs: 0, variableArgs: false }; t.f = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t.F = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t["f*"] = { id: _util.OPS.eoFill, numArgs: 0, variableArgs: false }; t.B = { id: _util.OPS.fillStroke, numArgs: 0, variableArgs: false }; t["B*"] = { id: _util.OPS.eoFillStroke, numArgs: 0, variableArgs: false }; t.b = { id: _util.OPS.closeFillStroke, numArgs: 0, variableArgs: false }; t["b*"] = { id: _util.OPS.closeEOFillStroke, numArgs: 0, variableArgs: false }; t.n = { id: _util.OPS.endPath, numArgs: 0, variableArgs: false }; t.W = { id: _util.OPS.clip, numArgs: 0, variableArgs: false }; t["W*"] = { id: _util.OPS.eoClip, numArgs: 0, variableArgs: false }; t.BT = { id: _util.OPS.beginText, numArgs: 0, variableArgs: false }; t.ET = { id: _util.OPS.endText, numArgs: 0, variableArgs: false }; t.Tc = { id: _util.OPS.setCharSpacing, numArgs: 1, variableArgs: false }; t.Tw = { id: _util.OPS.setWordSpacing, numArgs: 1, variableArgs: false }; t.Tz = { id: _util.OPS.setHScale, numArgs: 1, variableArgs: false }; t.TL = { id: _util.OPS.setLeading, numArgs: 1, variableArgs: false }; t.Tf = { id: _util.OPS.setFont, numArgs: 2, variableArgs: false }; t.Tr = { id: _util.OPS.setTextRenderingMode, numArgs: 1, variableArgs: false }; t.Ts = { id: _util.OPS.setTextRise, numArgs: 1, variableArgs: false }; t.Td = { id: _util.OPS.moveText, numArgs: 2, variableArgs: false }; t.TD = { id: _util.OPS.setLeadingMoveText, numArgs: 2, variableArgs: false }; t.Tm = { id: _util.OPS.setTextMatrix, numArgs: 6, variableArgs: false }; t["T*"] = { id: _util.OPS.nextLine, numArgs: 0, variableArgs: false }; t.Tj = { id: _util.OPS.showText, numArgs: 1, variableArgs: false }; t.TJ = { id: _util.OPS.showSpacedText, numArgs: 1, variableArgs: false }; t["'"] = { id: _util.OPS.nextLineShowText, numArgs: 1, variableArgs: false }; t['"'] = { id: _util.OPS.nextLineSetSpacingShowText, numArgs: 3, variableArgs: false }; t.d0 = { id: _util.OPS.setCharWidth, numArgs: 2, variableArgs: false }; t.d1 = { id: _util.OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false }; t.CS = { id: _util.OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false }; t.cs = { id: _util.OPS.setFillColorSpace, numArgs: 1, variableArgs: false }; t.SC = { id: _util.OPS.setStrokeColor, numArgs: 4, variableArgs: true }; t.SCN = { id: _util.OPS.setStrokeColorN, numArgs: 33, variableArgs: true }; t.sc = { id: _util.OPS.setFillColor, numArgs: 4, variableArgs: true }; t.scn = { id: _util.OPS.setFillColorN, numArgs: 33, variableArgs: true }; t.G = { id: _util.OPS.setStrokeGray, numArgs: 1, variableArgs: false }; t.g = { id: _util.OPS.setFillGray, numArgs: 1, variableArgs: false }; t.RG = { id: _util.OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false }; t.rg = { id: _util.OPS.setFillRGBColor, numArgs: 3, variableArgs: false }; t.K = { id: _util.OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false }; t.k = { id: _util.OPS.setFillCMYKColor, numArgs: 4, variableArgs: false }; t.sh = { id: _util.OPS.shadingFill, numArgs: 1, variableArgs: false }; t.BI = { id: _util.OPS.beginInlineImage, numArgs: 0, variableArgs: false }; t.ID = { id: _util.OPS.beginImageData, numArgs: 0, variableArgs: false }; t.EI = { id: _util.OPS.endInlineImage, numArgs: 1, variableArgs: false }; t.Do = { id: _util.OPS.paintXObject, numArgs: 1, variableArgs: false }; t.MP = { id: _util.OPS.markPoint, numArgs: 1, variableArgs: false }; t.DP = { id: _util.OPS.markPointProps, numArgs: 2, variableArgs: false }; t.BMC = { id: _util.OPS.beginMarkedContent, numArgs: 1, variableArgs: false }; t.BDC = { id: _util.OPS.beginMarkedContentProps, numArgs: 2, variableArgs: false }; t.EMC = { id: _util.OPS.endMarkedContent, numArgs: 0, variableArgs: false }; t.BX = { id: _util.OPS.beginCompat, numArgs: 0, variableArgs: false }; t.EX = { id: _util.OPS.endCompat, numArgs: 0, variableArgs: false }; t.BM = null; t.BD = null; t.true = null; t.fa = null; t.fal = null; t.fals = null; t.false = null; t.nu = null; t.nul = null; t.null = null; }); return (0, _util.shadow)(this, "opMap", getOPMap()); } static get MAX_INVALID_PATH_OPS() { return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20); } constructor(stream, xref, stateManager) { this.parser = new _parser.Parser({ lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), xref }); this.stateManager = stateManager; this.nonProcessedArgs = []; this._numInvalidPathOPS = 0; } get savedStatesDepth() { return this.stateManager.stateStack.length; } read(operation) { var args = operation.args; while (true) { var obj = this.parser.getObj(); if (obj instanceof _primitives.Cmd) { var cmd = obj.cmd; var opSpec = EvaluatorPreprocessor.opMap[cmd]; if (!opSpec) { (0, _util.warn)(`Unknown command "${cmd}".`); continue; } var fn = opSpec.id; var numArgs = opSpec.numArgs; var argsLength = args !== null ? args.length : 0; if (!opSpec.variableArgs) { if (argsLength !== numArgs) { var nonProcessedArgs = this.nonProcessedArgs; while (argsLength > numArgs) { nonProcessedArgs.push(args.shift()); argsLength--; } while (argsLength < numArgs && nonProcessedArgs.length !== 0) { if (args === null) { args = []; } args.unshift(nonProcessedArgs.pop()); argsLength++; } } if (argsLength < numArgs) { const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`; if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { throw new _util.FormatError(`Invalid ${partialMsg}`); } (0, _util.warn)(`Skipping ${partialMsg}`); if (args !== null) { args.length = 0; } continue; } } else if (argsLength > numArgs) { (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`); } this.preprocessCommand(fn, args); operation.fn = fn; operation.args = args; return true; } if (obj === _primitives.EOF) { return false; } if (obj !== null) { if (args === null) { args = []; } args.push(obj); if (args.length > 33) { throw new _util.FormatError("Too many arguments"); } } } } preprocessCommand(fn, args) { switch (fn | 0) { case _util.OPS.save: this.stateManager.save(); break; case _util.OPS.restore: this.stateManager.restore(); break; case _util.OPS.transform: this.stateManager.transform(args); break; } } } /***/ }), /* 29 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _parser = __w_pdfjs_require__(11); var _core_utils = __w_pdfjs_require__(8); var _stream = __w_pdfjs_require__(12); var BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; const MAX_MAP_RANGE = 2 ** 24 - 1; class CMap { constructor(builtInCMap = false) { this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ""; this.vertical = false; this.useCMap = null; this.builtInCMap = builtInCMap; } addCodespaceRange(n, low, high) { this.codespaceRanges[n - 1].push(low, high); this.numCodespaceRanges++; } mapCidRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); } while (low <= high) { this._map[low++] = dstLow++; } } mapBfRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); } var lastByte = dstLow.length - 1; while (low <= high) { this._map[low++] = dstLow; dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); } } mapBfRangeToArray(low, high, array) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); } const ii = array.length; let i = 0; while (low <= high && i < ii) { this._map[low] = array[i++]; ++low; } } mapOne(src, dst) { this._map[src] = dst; } lookup(code) { return this._map[code]; } contains(code) { return this._map[code] !== undefined; } forEach(callback) { const map = this._map; const length = map.length; if (length <= 0x10000) { for (let i = 0; i < length; i++) { if (map[i] !== undefined) { callback(i, map[i]); } } } else { for (const i in map) { callback(i, map[i]); } } } charCodeOf(value) { const map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (const charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; } getMap() { return this._map; } readCharCode(str, offset, out) { let c = 0; const codespaceRanges = this.codespaceRanges; for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; const codespaceRange = codespaceRanges[n]; for (let k = 0, kk = codespaceRange.length; k < kk;) { const low = codespaceRange[k++]; const high = codespaceRange[k++]; if (c >= low && c <= high) { out.charcode = c; out.length = n + 1; return; } } } out.charcode = 0; out.length = 1; } get length() { return this._map.length; } get isIdentityCMap() { if (!(this.name === "Identity-H" || this.name === "Identity-V")) { return false; } if (this._map.length !== 0x10000) { return false; } for (let i = 0; i < 0x10000; i++) { if (this._map[i] !== i) { return false; } } return true; } } exports.CMap = CMap; class IdentityCMap extends CMap { constructor(vertical, n) { super(); this.vertical = vertical; this.addCodespaceRange(n, 0, 0xffff); } mapCidRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapCidRange"); } mapBfRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapBfRange"); } mapBfRangeToArray(low, high, array) { (0, _util.unreachable)("should not call mapBfRangeToArray"); } mapOne(src, dst) { (0, _util.unreachable)("should not call mapCidOne"); } lookup(code) { return Number.isInteger(code) && code <= 0xffff ? code : undefined; } contains(code) { return Number.isInteger(code) && code <= 0xffff; } forEach(callback) { for (let i = 0; i <= 0xffff; i++) { callback(i, i); } } charCodeOf(value) { return Number.isInteger(value) && value <= 0xffff ? value : -1; } getMap() { const map = new Array(0x10000); for (let i = 0; i <= 0xffff; i++) { map[i] = i; } return map; } get length() { return 0x10000; } get isIdentityCMap() { (0, _util.unreachable)("should not access .isIdentityCMap"); } } exports.IdentityCMap = IdentityCMap; var BinaryCMapReader = function BinaryCMapReaderClosure() { function hexToInt(a, size) { var n = 0; for (var i = 0; i <= size; i++) { n = n << 8 | a[i]; } return n >>> 0; } function hexToStr(a, size) { if (size === 1) { return String.fromCharCode(a[0], a[1]); } if (size === 3) { return String.fromCharCode(a[0], a[1], a[2], a[3]); } return String.fromCharCode.apply(null, a.subarray(0, size + 1)); } function addHex(a, b, size) { var c = 0; for (var i = size; i >= 0; i--) { c += a[i] + b[i]; a[i] = c & 255; c >>= 8; } } function incHex(a, size) { var c = 1; for (var i = size; i >= 0 && c > 0; i--) { c += a[i]; a[i] = c & 255; c >>= 8; } } var MAX_NUM_SIZE = 16; var MAX_ENCODED_NUM_SIZE = 19; function BinaryCMapStream(data) { this.buffer = data; this.pos = 0; this.end = data.length; this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); } BinaryCMapStream.prototype = { readByte() { if (this.pos >= this.end) { return -1; } return this.buffer[this.pos++]; }, readNumber() { var n = 0; var last; do { var b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); n = n << 7 | b & 0x7f; } while (!last); return n; }, readSigned() { var n = this.readNumber(); return n & 1 ? ~(n >>> 1) : n >>> 1; }, readHex(num, size) { num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); this.pos += size + 1; }, readHexNumber(num, size) { var last; var stack = this.tmpBuf, sp = 0; do { var b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); stack[sp++] = b & 0x7f; } while (!last); var i = size, buffer = 0, bufferSize = 0; while (i >= 0) { while (bufferSize < 8 && stack.length > 0) { buffer = stack[--sp] << bufferSize | buffer; bufferSize += 7; } num[i] = buffer & 255; i--; buffer >>= 8; bufferSize -= 8; } }, readHexSigned(num, size) { this.readHexNumber(num, size); var sign = num[size] & 1 ? 255 : 0; var c = 0; for (var i = 0; i <= size; i++) { c = (c & 1) << 8 | num[i]; num[i] = c >> 1 ^ sign; } }, readString() { var len = this.readNumber(); var s = ""; for (var i = 0; i < len; i++) { s += String.fromCharCode(this.readNumber()); } return s; } }; function processBinaryCMap(data, cMap, extend) { return new Promise(function (resolve, reject) { var stream = new BinaryCMapStream(data); var header = stream.readByte(); cMap.vertical = !!(header & 1); var useCMap = null; var start = new Uint8Array(MAX_NUM_SIZE); var end = new Uint8Array(MAX_NUM_SIZE); var char = new Uint8Array(MAX_NUM_SIZE); var charCode = new Uint8Array(MAX_NUM_SIZE); var tmp = new Uint8Array(MAX_NUM_SIZE); var code; var b; while ((b = stream.readByte()) >= 0) { var type = b >> 5; if (type === 7) { switch (b & 0x1f) { case 0: stream.readString(); break; case 1: useCMap = stream.readString(); break; } continue; } var sequence = !!(b & 0x10); var dataSize = b & 15; if (dataSize + 1 > MAX_NUM_SIZE) { throw new Error("processBinaryCMap: Invalid dataSize."); } var ucs2DataSize = 1; var subitemsCount = stream.readNumber(); var i; switch (type) { case 0: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); } break; case 1: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); } break; case 2: stream.readHex(char, dataSize); code = stream.readNumber(); cMap.mapOne(hexToInt(char, dataSize), code); for (i = 1; i < subitemsCount; i++) { incHex(char, dataSize); if (!sequence) { stream.readHexNumber(tmp, dataSize); addHex(char, tmp, dataSize); } code = stream.readSigned() + (code + 1); cMap.mapOne(hexToInt(char, dataSize), code); } break; case 3: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); for (i = 1; i < subitemsCount; i++) { incHex(end, dataSize); if (!sequence) { stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); } else { start.set(end); } stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); } break; case 4: stream.readHex(char, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(char, ucs2DataSize); if (!sequence) { stream.readHexNumber(tmp, ucs2DataSize); addHex(char, tmp, ucs2DataSize); } incHex(charCode, dataSize); stream.readHexSigned(tmp, dataSize); addHex(charCode, tmp, dataSize); cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); } break; case 5: stream.readHex(start, ucs2DataSize); stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); for (i = 1; i < subitemsCount; i++) { incHex(end, ucs2DataSize); if (!sequence) { stream.readHexNumber(start, ucs2DataSize); addHex(start, end, ucs2DataSize); } else { start.set(end); } stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); } break; default: reject(new Error("processBinaryCMap: Unknown type: " + type)); return; } } if (useCMap) { resolve(extend(useCMap)); return; } resolve(cMap); }); } function BinaryCMapReader() {} BinaryCMapReader.prototype = { process: processBinaryCMap }; return BinaryCMapReader; }(); var CMapFactory = function CMapFactoryClosure() { function strToInt(str) { var a = 0; for (var i = 0; i < str.length; i++) { a = a << 8 | str.charCodeAt(i); } return a >>> 0; } function expectString(obj) { if (!(0, _util.isString)(obj)) { throw new _util.FormatError("Malformed CMap: expected string."); } } function expectInt(obj) { if (!Number.isInteger(obj)) { throw new _util.FormatError("Malformed CMap: expected int."); } } function parseBfChar(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endbfchar")) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectString(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseBfRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endbfrange")) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); if (Number.isInteger(obj) || (0, _util.isString)(obj)) { var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; cMap.mapBfRange(low, high, dstLow); } else if ((0, _primitives.isCmd)(obj, "[")) { obj = lexer.getObj(); var array = []; while (!(0, _primitives.isCmd)(obj, "]") && !(0, _primitives.isEOF)(obj)) { array.push(obj); obj = lexer.getObj(); } cMap.mapBfRangeToArray(low, high, array); } else { break; } } throw new _util.FormatError("Invalid bf range."); } function parseCidChar(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcidchar")) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseCidRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcidrange")) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dstLow = obj; cMap.mapCidRange(low, high, dstLow); } } function parseCodespaceRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { return; } if (!(0, _util.isString)(obj)) { break; } var low = strToInt(obj); obj = lexer.getObj(); if (!(0, _util.isString)(obj)) { break; } var high = strToInt(obj); cMap.addCodespaceRange(obj.length, low, high); } throw new _util.FormatError("Invalid codespace range."); } function parseWMode(cMap, lexer) { var obj = lexer.getObj(); if (Number.isInteger(obj)) { cMap.vertical = !!obj; } } function parseCMapName(cMap, lexer) { var obj = lexer.getObj(); if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { cMap.name = obj.name; } } function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { var previous; var embeddedUseCMap; objLoop: while (true) { try { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } else if ((0, _primitives.isName)(obj)) { if (obj.name === "WMode") { parseWMode(cMap, lexer); } else if (obj.name === "CMapName") { parseCMapName(cMap, lexer); } previous = obj; } else if ((0, _primitives.isCmd)(obj)) { switch (obj.cmd) { case "endcmap": break objLoop; case "usecmap": if ((0, _primitives.isName)(previous)) { embeddedUseCMap = previous.name; } break; case "begincodespacerange": parseCodespaceRange(cMap, lexer); break; case "beginbfchar": parseBfChar(cMap, lexer); break; case "begincidchar": parseCidChar(cMap, lexer); break; case "beginbfrange": parseBfRange(cMap, lexer); break; case "begincidrange": parseCidRange(cMap, lexer); break; } } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Invalid cMap data: " + ex); continue; } } if (!useCMap && embeddedUseCMap) { useCMap = embeddedUseCMap; } if (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); } return Promise.resolve(cMap); } function extendCMap(cMap, fetchBuiltInCMap, useCMap) { return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) { cMap.useCMap = newCMap; if (cMap.numCodespaceRanges === 0) { var useCodespaceRanges = cMap.useCMap.codespaceRanges; for (var i = 0; i < useCodespaceRanges.length; i++) { cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); } cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; } cMap.useCMap.forEach(function (key, value) { if (!cMap.contains(key)) { cMap.mapOne(key, cMap.useCMap.lookup(key)); } }); return cMap; }); } function createBuiltInCMap(name, fetchBuiltInCMap) { if (name === "Identity-H") { return Promise.resolve(new IdentityCMap(false, 2)); } else if (name === "Identity-V") { return Promise.resolve(new IdentityCMap(true, 2)); } if (!BUILT_IN_CMAPS.includes(name)) { return Promise.reject(new Error("Unknown CMap name: " + name)); } if (!fetchBuiltInCMap) { return Promise.reject(new Error("Built-in CMap parameters are not provided.")); } return fetchBuiltInCMap(name).then(function (data) { var cMapData = data.cMapData, compressionType = data.compressionType; var cMap = new CMap(true); if (compressionType === _util.CMapCompressionType.BINARY) { return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); }); } if (compressionType === _util.CMapCompressionType.NONE) { var lexer = new _parser.Lexer(new _stream.Stream(cMapData)); return parseCMap(cMap, lexer, fetchBuiltInCMap, null); } return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported.")); }); } return { async create(params) { var encoding = params.encoding; var fetchBuiltInCMap = params.fetchBuiltInCMap; var useCMap = params.useCMap; if ((0, _primitives.isName)(encoding)) { return createBuiltInCMap(encoding.name, fetchBuiltInCMap); } else if ((0, _primitives.isStream)(encoding)) { var cMap = new CMap(); var lexer = new _parser.Lexer(encoding); return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) { if (parsedCMap.isIdentityCMap) { return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); } return parsedCMap; }); } throw new Error("Encoding required."); } }; }(); exports.CMapFactory = CMapFactory; /***/ }), /* 30 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getFontType = getFontType; exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0; var _util = __w_pdfjs_require__(2); var _cff_parser = __w_pdfjs_require__(31); var _glyphlist = __w_pdfjs_require__(34); var _encodings = __w_pdfjs_require__(33); var _standard_fonts = __w_pdfjs_require__(35); var _unicode = __w_pdfjs_require__(36); var _core_utils = __w_pdfjs_require__(8); var _font_renderer = __w_pdfjs_require__(37); var _cmap = __w_pdfjs_require__(29); var _stream = __w_pdfjs_require__(12); var _type1_parser = __w_pdfjs_require__(38); const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; var PDF_GLYPH_SPACE_UNITS = 1000; var SEAC_ANALYSIS_ENABLED = true; exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"]; const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; var FontFlags = { FixedPitch: 1, Serif: 2, Symbolic: 4, Script: 8, Nonsymbolic: 32, Italic: 64, AllCap: 65536, SmallCap: 131072, ForceBold: 262144 }; exports.FontFlags = FontFlags; var MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; function adjustWidths(properties) { if (!properties.fontMatrix) { return; } if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { return; } var scale = 0.001 / properties.fontMatrix[0]; var glyphsWidths = properties.widths; for (var glyph in glyphsWidths) { glyphsWidths[glyph] *= scale; } properties.defaultWidth *= scale; } function adjustToUnicode(properties, builtInEncoding) { if (properties.hasIncludedToUnicodeMap) { return; } if (properties.hasEncoding) { return; } if (builtInEncoding === properties.defaultEncoding) { return; } if (properties.toUnicode instanceof IdentityToUnicodeMap) { return; } var toUnicode = [], glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (var charCode in builtInEncoding) { var glyphName = builtInEncoding[charCode]; var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { toUnicode[charCode] = String.fromCharCode(unicode); } } properties.toUnicode.amend(toUnicode); } function getFontType(type, subtype) { switch (type) { case "Type1": return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1; case "CIDFontType0": return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; case "OpenType": return _util.FontType.OPENTYPE; case "TrueType": return _util.FontType.TRUETYPE; case "CIDFontType2": return _util.FontType.CIDFONTTYPE2; case "MMType1": return _util.FontType.MMTYPE1; case "Type0": return _util.FontType.TYPE0; default: return _util.FontType.UNKNOWN; } } function recoverGlyphName(name, glyphsUnicodeMap) { if (glyphsUnicodeMap[name] !== undefined) { return name; } var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); if (unicode !== -1) { for (var key in glyphsUnicodeMap) { if (glyphsUnicodeMap[key] === unicode) { return key; } } } (0, _util.info)("Unable to recover a standard glyph name for: " + name); return name; } var Glyph = function GlyphClosure() { function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; this.width = width; this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; this.isInFont = isInFont; } Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; }; return Glyph; }(); var ToUnicodeMap = function ToUnicodeMapClosure() { function ToUnicodeMap(cmap = []) { this._map = cmap; } ToUnicodeMap.prototype = { get length() { return this._map.length; }, forEach(callback) { for (var charCode in this._map) { callback(charCode, this._map[charCode].charCodeAt(0)); } }, has(i) { return this._map[i] !== undefined; }, get(i) { return this._map[i]; }, charCodeOf(value) { const map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (const charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; }, amend(map) { for (var charCode in map) { this._map[charCode] = map[charCode]; } } }; return ToUnicodeMap; }(); exports.ToUnicodeMap = ToUnicodeMap; var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() { function IdentityToUnicodeMap(firstChar, lastChar) { this.firstChar = firstChar; this.lastChar = lastChar; } IdentityToUnicodeMap.prototype = { get length() { return this.lastChar + 1 - this.firstChar; }, forEach(callback) { for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { callback(i, i); } }, has(i) { return this.firstChar <= i && i <= this.lastChar; }, get(i) { if (this.firstChar <= i && i <= this.lastChar) { return String.fromCharCode(i); } return undefined; }, charCodeOf(v) { return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; }, amend(map) { (0, _util.unreachable)("Should not call amend()"); } }; return IdentityToUnicodeMap; }(); exports.IdentityToUnicodeMap = IdentityToUnicodeMap; var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() { function writeInt16(dest, offset, num) { dest[offset] = num >> 8 & 0xff; dest[offset + 1] = num & 0xff; } function writeInt32(dest, offset, num) { dest[offset] = num >> 24 & 0xff; dest[offset + 1] = num >> 16 & 0xff; dest[offset + 2] = num >> 8 & 0xff; dest[offset + 3] = num & 0xff; } function writeData(dest, offset, data) { var i, ii; if (data instanceof Uint8Array) { dest.set(data, offset); } else if (typeof data === "string") { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data.charCodeAt(i) & 0xff; } } else { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data[i] & 0xff; } } } function OpenTypeFileBuilder(sfnt) { this.sfnt = sfnt; this.tables = Object.create(null); } OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { var maxPower2 = 1, log2 = 0; while ((maxPower2 ^ entriesCount) > maxPower2) { maxPower2 <<= 1; log2++; } var searchRange = maxPower2 * entrySize; return { range: searchRange, entry: log2, rangeShift: entrySize * entriesCount - searchRange }; }; var OTF_HEADER_SIZE = 12; var OTF_TABLE_ENTRY_SIZE = 16; OpenTypeFileBuilder.prototype = { toArray: function OpenTypeFileBuilder_toArray() { var sfnt = this.sfnt; var tables = this.tables; var tablesNames = Object.keys(tables); tablesNames.sort(); var numTables = tablesNames.length; var i, j, jj, table, tableName; var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; var tableOffsets = [offset]; for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; var paddedLength = (table.length + 3 & ~3) >>> 0; offset += paddedLength; tableOffsets.push(offset); } var file = new Uint8Array(offset); for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; writeData(file, tableOffsets[i], table); } if (sfnt === "true") { sfnt = (0, _util.string32)(0x00010000); } file[0] = sfnt.charCodeAt(0) & 0xff; file[1] = sfnt.charCodeAt(1) & 0xff; file[2] = sfnt.charCodeAt(2) & 0xff; file[3] = sfnt.charCodeAt(3) & 0xff; writeInt16(file, 4, numTables); var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); writeInt16(file, 6, searchParams.range); writeInt16(file, 8, searchParams.entry); writeInt16(file, 10, searchParams.rangeShift); offset = OTF_HEADER_SIZE; for (i = 0; i < numTables; i++) { tableName = tablesNames[i]; file[offset] = tableName.charCodeAt(0) & 0xff; file[offset + 1] = tableName.charCodeAt(1) & 0xff; file[offset + 2] = tableName.charCodeAt(2) & 0xff; file[offset + 3] = tableName.charCodeAt(3) & 0xff; var checksum = 0; for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { var quad = (0, _core_utils.readUint32)(file, j); checksum = checksum + quad >>> 0; } writeInt32(file, offset + 4, checksum); writeInt32(file, offset + 8, tableOffsets[i]); writeInt32(file, offset + 12, tables[tableName].length); offset += OTF_TABLE_ENTRY_SIZE; } return file; }, addTable: function OpenTypeFileBuilder_addTable(tag, data) { if (tag in this.tables) { throw new Error("Table " + tag + " already exists"); } this.tables[tag] = data; } }; return OpenTypeFileBuilder; }(); var Font = function FontClosure() { function Font(name, file, properties) { var charCode; this.name = name; this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.missingFile = false; this.glyphCache = Object.create(null); this.isSerifFont = !!(properties.flags & FontFlags.Serif); this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); var type = properties.type; var subtype = properties.subtype; this.type = type; this.subtype = subtype; let fallbackName = "sans-serif"; if (this.isMonospace) { fallbackName = "monospace"; } else if (this.isSerifFont) { fallbackName = "serif"; } this.fallbackName = fallbackName; this.differences = properties.differences; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.composite = properties.composite; this.cMap = properties.cMap; this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; this.fontMatrix = properties.fontMatrix; this.bbox = properties.bbox; this.defaultEncoding = properties.defaultEncoding; this.toUnicode = properties.toUnicode; this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap(); this.toFontChar = []; if (properties.type === "Type3") { for (charCode = 0; charCode < 256; charCode++) { this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; } this.fontType = _util.FontType.TYPE3; return; } this.cidEncoding = properties.cidEncoding; this.vertical = !!properties.vertical; if (this.vertical) { this.vmetrics = properties.vmetrics; this.defaultVMetrics = properties.defaultVMetrics; } if (!file || file.isEmpty) { if (file) { (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); } this.fallbackToSystemFont(); return; } [type, subtype] = getFontFileType(file, properties); if (type !== this.type || subtype !== this.subtype) { (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`); } try { var data; switch (type) { case "MMType1": (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); case "Type1": case "CIDFontType0": this.mimetype = "font/opentype"; var cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new CFFFont(file, properties) : new Type1Font(name, file, properties); adjustWidths(properties); data = this.convert(name, cff, properties); break; case "OpenType": case "TrueType": case "CIDFontType2": this.mimetype = "font/opentype"; data = this.checkAndRepair(name, file, properties); if (this.isOpenType) { adjustWidths(properties); type = "OpenType"; } break; default: throw new _util.FormatError(`Font ${type} is not supported`); } } catch (e) { (0, _util.warn)(e); this.fallbackToSystemFont(); return; } this.data = data; this.fontType = getFontType(type, subtype); this.fontMatrix = properties.fontMatrix; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.toUnicode = properties.toUnicode; this.seacMap = properties.seacMap; } function int16(b0, b1) { return (b0 << 8) + b1; } function writeSignedInt16(bytes, index, value) { bytes[index + 1] = value; bytes[index] = value >>> 8; } function signedInt16(b0, b1) { var value = (b0 << 8) + b1; return value & 1 << 15 ? value - 0x10000 : value; } function int32(b0, b1, b2, b3) { return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } function string16(value) { return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function safeString16(value) { if (value > 0x7fff) { value = 0x7fff; } else if (value < -0x8000) { value = -0x8000; } return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function isTrueTypeFile(file) { var header = file.peekBytes(4); return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; } function isTrueTypeCollectionFile(file) { const header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "ttcf"; } function isOpenTypeFile(file) { var header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "OTTO"; } function isType1File(file) { var header = file.peekBytes(2); if (header[0] === 0x25 && header[1] === 0x21) { return true; } if (header[0] === 0x80 && header[1] === 0x01) { return true; } return false; } function isCFFFile(file) { const header = file.peekBytes(4); if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { return true; } return false; } function getFontFileType(file, { type, subtype, composite }) { let fileType, fileSubtype; if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "TrueType"; } } else if (isOpenTypeFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "OpenType"; } } else if (isType1File(file)) { if (composite) { fileType = "CIDFontType0"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; } } else if (isCFFFile(file)) { if (composite) { fileType = "CIDFontType0"; fileSubtype = "CIDFontType0C"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; fileSubtype = "Type1C"; } } else { (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); fileType = type; fileSubtype = subtype; } return [fileType, fileSubtype]; } function buildToFontChar(encoding, glyphsUnicodeMap, differences) { var toFontChar = [], unicode; for (var i = 0, ii = encoding.length; i < ii; i++) { unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[i] = unicode; } } for (var charCode in differences) { unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[+charCode] = unicode; } } return toFontChar; } function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { var newMap = Object.create(null); var toFontChar = []; var privateUseAreaIndex = 0; var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; for (var originalCharCode in charCodeToGlyphId) { originalCharCode |= 0; var glyphId = charCodeToGlyphId[originalCharCode]; if (!hasGlyph(glyphId)) { continue; } if (nextAvailableFontCharCode > privateUseOffetEnd) { privateUseAreaIndex++; if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { (0, _util.warn)("Ran out of space in font private use area."); break; } nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; } var fontCharCode = nextAvailableFontCharCode++; if (glyphId === 0) { glyphId = newGlyphZeroId; } newMap[fontCharCode] = glyphId; toFontChar[originalCharCode] = fontCharCode; } return { toFontChar, charCodeToGlyphId: newMap, nextAvailableFontCharCode }; } function getRanges(glyphs, numGlyphs) { var codes = []; for (var charCode in glyphs) { if (glyphs[charCode] >= numGlyphs) { continue; } codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] }); } if (codes.length === 0) { codes.push({ fontCharCode: 0, glyphId: 0 }); } codes.sort(function fontGetRangesSort(a, b) { return a.fontCharCode - b.fontCharCode; }); var ranges = []; var length = codes.length; for (var n = 0; n < length;) { var start = codes[n].fontCharCode; var codeIndices = [codes[n].glyphId]; ++n; var end = start; while (n < length && end + 1 === codes[n].fontCharCode) { codeIndices.push(codes[n].glyphId); ++end; ++n; if (end === 0xffff) { break; } } ranges.push([start, end, codeIndices]); } return ranges; } function createCmapTable(glyphs, numGlyphs) { var ranges = getRanges(glyphs, numGlyphs); var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1; var cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); var i, ii, j, jj; for (i = ranges.length - 1; i >= 0; --i) { if (ranges[i][0] <= 0xffff) { break; } } var bmpLength = i + 1; if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { ranges[i][1] = 0xfffe; } var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; var segCount = bmpLength + trailingRangesCount; var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); var startCount = ""; var endCount = ""; var idDeltas = ""; var idRangeOffsets = ""; var glyphsIds = ""; var bias = 0; var range, start, end, codes; for (i = 0, ii = bmpLength; i < ii; i++) { range = ranges[i]; start = range[0]; end = range[1]; startCount += string16(start); endCount += string16(end); codes = range[2]; var contiguous = true; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { contiguous = false; break; } } if (!contiguous) { var offset = (segCount - i) * 2 + bias * 2; bias += end - start + 1; idDeltas += string16(0); idRangeOffsets += string16(offset); for (j = 0, jj = codes.length; j < jj; ++j) { glyphsIds += string16(codes[j]); } } else { var startCode = codes[0]; idDeltas += string16(startCode - start & 0xffff); idRangeOffsets += string16(0); } } if (trailingRangesCount > 0) { endCount += "\xFF\xFF"; startCount += "\xFF\xFF"; idDeltas += "\x00\x01"; idRangeOffsets += "\x00\x00"; } var format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; var format31012 = ""; var header31012 = ""; if (numTables > 1) { cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); format31012 = ""; for (i = 0, ii = ranges.length; i < ii; i++) { range = ranges[i]; start = range[0]; codes = range[2]; var code = codes[0]; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { end = range[0] + j - 1; format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); start = end + 1; code = codes[j]; } } format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); } header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); } return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; } function validateOS2Table(os2, file) { file.pos = (file.start || 0) + os2.offset; var version = file.getUint16(); file.skip(60); var selection = file.getUint16(); if (version < 4 && selection & 0x0300) { return false; } var firstChar = file.getUint16(); var lastChar = file.getUint16(); if (firstChar > lastChar) { return false; } file.skip(6); var usWinAscent = file.getUint16(); if (usWinAscent === 0) { return false; } os2.data[8] = os2.data[9] = 0; return true; } function createOS2Table(properties, charstrings, override) { override = override || { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; var ulUnicodeRange1 = 0; var ulUnicodeRange2 = 0; var ulUnicodeRange3 = 0; var ulUnicodeRange4 = 0; var firstCharIndex = null; var lastCharIndex = 0; if (charstrings) { for (var code in charstrings) { code |= 0; if (firstCharIndex > code || !firstCharIndex) { firstCharIndex = code; } if (lastCharIndex < code) { lastCharIndex = code; } var position = (0, _unicode.getUnicodeRangeFor)(code); if (position < 32) { ulUnicodeRange1 |= 1 << position; } else if (position < 64) { ulUnicodeRange2 |= 1 << position - 32; } else if (position < 96) { ulUnicodeRange3 |= 1 << position - 64; } else if (position < 123) { ulUnicodeRange4 |= 1 << position - 96; } else { throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); } } if (lastCharIndex > 0xffff) { lastCharIndex = 0xffff; } } else { firstCharIndex = 0; lastCharIndex = 255; } var bbox = properties.bbox || [0, 0, 0, 0]; var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { typoDescent = -typoDescent; } var winAscent = override.yMax || typoAscent; var winDescent = -override.yMin || -typoDescent; return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; } function createPostTable(properties) { var angle = Math.floor(properties.italicAngle * 2 ** 16); return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; } function createNameTable(name, proto) { if (!proto) { proto = [[], []]; } var strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || "", proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; var stringsUnicode = []; var i, ii, j, jj, str; for (i = 0, ii = strings.length; i < ii; i++) { str = proto[1][i] || strings[i]; var strBufUnicode = []; for (j = 0, jj = str.length; j < jj; j++) { strBufUnicode.push(string16(str.charCodeAt(j))); } stringsUnicode.push(strBufUnicode.join("")); } var names = [strings, stringsUnicode]; var platforms = ["\x00\x01", "\x00\x03"]; var encodings = ["\x00\x00", "\x00\x01"]; var languages = ["\x00\x00", "\x04\x09"]; var namesRecordCount = strings.length * platforms.length; var nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); var strOffset = 0; for (i = 0, ii = platforms.length; i < ii; i++) { var strs = names[i]; for (j = 0, jj = strs.length; j < jj; j++) { str = strs[j]; var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); nameTable += nameRecord; strOffset += str.length; } } nameTable += strings.join("") + stringsUnicode.join(""); return nameTable; } Font.prototype = { name: null, font: null, mimetype: null, disableFontFace: false, get renderer() { var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED); return (0, _util.shadow)(this, "renderer", renderer); }, exportData(extraProperties = false) { const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES; const data = Object.create(null); let property, value; for (property of exportDataProperties) { value = this[property]; if (value !== undefined) { data[property] = value; } } return data; }, fallbackToSystemFont: function Font_fallbackToSystemFont() { this.missingFile = true; var name = this.name; var type = this.type; var subtype = this.subtype; let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, ""); var stdFontMap = (0, _standard_fonts.getStdFontMap)(), nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; this.bold = fontName.search(/bold/gi) !== -1; this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; this.black = name.search(/Black/g) !== -1; this.remeasure = Object.keys(this.widths).length > 0; if (isStandardFont && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(); const map = []; for (const charCode in GlyphMapForStandardFonts) { map[+charCode] = GlyphMapForStandardFonts[charCode]; } if (/Arial-?Black/i.test(name)) { var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)(); for (const charCode in SupplementalGlyphMapForArialBlack) { map[+charCode] = SupplementalGlyphMapForArialBlack[charCode]; } } else if (/Calibri/i.test(name)) { const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)(); for (const charCode in SupplementalGlyphMapForCalibri) { map[+charCode] = SupplementalGlyphMapForCalibri[charCode]; } } var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; if (!isIdentityUnicode) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { map[+charCode] = unicodeCharCode; }); } this.toFontChar = map; this.toUnicode = new ToUnicodeMap(map); } else if (/Symbol/i.test(fontName)) { this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else if (/Dingbats/i.test(fontName)) { if (/Wingdings/i.test(name)) { (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); } this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); } else if (isStandardFont) { this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else { const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); const map = []; this.toUnicode.forEach((charCode, unicodeCharCode) => { if (!this.composite) { var glyphName = this.differences[charCode] || this.defaultEncoding[charCode]; const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { unicodeCharCode = unicode; } } map[+charCode] = unicodeCharCode; }); if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) { if (/Verdana/i.test(name)) { const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(); for (const charCode in GlyphMapForStandardFonts) { map[+charCode] = GlyphMapForStandardFonts[charCode]; } } } this.toFontChar = map; } this.loadedName = fontName.split("-")[0]; this.fontType = getFontType(type, subtype); }, checkAndRepair: function Font_checkAndRepair(name, font, properties) { const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; function readTables(file, numTables) { const tables = Object.create(null); tables["OS/2"] = null; tables.cmap = null; tables.head = null; tables.hhea = null; tables.hmtx = null; tables.maxp = null; tables.name = null; tables.post = null; for (let i = 0; i < numTables; i++) { const table = readTableEntry(file); if (!VALID_TABLES.includes(table.tag)) { continue; } if (table.length === 0) { continue; } tables[table.tag] = table; } return tables; } function readTableEntry(file) { var tag = (0, _util.bytesToString)(file.getBytes(4)); var checksum = file.getInt32() >>> 0; var offset = file.getInt32() >>> 0; var length = file.getInt32() >>> 0; var previousPosition = file.pos; file.pos = file.start ? file.start : 0; file.skip(offset); var data = file.getBytes(length); file.pos = previousPosition; if (tag === "head") { data[8] = data[9] = data[10] = data[11] = 0; data[17] |= 0x20; } return { tag, checksum, length, offset, data }; } function readOpenTypeHeader(ttf) { return { version: (0, _util.bytesToString)(ttf.getBytes(4)), numTables: ttf.getUint16(), searchRange: ttf.getUint16(), entrySelector: ttf.getUint16(), rangeShift: ttf.getUint16() }; } function readTrueTypeCollectionHeader(ttc) { const ttcTag = (0, _util.bytesToString)(ttc.getBytes(4)); (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); const majorVersion = ttc.getUint16(); const minorVersion = ttc.getUint16(); const numFonts = ttc.getInt32() >>> 0; const offsetTable = []; for (let i = 0; i < numFonts; i++) { offsetTable.push(ttc.getInt32() >>> 0); } const header = { ttcTag, majorVersion, minorVersion, numFonts, offsetTable }; switch (majorVersion) { case 1: return header; case 2: header.dsigTag = ttc.getInt32() >>> 0; header.dsigLength = ttc.getInt32() >>> 0; header.dsigOffset = ttc.getInt32() >>> 0; return header; } throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`); } function readTrueTypeCollectionData(ttc, fontName) { const { numFonts, offsetTable } = readTrueTypeCollectionHeader(ttc); for (let i = 0; i < numFonts; i++) { ttc.pos = (ttc.start || 0) + offsetTable[i]; const potentialHeader = readOpenTypeHeader(ttc); const potentialTables = readTables(ttc, potentialHeader.numTables); if (!potentialTables.name) { throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); } const nameTable = readNameTable(potentialTables.name); for (let j = 0, jj = nameTable.length; j < jj; j++) { for (let k = 0, kk = nameTable[j].length; k < kk; k++) { const nameEntry = nameTable[j][k]; if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) { return { header: potentialHeader, tables: potentialTables }; } } } } throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`); } function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { if (!cmap) { (0, _util.warn)("No cmap table available."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var segment; var start = (file.start ? file.start : 0) + cmap.offset; file.pos = start; file.skip(2); var numTables = file.getUint16(); var potentialTable; var canBreak = false; for (var i = 0; i < numTables; i++) { var platformId = file.getUint16(); var encodingId = file.getUint16(); var offset = file.getInt32() >>> 0; var useTable = false; if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { continue; } if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { useTable = true; } else if (platformId === 1 && encodingId === 0) { useTable = true; } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { useTable = true; if (!isSymbolicFont) { canBreak = true; } } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { useTable = true; canBreak = true; } if (useTable) { potentialTable = { platformId, encodingId, offset }; } if (canBreak) { break; } } if (potentialTable) { file.pos = start + potentialTable.offset; } if (!potentialTable || file.peekByte() === -1) { (0, _util.warn)("Could not find a preferred cmap table."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var format = file.getUint16(); file.skip(2 + 2); var hasShortCmap = false; var mappings = []; var j, glyphId; if (format === 0) { for (j = 0; j < 256; j++) { var index = file.getByte(); if (!index) { continue; } mappings.push({ charCode: j, glyphId: index }); } hasShortCmap = true; } else if (format === 4) { var segCount = file.getUint16() >> 1; file.skip(6); var segIndex, segments = []; for (segIndex = 0; segIndex < segCount; segIndex++) { segments.push({ end: file.getUint16() }); } file.skip(2); for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].start = file.getUint16(); } for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].delta = file.getUint16(); } var offsetsCount = 0; for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; var rangeOffset = file.getUint16(); if (!rangeOffset) { segment.offsetIndex = -1; continue; } var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); segment.offsetIndex = offsetIndex; offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); } var offsets = []; for (j = 0; j < offsetsCount; j++) { offsets.push(file.getUint16()); } for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; start = segment.start; var end = segment.end; var delta = segment.delta; offsetIndex = segment.offsetIndex; for (j = start; j <= end; j++) { if (j === 0xffff) { continue; } glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; glyphId = glyphId + delta & 0xffff; mappings.push({ charCode: j, glyphId }); } } } else if (format === 6) { var firstCode = file.getUint16(); var entryCount = file.getUint16(); for (j = 0; j < entryCount; j++) { glyphId = file.getUint16(); var charCode = firstCode + j; mappings.push({ charCode, glyphId }); } } else { (0, _util.warn)("cmap table has unsupported format: " + format); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } mappings.sort(function (a, b) { return a.charCode - b.charCode; }); for (i = 1; i < mappings.length; i++) { if (mappings[i - 1].charCode === mappings[i].charCode) { mappings.splice(i, 1); i--; } } return { platformId: potentialTable.platformId, encodingId: potentialTable.encodingId, mappings, hasShortCmap }; } function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) { if (!header) { if (metrics) { metrics.data = null; } return; } file.pos = (file.start ? file.start : 0) + header.offset; file.pos += 4; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 8; file.pos += 2; var numOfMetrics = file.getUint16(); if (numOfMetrics > numGlyphs) { (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")"); numOfMetrics = numGlyphs; header.data[34] = (numOfMetrics & 0xff00) >> 8; header.data[35] = numOfMetrics & 0x00ff; } var numOfSidebearings = numGlyphs - numOfMetrics; var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); if (numMissing > 0) { var entries = new Uint8Array(metrics.length + numMissing * 2); entries.set(metrics.data); if (dupFirstEntry) { entries[metrics.length] = metrics.data[2]; entries[metrics.length + 1] = metrics.data[3]; } metrics.data = entries; } } function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { var glyphProfile = { length: 0, sizeOfInstructions: 0 }; if (sourceEnd - sourceStart <= 12) { return glyphProfile; } var glyf = source.subarray(sourceStart, sourceEnd); var contoursCount = signedInt16(glyf[0], glyf[1]); if (contoursCount < 0) { contoursCount = -1; writeSignedInt16(glyf, 0, contoursCount); dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } var i, j = 10, flagsCount = 0; for (i = 0; i < contoursCount; i++) { var endPoint = glyf[j] << 8 | glyf[j + 1]; flagsCount = endPoint + 1; j += 2; } var instructionsStart = j; var instructionsLength = glyf[j] << 8 | glyf[j + 1]; glyphProfile.sizeOfInstructions = instructionsLength; j += 2 + instructionsLength; var instructionsEnd = j; var coordinatesLength = 0; for (i = 0; i < flagsCount; i++) { var flag = glyf[j++]; if (flag & 0xc0) { glyf[j - 1] = flag & 0x3f; } let xLength = 2; if (flag & 2) { xLength = 1; } else if (flag & 16) { xLength = 0; } let yLength = 2; if (flag & 4) { yLength = 1; } else if (flag & 32) { yLength = 0; } const xyLength = xLength + yLength; coordinatesLength += xyLength; if (flag & 8) { var repeat = glyf[j++]; i += repeat; coordinatesLength += repeat * xyLength; } } if (coordinatesLength === 0) { return glyphProfile; } var glyphDataLength = j + coordinatesLength; if (glyphDataLength > glyf.length) { return glyphProfile; } if (!hintsValid && instructionsLength > 0) { dest.set(glyf.subarray(0, instructionsStart), destStart); dest.set([0, 0], destStart + instructionsStart); dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); glyphDataLength -= instructionsLength; if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; } glyphProfile.length = glyphDataLength; return glyphProfile; } if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; dest.set(glyf.subarray(0, glyphDataLength), destStart); glyphProfile.length = glyphDataLength; return glyphProfile; } dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } function sanitizeHead(head, numGlyphs, locaLength) { var data = head.data; var version = int32(data[0], data[1], data[2], data[3]); if (version >> 16 !== 1) { (0, _util.info)("Attempting to fix invalid version in head table: " + version); data[0] = 0; data[1] = 1; data[2] = 0; data[3] = 0; } var indexToLocFormat = int16(data[50], data[51]); if (indexToLocFormat < 0 || indexToLocFormat > 1) { (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); var numGlyphsPlusOne = numGlyphs + 1; if (locaLength === numGlyphsPlusOne << 1) { data[50] = 0; data[51] = 0; } else if (locaLength === numGlyphsPlusOne << 2) { data[50] = 0; data[51] = 1; } else { throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); } } } function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { var itemSize, itemDecode, itemEncode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; itemEncode = function fontItemEncodeLong(data, offset, value) { data[offset] = value >>> 24 & 0xff; data[offset + 1] = value >> 16 & 0xff; data[offset + 2] = value >> 8 & 0xff; data[offset + 3] = value & 0xff; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; itemEncode = function fontItemEncode(data, offset, value) { data[offset] = value >> 9 & 0xff; data[offset + 1] = value >> 1 & 0xff; }; } var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; var locaDataSize = itemSize * (1 + numGlyphsOut); var locaData = new Uint8Array(locaDataSize); locaData.set(loca.data.subarray(0, locaDataSize)); loca.data = locaData; var oldGlyfData = glyf.data; var oldGlyfDataLength = oldGlyfData.length; var newGlyfData = new Uint8Array(oldGlyfDataLength); var i, j; const locaEntries = []; for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { let offset = itemDecode(locaData, j); if (offset > oldGlyfDataLength) { offset = oldGlyfDataLength; } locaEntries.push({ index: i, offset, endOffset: 0 }); } locaEntries.sort((a, b) => { return a.offset - b.offset; }); for (i = 0; i < numGlyphs; i++) { locaEntries[i].endOffset = locaEntries[i + 1].offset; } locaEntries.sort((a, b) => { return a.index - b.index; }); var missingGlyphs = Object.create(null); var writeOffset = 0; itemEncode(locaData, 0, writeOffset); for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { var glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); var newLength = glyphProfile.length; if (newLength === 0) { missingGlyphs[i] = true; } if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { maxSizeOfInstructions = glyphProfile.sizeOfInstructions; } writeOffset += newLength; itemEncode(locaData, j, writeOffset); } if (writeOffset === 0) { var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { itemEncode(locaData, j, simpleGlyph.length); } glyf.data = simpleGlyph; } else if (dupFirstEntry) { var firstEntryLength = itemDecode(locaData, itemSize); if (newGlyfData.length > firstEntryLength + writeOffset) { glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); } else { glyf.data = new Uint8Array(firstEntryLength + writeOffset); glyf.data.set(newGlyfData.subarray(0, writeOffset)); } glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); } else { glyf.data = newGlyfData.subarray(0, writeOffset); } return { missingGlyphs, maxSizeOfInstructions }; } function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { var start = (font.start ? font.start : 0) + post.offset; font.pos = start; var length = post.length, end = start + length; var version = font.getInt32(); font.skip(28); var glyphNames; var valid = true; var i; switch (version) { case 0x00010000: glyphNames = MacStandardGlyphOrdering; break; case 0x00020000: var numGlyphs = font.getUint16(); if (numGlyphs !== maxpNumGlyphs) { valid = false; break; } var glyphNameIndexes = []; for (i = 0; i < numGlyphs; ++i) { var index = font.getUint16(); if (index >= 32768) { valid = false; break; } glyphNameIndexes.push(index); } if (!valid) { break; } var customNames = []; var strBuf = []; while (font.pos < end) { var stringLength = font.getByte(); strBuf.length = stringLength; for (i = 0; i < stringLength; ++i) { strBuf[i] = String.fromCharCode(font.getByte()); } customNames.push(strBuf.join("")); } glyphNames = []; for (i = 0; i < numGlyphs; ++i) { var j = glyphNameIndexes[i]; if (j < 258) { glyphNames.push(MacStandardGlyphOrdering[j]); continue; } glyphNames.push(customNames[j - 258]); } break; case 0x00030000: break; default: (0, _util.warn)("Unknown/unsupported post table version " + version); valid = false; if (propertiesObj.defaultEncoding) { glyphNames = propertiesObj.defaultEncoding; } break; } propertiesObj.glyphNames = glyphNames; return valid; } function readNameTable(nameTable) { var start = (font.start ? font.start : 0) + nameTable.offset; font.pos = start; var names = [[], []]; var length = nameTable.length, end = start + length; var format = font.getUint16(); var FORMAT_0_HEADER_LENGTH = 6; if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { return names; } var numRecords = font.getUint16(); var stringsStart = font.getUint16(); var records = []; var NAME_RECORD_LENGTH = 12; var i, ii; for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { var r = { platform: font.getUint16(), encoding: font.getUint16(), language: font.getUint16(), name: font.getUint16(), length: font.getUint16(), offset: font.getUint16() }; if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { records.push(r); } } for (i = 0, ii = records.length; i < ii; i++) { var record = records[i]; if (record.length <= 0) { continue; } var pos = start + stringsStart + record.offset; if (pos + record.length > end) { continue; } font.pos = pos; var nameIndex = record.name; if (record.encoding) { var str = ""; for (var j = 0, jj = record.length; j < jj; j += 2) { str += String.fromCharCode(font.getUint16()); } names[1][nameIndex] = str; } else { names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length)); } } return names; } var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; function sanitizeTTProgram(table, ttContext) { var data = table.data; var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; var stack = []; var callstack = []; var functionsCalled = []; var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; var inFDEF = false, ifLevel = 0, inELSE = 0; for (var ii = data.length; i < ii;) { var op = data[i++]; if (op === 0x40) { n = data[i++]; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if (op === 0x41) { n = data[i++]; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if ((op & 0xf8) === 0xb0) { n = op - 0xb0 + 1; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if ((op & 0xf8) === 0xb8) { n = op - 0xb8 + 1; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if (op === 0x2b && !tooComplexToFollowFunctions) { if (!inFDEF && !inELSE) { funcId = stack[stack.length - 1]; if (isNaN(funcId)) { (0, _util.info)("TT: CALL empty stack (or invalid entry)."); } else { ttContext.functionsUsed[funcId] = true; if (funcId in ttContext.functionsStackDeltas) { const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; if (newStackLength < 0) { (0, _util.warn)("TT: CALL invalid functions stack delta."); ttContext.hintsValid = false; return; } stack.length = newStackLength; } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { callstack.push({ data, i, stackTop: stack.length - 1 }); functionsCalled.push(funcId); pc = ttContext.functionsDefined[funcId]; if (!pc) { (0, _util.warn)("TT: CALL non-existent function"); ttContext.hintsValid = false; return; } data = pc.data; i = pc.i; } } } } else if (op === 0x2c && !tooComplexToFollowFunctions) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested FDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; funcId = stack.pop(); ttContext.functionsDefined[funcId] = { data, i }; } else if (op === 0x2d) { if (inFDEF) { inFDEF = false; lastEndf = i; } else { pc = callstack.pop(); if (!pc) { (0, _util.warn)("TT: ENDF bad stack"); ttContext.hintsValid = false; return; } funcId = functionsCalled.pop(); data = pc.data; i = pc.i; ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; } } else if (op === 0x89) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested IDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; } else if (op === 0x58) { ++ifLevel; } else if (op === 0x1b) { inELSE = ifLevel; } else if (op === 0x59) { if (inELSE === ifLevel) { inELSE = 0; } --ifLevel; } else if (op === 0x1c) { if (!inFDEF && !inELSE) { var offset = stack[stack.length - 1]; if (offset > 0) { i += offset - 1; } } } if (!inFDEF && !inELSE) { let stackDelta = 0; if (op <= 0x8e) { stackDelta = TTOpsStackDeltas[op]; } else if (op >= 0xc0 && op <= 0xdf) { stackDelta = -1; } else if (op >= 0xe0) { stackDelta = -2; } if (op >= 0x71 && op <= 0x75) { n = stack.pop(); if (!isNaN(n)) { stackDelta = -n * 2; } } while (stackDelta < 0 && stack.length > 0) { stack.pop(); stackDelta++; } while (stackDelta > 0) { stack.push(NaN); stackDelta--; } } } ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; var content = [data]; if (i > data.length) { content.push(new Uint8Array(i - data.length)); } if (lastDeff > lastEndf) { (0, _util.warn)("TT: complementing a missing function tail"); content.push(new Uint8Array([0x22, 0x2d])); } foldTTTable(table, content); } function checkInvalidFunctions(ttContext, maxFunctionDefs) { if (ttContext.tooComplexToFollowFunctions) { return; } if (ttContext.functionsDefined.length > maxFunctionDefs) { (0, _util.warn)("TT: more functions defined than expected"); ttContext.hintsValid = false; return; } for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { if (j > maxFunctionDefs) { (0, _util.warn)("TT: invalid function id: " + j); ttContext.hintsValid = false; return; } if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { (0, _util.warn)("TT: undefined function: " + j); ttContext.hintsValid = false; return; } } } function foldTTTable(table, content) { if (content.length > 1) { var newLength = 0; var j, jj; for (j = 0, jj = content.length; j < jj; j++) { newLength += content[j].length; } newLength = newLength + 3 & ~3; var result = new Uint8Array(newLength); var pos = 0; for (j = 0, jj = content.length; j < jj; j++) { result.set(content[j], pos); pos += content[j].length; } table.data = result; table.length = newLength; } } function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { var ttContext = { functionsDefined: [], functionsUsed: [], functionsStackDeltas: [], tooComplexToFollowFunctions: false, hintsValid: true }; if (fpgm) { sanitizeTTProgram(fpgm, ttContext); } if (prep) { sanitizeTTProgram(prep, ttContext); } if (fpgm) { checkInvalidFunctions(ttContext, maxFunctionDefs); } if (cvt && cvt.length & 1) { var cvtData = new Uint8Array(cvt.length + 1); cvtData.set(cvt.data); cvt.data = cvtData; } return ttContext.hintsValid; } font = new _stream.Stream(new Uint8Array(font.getBytes())); let header, tables; if (isTrueTypeCollectionFile(font)) { const ttcData = readTrueTypeCollectionData(font, this.name); header = ttcData.header; tables = ttcData.tables; } else { header = readOpenTypeHeader(font); tables = readTables(font, header.numTables); } let cff, cffFile; var isTrueType = !tables["CFF "]; if (!isTrueType) { const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { cffFile = new _stream.Stream(tables["CFF "].data); cff = new CFFFont(cffFile, properties); adjustWidths(properties); return this.convert(name, cff, properties); } delete tables.glyf; delete tables.loca; delete tables.fpgm; delete tables.prep; delete tables["cvt "]; this.isOpenType = true; } else { if (!tables.loca) { throw new _util.FormatError('Required "loca" table is not found'); } if (!tables.glyf) { (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); tables.glyf = { tag: "glyf", data: new Uint8Array(0) }; } this.isOpenType = false; } if (!tables.maxp) { throw new _util.FormatError('Required "maxp" table is not found'); } font.pos = (font.start || 0) + tables.maxp.offset; var version = font.getInt32(); const numGlyphs = font.getUint16(); let numGlyphsOut = numGlyphs + 1; let dupFirstEntry = true; if (numGlyphsOut > 0xffff) { dupFirstEntry = false; numGlyphsOut = numGlyphs; (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); } var maxFunctionDefs = 0; var maxSizeOfInstructions = 0; if (version >= 0x00010000 && tables.maxp.length >= 22) { font.pos += 8; var maxZones = font.getUint16(); if (maxZones > 2) { tables.maxp.data[14] = 0; tables.maxp.data[15] = 2; } font.pos += 4; maxFunctionDefs = font.getUint16(); font.pos += 4; maxSizeOfInstructions = font.getUint16(); } tables.maxp.data[4] = numGlyphsOut >> 8; tables.maxp.data[5] = numGlyphsOut & 255; var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); if (!hintsValid) { delete tables.fpgm; delete tables.prep; delete tables["cvt "]; } sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry); if (!tables.head) { throw new _util.FormatError('Required "head" table is not found'); } sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); var missingGlyphs = Object.create(null); if (isTrueType) { var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); missingGlyphs = glyphsInfo.missingGlyphs; if (version >= 0x00010000 && tables.maxp.length >= 22) { tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; } } if (!tables.hhea) { throw new _util.FormatError('Required "hhea" table is not found'); } if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { tables.hhea.data[10] = 0xff; tables.hhea.data[11] = 0xff; } var metricsOverride = { unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), yMax: int16(tables.head.data[42], tables.head.data[43]), yMin: signedInt16(tables.head.data[38], tables.head.data[39]), ascent: int16(tables.hhea.data[4], tables.hhea.data[5]), descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]) }; this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; if (tables.post) { readPostScriptTable(tables.post, properties, numGlyphs); } tables.post = { tag: "post", data: createPostTable(properties) }; const charCodeToGlyphId = []; function hasGlyph(glyphId) { return !missingGlyphs[glyphId]; } if (properties.composite) { var cidToGidMap = properties.cidToGidMap || []; var isCidToGidMapEmpty = cidToGidMap.length === 0; properties.cMap.forEach(function (charCode, cid) { if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } var glyphId = -1; if (isCidToGidMapEmpty) { glyphId = cid; } else if (cidToGidMap[cid] !== undefined) { glyphId = cidToGidMap[cid]; } if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { charCodeToGlyphId[charCode] = glyphId; } }); } else { var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); var cmapPlatformId = cmapTable.platformId; var cmapEncodingId = cmapTable.encodingId; var cmapMappings = cmapTable.mappings; var cmapMappingsLength = cmapMappings.length; let baseEncoding = []; if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); } if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (let charCode = 0; charCode < 256; charCode++) { var glyphName, standardGlyphName; if (this.differences && charCode in this.differences) { glyphName = this.differences[charCode]; } else if (charCode in baseEncoding && baseEncoding[charCode] !== "") { glyphName = baseEncoding[charCode]; } else { glyphName = _encodings.StandardEncoding[charCode]; } if (!glyphName) { continue; } standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); var unicodeOrCharCode; if (cmapPlatformId === 3 && cmapEncodingId === 1) { unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); } for (let i = 0; i < cmapMappingsLength; ++i) { if (cmapMappings[i].charCode !== unicodeOrCharCode) { continue; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; break; } } } else if (cmapPlatformId === 0) { for (let i = 0; i < cmapMappingsLength; ++i) { charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId; } } else { for (let i = 0; i < cmapMappingsLength; ++i) { let charCode = cmapMappings[i].charCode; if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) { charCode &= 0xff; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; } } if (properties.glyphNames && baseEncoding.length) { for (let i = 0; i < 256; ++i) { if (charCodeToGlyphId[i] === undefined && baseEncoding[i]) { glyphName = baseEncoding[i]; const glyphId = properties.glyphNames.indexOf(glyphName); if (glyphId > 0 && hasGlyph(glyphId)) { charCodeToGlyphId[i] = glyphId; } } } } } if (charCodeToGlyphId.length === 0) { charCodeToGlyphId[0] = 0; } let glyphZeroId = numGlyphsOut - 1; if (!dupFirstEntry) { glyphZeroId = 0; } var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); this.toFontChar = newMapping.toFontChar; tables.cmap = { tag: "cmap", data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) }; if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { tables["OS/2"] = { tag: "OS/2", data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) }; } if (!isTrueType) { try { cffFile = new _stream.Stream(tables["CFF "].data); var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED); cff = parser.parse(); cff.duplicateFirstGlyph(); var compiler = new _cff_parser.CFFCompiler(cff); tables["CFF "].data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); } } if (!tables.name) { tables.name = { tag: "name", data: createNameTable(this.name) }; } else { var namePrototype = readNameTable(tables.name); tables.name.data = createNameTable(name, namePrototype); } var builder = new OpenTypeFileBuilder(header.version); for (var tableTag in tables) { builder.addTable(tableTag, tables[tableTag].data); } return builder.toArray(); }, convert: function Font_convert(fontName, font, properties) { properties.fixedPitch = false; if (properties.builtInEncoding) { adjustToUnicode(properties, properties.builtInEncoding); } let glyphZeroId = 1; if (font instanceof CFFFont) { glyphZeroId = font.numGlyphs - 1; } var mapping = font.getGlyphMapping(properties); var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); this.toFontChar = newMapping.toFontChar; var numGlyphs = font.numGlyphs; function getCharCodes(charCodeToGlyphId, glyphId) { var charCodes = null; for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { if (!charCodes) { charCodes = []; } charCodes.push(charCode | 0); } } return charCodes; } function createCharCode(charCodeToGlyphId, glyphId) { for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { return charCode | 0; } } newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; return newMapping.nextAvailableFontCharCode++; } var seacs = font.seacs; if (seacs && seacs.length) { var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; var charset = font.getCharset(); var seacMap = Object.create(null); for (var glyphId in seacs) { glyphId |= 0; var seac = seacs[glyphId]; var baseGlyphName = _encodings.StandardEncoding[seac[2]]; var accentGlyphName = _encodings.StandardEncoding[seac[3]]; var baseGlyphId = charset.indexOf(baseGlyphName); var accentGlyphId = charset.indexOf(accentGlyphName); if (baseGlyphId < 0 || accentGlyphId < 0) { continue; } var accentOffset = { x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] }; var charCodes = getCharCodes(mapping, glyphId); if (!charCodes) { continue; } for (let i = 0, ii = charCodes.length; i < ii; i++) { var charCode = charCodes[i]; var charCodeToGlyphId = newMapping.charCodeToGlyphId; var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); seacMap[charCode] = { baseFontCharCode, accentFontCharCode, accentOffset }; } } properties.seacMap = seacMap; } var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F"); builder.addTable("CFF ", font.data); builder.addTable("OS/2", createOS2Table(properties, newMapping.charCodeToGlyphId)); builder.addTable("cmap", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)); builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); builder.addTable("hmtx", function fontFieldsHmtx() { var charstrings = font.charstrings; var cffWidths = font.cff ? font.cff.widths : null; var hmtx = "\x00\x00\x00\x00"; for (let i = 1, ii = numGlyphs; i < ii; i++) { var width = 0; if (charstrings) { var charstring = charstrings[i - 1]; width = "width" in charstring ? charstring.width : 0; } else if (cffWidths) { width = Math.ceil(cffWidths[i] || 0); } hmtx += string16(width) + string16(0); } return hmtx; }()); builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); builder.addTable("name", createNameTable(fontName)); builder.addTable("post", createPostTable(properties)); return builder.toArray(); }, get spaceWidth() { var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; var width; for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { var glyphName = possibleSpaceReplacements[i]; if (glyphName in this.widths) { width = this.widths[glyphName]; break; } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); var glyphUnicode = glyphsUnicodeMap[glyphName]; var charcode = 0; if (this.composite && this.cMap.contains(glyphUnicode)) { charcode = this.cMap.lookup(glyphUnicode); } if (!charcode && this.toUnicode) { charcode = this.toUnicode.charCodeOf(glyphUnicode); } if (charcode <= 0) { charcode = glyphUnicode; } width = this.widths[charcode]; if (width) { break; } } width = width || this.defaultWidth; return (0, _util.shadow)(this, "spaceWidth", width); }, charToGlyph: function Font_charToGlyph(charcode, isSpace) { var fontCharCode, width, operatorListId; var widthCode = charcode; if (this.cMap && this.cMap.contains(charcode)) { widthCode = this.cMap.lookup(charcode); } width = this.widths[widthCode]; width = (0, _util.isNum)(width) ? width : this.defaultWidth; var vmetric = this.vmetrics && this.vmetrics[widthCode]; let unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode; if (typeof unicode === "number") { unicode = String.fromCharCode(unicode); } var isInFont = (charcode in this.toFontChar); fontCharCode = this.toFontChar[charcode] || charcode; if (this.missingFile) { const glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { fontCharCode = 0x20; } fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); } if (this.isType3Font) { operatorListId = fontCharCode; } var accent = null; if (this.seacMap && this.seacMap[charcode]) { isInFont = true; var seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { fontChar: String.fromCodePoint(seac.accentFontCharCode), offset: seac.accentOffset }; } let fontChar = ""; if (typeof fontCharCode === "number") { if (fontCharCode <= 0x10ffff) { fontChar = String.fromCodePoint(fontCharCode); } else { (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`); } } var glyph = this.glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); this.glyphCache[charcode] = glyph; } return glyph; }, charsToGlyphs: function Font_charsToGlyphs(chars) { var charsCache = this.charsCache; var glyphs, glyph, charcode; if (charsCache) { glyphs = charsCache[chars]; if (glyphs) { return glyphs; } } if (!charsCache) { charsCache = this.charsCache = Object.create(null); } glyphs = []; var charsCacheKey = chars; var i = 0, ii; if (this.cMap) { var c = Object.create(null); while (i < chars.length) { this.cMap.readCharCode(chars, i, c); charcode = c.charcode; var length = c.length; i += length; var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20; glyph = this.charToGlyph(charcode, isSpace); glyphs.push(glyph); } } else { for (i = 0, ii = chars.length; i < ii; ++i) { charcode = chars.charCodeAt(i); glyph = this.charToGlyph(charcode, charcode === 0x20); glyphs.push(glyph); } } return charsCache[charsCacheKey] = glyphs; }, get glyphCacheValues() { return Object.values(this.glyphCache); } }; return Font; }(); exports.Font = Font; var ErrorFont = function ErrorFontClosure() { function ErrorFont(error) { this.error = error; this.loadedName = "g_font_error"; this.missingFile = true; } ErrorFont.prototype = { charsToGlyphs: function ErrorFont_charsToGlyphs() { return []; }, exportData(extraProperties = false) { return { error: this.error }; } }; return ErrorFont; }(); exports.ErrorFont = ErrorFont; function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { var charCodeToGlyphId = Object.create(null); var glyphId, charCode, baseEncoding; var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); if (properties.baseEncodingName) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } else if (isSymbolicFont) { for (charCode in builtInEncoding) { charCodeToGlyphId[charCode] = builtInEncoding[charCode]; } } else { baseEncoding = _encodings.StandardEncoding; for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } var differences = properties.differences, glyphsUnicodeMap; if (differences) { for (charCode in differences) { var glyphName = differences[charCode]; glyphId = glyphNames.indexOf(glyphName); if (glyphId === -1) { if (!glyphsUnicodeMap) { glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); } var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); if (standardGlyphName !== glyphName) { glyphId = glyphNames.indexOf(standardGlyphName); } } if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } return charCodeToGlyphId; } var Type1Font = function Type1FontClosure() { function findBlock(streamBytes, signature, startIndex) { var streamBytesLength = streamBytes.length; var signatureLength = signature.length; var scanLength = streamBytesLength - signatureLength; var i = startIndex, j, found = false; while (i < scanLength) { j = 0; while (j < signatureLength && streamBytes[i + j] === signature[j]) { j++; } if (j >= signatureLength) { i += j; while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { i++; } found = true; break; } i++; } return { found, length: i }; } function getHeaderBlock(stream, suggestedLength) { var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; var streamStartPos = stream.pos; var headerBytes, headerBytesLength, block; try { headerBytes = stream.getBytes(suggestedLength); headerBytesLength = headerBytes.length; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } if (headerBytesLength === suggestedLength) { block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); if (block.found && block.length === suggestedLength) { return { stream: new _stream.Stream(headerBytes), length: suggestedLength }; } } (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); stream.pos = streamStartPos; var SCAN_BLOCK_LENGTH = 2048; var actualLength; while (true) { var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); if (block.length === 0) { break; } stream.pos += block.length; if (block.found) { actualLength = stream.pos - streamStartPos; break; } } stream.pos = streamStartPos; if (actualLength) { return { stream: new _stream.Stream(stream.getBytes(actualLength)), length: actualLength }; } (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); return { stream: new _stream.Stream(stream.getBytes(suggestedLength)), length: suggestedLength }; } function getEexecBlock(stream, suggestedLength) { var eexecBytes = stream.getBytes(); return { stream: new _stream.Stream(eexecBytes), length: eexecBytes.length }; } function Type1Font(name, file, properties) { var PFB_HEADER_SIZE = 6; var headerBlockLength = properties.length1; properties.length2; var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; if (pfbHeaderPresent) { file.skip(PFB_HEADER_SIZE); headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } var headerBlock = getHeaderBlock(file, headerBlockLength); var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED); headerBlockParser.extractFontHeader(properties); if (pfbHeaderPresent) { pfbHeader = file.getBytes(PFB_HEADER_SIZE); pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } var eexecBlock = getEexecBlock(file); var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); var data = eexecBlockParser.extractFontProgram(properties); for (const key in data.properties) { properties[key] = data.properties[key]; } var charstrings = data.charstrings; var type2Charstrings = this.getType2Charstrings(charstrings); var subrs = this.getType2Subrs(data.subrs); this.charstrings = charstrings; this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); this.seacs = this.getSeacs(data.charstrings); } Type1Font.prototype = { get numGlyphs() { return this.charstrings.length + 1; }, getCharset: function Type1Font_getCharset() { var charset = [".notdef"]; var charstrings = this.charstrings; for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { charset.push(charstrings[glyphId].glyphName); } return charset; }, getGlyphMapping: function Type1Font_getGlyphMapping(properties) { var charstrings = this.charstrings; if (properties.composite) { const charCodeToGlyphId = Object.create(null); for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) { const charCode = properties.cMap.charCodeOf(glyphId); charCodeToGlyphId[charCode] = glyphId + 1; } return charCodeToGlyphId; } var glyphNames = [".notdef"], glyphId; for (glyphId = 0; glyphId < charstrings.length; glyphId++) { glyphNames.push(charstrings[glyphId].glyphName); } var encoding = properties.builtInEncoding; if (encoding) { var builtInEncoding = Object.create(null); for (var charCode in encoding) { glyphId = glyphNames.indexOf(encoding[charCode]); if (glyphId >= 0) { builtInEncoding[charCode] = glyphId; } } } return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); }, hasGlyphId: function Type1Font_hasGlyphID(id) { if (id < 0 || id >= this.numGlyphs) { return false; } if (id === 0) { return true; } var glyph = this.charstrings[id - 1]; return glyph.charstring.length > 0; }, getSeacs: function Type1Font_getSeacs(charstrings) { var i, ii; var seacMap = []; for (i = 0, ii = charstrings.length; i < ii; i++) { var charstring = charstrings[i]; if (charstring.seac) { seacMap[i + 1] = charstring.seac; } } return seacMap; }, getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) { var type2Charstrings = []; for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { type2Charstrings.push(type1Charstrings[i].charstring); } return type2Charstrings; }, getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { var bias = 0; var count = type1Subrs.length; if (count < 1133) { bias = 107; } else if (count < 33769) { bias = 1131; } else { bias = 32768; } var type2Subrs = []; var i; for (i = 0; i < bias; i++) { type2Subrs.push([0x0b]); } for (i = 0; i < count; i++) { type2Subrs.push(type1Subrs[i]); } return type2Subrs; }, wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { var cff = new _cff_parser.CFF(); cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); cff.names = [name]; var topDict = new _cff_parser.CFFTopDict(); topDict.setByName("version", 391); topDict.setByName("Notice", 392); topDict.setByName("FullName", 393); topDict.setByName("FamilyName", 394); topDict.setByName("Weight", 395); topDict.setByName("Encoding", null); topDict.setByName("FontMatrix", properties.fontMatrix); topDict.setByName("FontBBox", properties.bbox); topDict.setByName("charset", null); topDict.setByName("CharStrings", null); topDict.setByName("Private", null); cff.topDict = topDict; var strings = new _cff_parser.CFFStrings(); strings.add("Version 0.11"); strings.add("See original notice"); strings.add(name); strings.add(name); strings.add("Medium"); cff.strings = strings; cff.globalSubrIndex = new _cff_parser.CFFIndex(); var count = glyphs.length; var charsetArray = [".notdef"]; var i, ii; for (i = 0; i < count; i++) { const glyphName = charstrings[i].glyphName; const index = _cff_parser.CFFStandardStrings.indexOf(glyphName); if (index === -1) { strings.add(glyphName); } charsetArray.push(glyphName); } cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); var charStringsIndex = new _cff_parser.CFFIndex(); charStringsIndex.add([0x8b, 0x0e]); for (i = 0; i < count; i++) { charStringsIndex.add(glyphs[i]); } cff.charStrings = charStringsIndex; var privateDict = new _cff_parser.CFFPrivateDict(); privateDict.setByName("Subrs", null); var fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; for (i = 0, ii = fields.length; i < ii; i++) { var field = fields[i]; if (!(field in properties.privateData)) { continue; } var value = properties.privateData[field]; if (Array.isArray(value)) { for (var j = value.length - 1; j > 0; j--) { value[j] -= value[j - 1]; } } privateDict.setByName(field, value); } cff.topDict.privateDict = privateDict; var subrIndex = new _cff_parser.CFFIndex(); for (i = 0, ii = subrs.length; i < ii; i++) { subrIndex.add(subrs[i]); } privateDict.subrsIndex = subrIndex; var compiler = new _cff_parser.CFFCompiler(cff); return compiler.compile(); } }; return Type1Font; }(); var CFFFont = function CFFFontClosure() { function CFFFont(file, properties) { this.properties = properties; var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED); this.cff = parser.parse(); this.cff.duplicateFirstGlyph(); var compiler = new _cff_parser.CFFCompiler(this.cff); this.seacs = this.cff.seacs; try { this.data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); this.data = file; } } CFFFont.prototype = { get numGlyphs() { return this.cff.charStrings.count; }, getCharset: function CFFFont_getCharset() { return this.cff.charset.charset; }, getGlyphMapping: function CFFFont_getGlyphMapping() { var cff = this.cff; var properties = this.properties; var charsets = cff.charset.charset; var charCodeToGlyphId; var glyphId; if (properties.composite) { charCodeToGlyphId = Object.create(null); let charCode; if (cff.isCIDFont) { for (glyphId = 0; glyphId < charsets.length; glyphId++) { var cid = charsets[glyphId]; charCode = properties.cMap.charCodeOf(cid); charCodeToGlyphId[charCode] = glyphId; } } else { for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { charCode = properties.cMap.charCodeOf(glyphId); charCodeToGlyphId[charCode] = glyphId; } } return charCodeToGlyphId; } var encoding = cff.encoding ? cff.encoding.encoding : null; charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); return charCodeToGlyphId; }, hasGlyphId: function CFFFont_hasGlyphID(id) { return this.cff.hasGlyphId(id); } }; return CFFFont; }(); /***/ }), /* 31 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0; var _util = __w_pdfjs_require__(2); var _charsets = __w_pdfjs_require__(32); var _encodings = __w_pdfjs_require__(33); var MAX_SUBR_NESTING = 10; var CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; exports.CFFStandardStrings = CFFStandardStrings; const NUM_STANDARD_CFF_STRINGS = 391; var CFFParser = function CFFParserClosure() { var CharstringValidationData = [null, { id: "hstem", min: 2, stackClearing: true, stem: true }, null, { id: "vstem", min: 2, stackClearing: true, stem: true }, { id: "vmoveto", min: 1, stackClearing: true }, { id: "rlineto", min: 2, resetStack: true }, { id: "hlineto", min: 1, resetStack: true }, { id: "vlineto", min: 1, resetStack: true }, { id: "rrcurveto", min: 6, resetStack: true }, null, { id: "callsubr", min: 1, undefStack: true }, { id: "return", min: 0, undefStack: true }, null, null, { id: "endchar", min: 0, stackClearing: true }, null, null, null, { id: "hstemhm", min: 2, stackClearing: true, stem: true }, { id: "hintmask", min: 0, stackClearing: true }, { id: "cntrmask", min: 0, stackClearing: true }, { id: "rmoveto", min: 2, stackClearing: true }, { id: "hmoveto", min: 1, stackClearing: true }, { id: "vstemhm", min: 2, stackClearing: true, stem: true }, { id: "rcurveline", min: 8, resetStack: true }, { id: "rlinecurve", min: 8, resetStack: true }, { id: "vvcurveto", min: 4, resetStack: true }, { id: "hhcurveto", min: 4, resetStack: true }, null, { id: "callgsubr", min: 1, undefStack: true }, { id: "vhcurveto", min: 4, resetStack: true }, { id: "hvcurveto", min: 4, resetStack: true }]; var CharstringValidationData12 = [null, null, null, { id: "and", min: 2, stackDelta: -1 }, { id: "or", min: 2, stackDelta: -1 }, { id: "not", min: 1, stackDelta: 0 }, null, null, null, { id: "abs", min: 1, stackDelta: 0 }, { id: "add", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] + stack[index - 1]; } }, { id: "sub", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] - stack[index - 1]; } }, { id: "div", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] / stack[index - 1]; } }, null, { id: "neg", min: 1, stackDelta: 0, stackFn: function stack_div(stack, index) { stack[index - 1] = -stack[index - 1]; } }, { id: "eq", min: 2, stackDelta: -1 }, null, null, { id: "drop", min: 1, stackDelta: -1 }, null, { id: "put", min: 2, stackDelta: -2 }, { id: "get", min: 1, stackDelta: 0 }, { id: "ifelse", min: 4, stackDelta: -3 }, { id: "random", min: 0, stackDelta: 1 }, { id: "mul", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] * stack[index - 1]; } }, null, { id: "sqrt", min: 1, stackDelta: 0 }, { id: "dup", min: 1, stackDelta: 1 }, { id: "exch", min: 2, stackDelta: 0 }, { id: "index", min: 2, stackDelta: 0 }, { id: "roll", min: 3, stackDelta: -2 }, null, null, null, { id: "hflex", min: 7, resetStack: true }, { id: "flex", min: 13, resetStack: true }, { id: "hflex1", min: 9, resetStack: true }, { id: "flex1", min: 11, resetStack: true }]; class CFFParser { constructor(file, properties, seacAnalysisEnabled) { this.bytes = file.getBytes(); this.properties = properties; this.seacAnalysisEnabled = !!seacAnalysisEnabled; } parse() { var properties = this.properties; var cff = new CFF(); this.cff = cff; var header = this.parseHeader(); var nameIndex = this.parseIndex(header.endPos); var topDictIndex = this.parseIndex(nameIndex.endPos); var stringIndex = this.parseIndex(topDictIndex.endPos); var globalSubrIndex = this.parseIndex(stringIndex.endPos); var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); cff.header = header.obj; cff.names = this.parseNameIndex(nameIndex.obj); cff.strings = this.parseStringIndex(stringIndex.obj); cff.topDict = topDict; cff.globalSubrIndex = globalSubrIndex.obj; this.parsePrivateDict(cff.topDict); cff.isCIDFont = topDict.hasName("ROS"); var charStringOffset = topDict.getByName("CharStrings"); var charStringIndex = this.parseIndex(charStringOffset).obj; var fontMatrix = topDict.getByName("FontMatrix"); if (fontMatrix) { properties.fontMatrix = fontMatrix; } var fontBBox = topDict.getByName("FontBBox"); if (fontBBox) { properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; } var charset, encoding; if (cff.isCIDFont) { var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { var dictRaw = fdArrayIndex.get(i); var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); this.parsePrivateDict(fontDict); cff.fdArray.push(fontDict); } encoding = null; charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); } else { charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); } cff.charset = charset; cff.encoding = encoding; var charStringsAndSeacs = this.parseCharStrings({ charStrings: charStringIndex, localSubrIndex: topDict.privateDict.subrsIndex, globalSubrIndex: globalSubrIndex.obj, fdSelect: cff.fdSelect, fdArray: cff.fdArray, privateDict: topDict.privateDict }); cff.charStrings = charStringsAndSeacs.charStrings; cff.seacs = charStringsAndSeacs.seacs; cff.widths = charStringsAndSeacs.widths; return cff; } parseHeader() { var bytes = this.bytes; var bytesLength = bytes.length; var offset = 0; while (offset < bytesLength && bytes[offset] !== 1) { ++offset; } if (offset >= bytesLength) { throw new _util.FormatError("Invalid CFF header"); } if (offset !== 0) { (0, _util.info)("cff data is shifted"); bytes = bytes.subarray(offset); this.bytes = bytes; } var major = bytes[0]; var minor = bytes[1]; var hdrSize = bytes[2]; var offSize = bytes[3]; var header = new CFFHeader(major, minor, hdrSize, offSize); return { obj: header, endPos: hdrSize }; } parseDict(dict) { var pos = 0; function parseOperand() { var value = dict[pos++]; if (value === 30) { return parseFloatOperand(); } else if (value === 28) { value = dict[pos++]; value = (value << 24 | dict[pos++] << 16) >> 16; return value; } else if (value === 29) { value = dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; return value; } else if (value >= 32 && value <= 246) { return value - 139; } else if (value >= 247 && value <= 250) { return (value - 247) * 256 + dict[pos++] + 108; } else if (value >= 251 && value <= 254) { return -((value - 251) * 256) - dict[pos++] - 108; } (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); return NaN; } function parseFloatOperand() { var str = ""; var eof = 15; const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; var length = dict.length; while (pos < length) { var b = dict[pos++]; var b1 = b >> 4; var b2 = b & 15; if (b1 === eof) { break; } str += lookup[b1]; if (b2 === eof) { break; } str += lookup[b2]; } return parseFloat(str); } var operands = []; var entries = []; pos = 0; var end = dict.length; while (pos < end) { var b = dict[pos]; if (b <= 21) { if (b === 12) { b = b << 8 | dict[++pos]; } entries.push([b, operands]); operands = []; ++pos; } else { operands.push(parseOperand()); } } return entries; } parseIndex(pos) { var cffIndex = new CFFIndex(); var bytes = this.bytes; var count = bytes[pos++] << 8 | bytes[pos++]; var offsets = []; var end = pos; var i, ii; if (count !== 0) { var offsetSize = bytes[pos++]; var startPos = pos + (count + 1) * offsetSize - 1; for (i = 0, ii = count + 1; i < ii; ++i) { var offset = 0; for (var j = 0; j < offsetSize; ++j) { offset <<= 8; offset += bytes[pos++]; } offsets.push(startPos + offset); } end = offsets[count]; } for (i = 0, ii = offsets.length - 1; i < ii; ++i) { var offsetStart = offsets[i]; var offsetEnd = offsets[i + 1]; cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); } return { obj: cffIndex, endPos: end }; } parseNameIndex(index) { var names = []; for (var i = 0, ii = index.count; i < ii; ++i) { var name = index.get(i); names.push((0, _util.bytesToString)(name)); } return names; } parseStringIndex(index) { var strings = new CFFStrings(); for (var i = 0, ii = index.count; i < ii; ++i) { var data = index.get(i); strings.add((0, _util.bytesToString)(data)); } return strings; } createDict(Type, dict, strings) { var cffDict = new Type(strings); for (var i = 0, ii = dict.length; i < ii; ++i) { var pair = dict[i]; var key = pair[0]; var value = pair[1]; cffDict.setByKey(key, value); } return cffDict; } parseCharString(state, data, localSubrIndex, globalSubrIndex) { if (!data || state.callDepth > MAX_SUBR_NESTING) { return false; } var stackSize = state.stackSize; var stack = state.stack; var length = data.length; for (var j = 0; j < length;) { var value = data[j++]; var validationCommand = null; if (value === 12) { var q = data[j++]; if (q === 0) { data[j - 2] = 139; data[j - 1] = 22; stackSize = 0; } else { validationCommand = CharstringValidationData12[q]; } } else if (value === 28) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; j += 2; stackSize++; } else if (value === 14) { if (stackSize >= 4) { stackSize -= 4; if (this.seacAnalysisEnabled) { state.seac = stack.slice(stackSize, stackSize + 4); return false; } } validationCommand = CharstringValidationData[value]; } else if (value >= 32 && value <= 246) { stack[stackSize] = value - 139; stackSize++; } else if (value >= 247 && value <= 254) { stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; j++; stackSize++; } else if (value === 255) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; j += 4; stackSize++; } else if (value === 19 || value === 20) { state.hints += stackSize >> 1; j += state.hints + 7 >> 3; stackSize %= 2; validationCommand = CharstringValidationData[value]; } else if (value === 10 || value === 29) { var subrsIndex; if (value === 10) { subrsIndex = localSubrIndex; } else { subrsIndex = globalSubrIndex; } if (!subrsIndex) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); return false; } var bias = 32768; if (subrsIndex.count < 1240) { bias = 107; } else if (subrsIndex.count < 33900) { bias = 1131; } var subrNumber = stack[--stackSize] + bias; if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); return false; } state.stackSize = stackSize; state.callDepth++; var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); if (!valid) { return false; } state.callDepth--; stackSize = state.stackSize; continue; } else if (value === 11) { state.stackSize = stackSize; return true; } else { validationCommand = CharstringValidationData[value]; } if (validationCommand) { if (validationCommand.stem) { state.hints += stackSize >> 1; if (value === 3 || value === 23) { state.hasVStems = true; } else if (state.hasVStems && (value === 1 || value === 18)) { (0, _util.warn)("CFF stem hints are in wrong order"); data[j - 1] = value === 1 ? 3 : 23; } } if ("min" in validationCommand) { if (!state.undefStack && stackSize < validationCommand.min) { (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); return false; } } if (state.firstStackClearing && validationCommand.stackClearing) { state.firstStackClearing = false; stackSize -= validationCommand.min; if (stackSize >= 2 && validationCommand.stem) { stackSize %= 2; } else if (stackSize > 1) { (0, _util.warn)("Found too many parameters for stack-clearing command"); } if (stackSize > 0 && stack[stackSize - 1] >= 0) { state.width = stack[stackSize - 1]; } } if ("stackDelta" in validationCommand) { if ("stackFn" in validationCommand) { validationCommand.stackFn(stack, stackSize); } stackSize += validationCommand.stackDelta; } else if (validationCommand.stackClearing) { stackSize = 0; } else if (validationCommand.resetStack) { stackSize = 0; state.undefStack = false; } else if (validationCommand.undefStack) { stackSize = 0; state.undefStack = true; state.firstStackClearing = false; } } } state.stackSize = stackSize; return true; } parseCharStrings({ charStrings, localSubrIndex, globalSubrIndex, fdSelect, fdArray, privateDict }) { var seacs = []; var widths = []; var count = charStrings.count; for (var i = 0; i < count; i++) { var charstring = charStrings.get(i); var state = { callDepth: 0, stackSize: 0, stack: [], undefStack: true, hints: 0, firstStackClearing: true, seac: null, width: null, hasVStems: false }; var valid = true; var localSubrToUse = null; var privateDictToUse = privateDict; if (fdSelect && fdArray.length) { var fdIndex = fdSelect.getFDIndex(i); if (fdIndex === -1) { (0, _util.warn)("Glyph index is not in fd select."); valid = false; } if (fdIndex >= fdArray.length) { (0, _util.warn)("Invalid fd index for glyph index."); valid = false; } if (valid) { privateDictToUse = fdArray[fdIndex].privateDict; localSubrToUse = privateDictToUse.subrsIndex; } } else if (localSubrIndex) { localSubrToUse = localSubrIndex; } if (valid) { valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); } if (state.width !== null) { const nominalWidth = privateDictToUse.getByName("nominalWidthX"); widths[i] = nominalWidth + state.width; } else { const defaultWidth = privateDictToUse.getByName("defaultWidthX"); widths[i] = defaultWidth; } if (state.seac !== null) { seacs[i] = state.seac; } if (!valid) { charStrings.set(i, new Uint8Array([14])); } } return { charStrings, seacs, widths }; } emptyPrivateDictionary(parentDict) { var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); parentDict.setByKey(18, [0, 0]); parentDict.privateDict = privateDict; } parsePrivateDict(parentDict) { if (!parentDict.hasName("Private")) { this.emptyPrivateDictionary(parentDict); return; } var privateOffset = parentDict.getByName("Private"); if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { parentDict.removeByName("Private"); return; } var size = privateOffset[0]; var offset = privateOffset[1]; if (size === 0 || offset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var privateDictEnd = offset + size; var dictData = this.bytes.subarray(offset, privateDictEnd); var dict = this.parseDict(dictData); var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); parentDict.privateDict = privateDict; if (!privateDict.getByName("Subrs")) { return; } var subrsOffset = privateDict.getByName("Subrs"); var relativeOffset = offset + subrsOffset; if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var subrsIndex = this.parseIndex(relativeOffset); privateDict.subrsIndex = subrsIndex.obj; } parseCharsets(pos, length, strings, cid) { if (pos === 0) { return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); } else if (pos === 1) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); } else if (pos === 2) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); } var bytes = this.bytes; var start = pos; var format = bytes[pos++]; const charset = [cid ? 0 : ".notdef"]; var id, count, i; length -= 1; switch (format) { case 0: for (i = 0; i < length; i++) { id = bytes[pos++] << 8 | bytes[pos++]; charset.push(cid ? id : strings.get(id)); } break; case 1: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; case 2: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; default: throw new _util.FormatError("Unknown charset format"); } var end = pos; var raw = bytes.subarray(start, end); return new CFFCharset(false, format, charset, raw); } parseEncoding(pos, properties, strings, charset) { var encoding = Object.create(null); var bytes = this.bytes; var predefined = false; var format, i, ii; var raw = null; function readSupplement() { var supplementsCount = bytes[pos++]; for (i = 0; i < supplementsCount; i++) { var code = bytes[pos++]; var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); encoding[code] = charset.indexOf(strings.get(sid)); } } if (pos === 0 || pos === 1) { predefined = true; format = pos; var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; for (i = 0, ii = charset.length; i < ii; i++) { var index = baseEncoding.indexOf(charset[i]); if (index !== -1) { encoding[index] = i; } } } else { var dataStart = pos; format = bytes[pos++]; switch (format & 0x7f) { case 0: var glyphsCount = bytes[pos++]; for (i = 1; i <= glyphsCount; i++) { encoding[bytes[pos++]] = i; } break; case 1: var rangesCount = bytes[pos++]; var gid = 1; for (i = 0; i < rangesCount; i++) { var start = bytes[pos++]; var left = bytes[pos++]; for (var j = start; j <= start + left; j++) { encoding[j] = gid++; } } break; default: throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`); } var dataEnd = pos; if (format & 0x80) { bytes[dataStart] &= 0x7f; readSupplement(); } raw = bytes.subarray(dataStart, dataEnd); } format = format & 0x7f; return new CFFEncoding(predefined, format, encoding, raw); } parseFDSelect(pos, length) { var bytes = this.bytes; var format = bytes[pos++]; var fdSelect = []; var i; switch (format) { case 0: for (i = 0; i < length; ++i) { var id = bytes[pos++]; fdSelect.push(id); } break; case 3: var rangesCount = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i < rangesCount; ++i) { var first = bytes[pos++] << 8 | bytes[pos++]; if (i === 0 && first !== 0) { (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); first = 0; } var fdIndex = bytes[pos++]; var next = bytes[pos] << 8 | bytes[pos + 1]; for (var j = first; j < next; ++j) { fdSelect.push(fdIndex); } } pos += 2; break; default: throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`); } if (fdSelect.length !== length) { throw new _util.FormatError("parseFDSelect: Invalid font data."); } return new CFFFDSelect(format, fdSelect); } } return CFFParser; }(); exports.CFFParser = CFFParser; class CFF { constructor() { this.header = null; this.names = []; this.topDict = null; this.strings = new CFFStrings(); this.globalSubrIndex = null; this.encoding = null; this.charset = null; this.charStrings = null; this.fdArray = []; this.fdSelect = null; this.isCIDFont = false; } duplicateFirstGlyph() { if (this.charStrings.count >= 65535) { (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); return; } var glyphZero = this.charStrings.get(0); this.charStrings.add(glyphZero); if (this.isCIDFont) { this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); } } hasGlyphId(id) { if (id < 0 || id >= this.charStrings.count) { return false; } var glyph = this.charStrings.get(id); return glyph.length > 0; } } exports.CFF = CFF; class CFFHeader { constructor(major, minor, hdrSize, offSize) { this.major = major; this.minor = minor; this.hdrSize = hdrSize; this.offSize = offSize; } } exports.CFFHeader = CFFHeader; class CFFStrings { constructor() { this.strings = []; } get(index) { if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { return CFFStandardStrings[index]; } if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { return this.strings[index - NUM_STANDARD_CFF_STRINGS]; } return CFFStandardStrings[0]; } getSID(str) { let index = CFFStandardStrings.indexOf(str); if (index !== -1) { return index; } index = this.strings.indexOf(str); if (index !== -1) { return index + NUM_STANDARD_CFF_STRINGS; } return -1; } add(value) { this.strings.push(value); } get count() { return this.strings.length; } } exports.CFFStrings = CFFStrings; class CFFIndex { constructor() { this.objects = []; this.length = 0; } add(data) { this.length += data.length; this.objects.push(data); } set(index, data) { this.length += data.length - this.objects[index].length; this.objects[index] = data; } get(index) { return this.objects[index]; } get count() { return this.objects.length; } } exports.CFFIndex = CFFIndex; class CFFDict { constructor(tables, strings) { this.keyToNameMap = tables.keyToNameMap; this.nameToKeyMap = tables.nameToKeyMap; this.defaults = tables.defaults; this.types = tables.types; this.opcodes = tables.opcodes; this.order = tables.order; this.strings = strings; this.values = Object.create(null); } setByKey(key, value) { if (!(key in this.keyToNameMap)) { return false; } var valueLength = value.length; if (valueLength === 0) { return true; } for (var i = 0; i < valueLength; i++) { if (isNaN(value[i])) { (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); return true; } } var type = this.types[key]; if (type === "num" || type === "sid" || type === "offset") { value = value[0]; } this.values[key] = value; return true; } setByName(name, value) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError(`Invalid dictionary name "${name}"`); } this.values[this.nameToKeyMap[name]] = value; } hasName(name) { return this.nameToKeyMap[name] in this.values; } getByName(name) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError(`Invalid dictionary name ${name}"`); } var key = this.nameToKeyMap[name]; if (!(key in this.values)) { return this.defaults[key]; } return this.values[key]; } removeByName(name) { delete this.values[this.nameToKeyMap[name]]; } static createTables(layout) { var tables = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [] }; for (var i = 0, ii = layout.length; i < ii; ++i) { var entry = layout[i]; var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; tables.keyToNameMap[key] = entry[1]; tables.nameToKeyMap[entry[1]] = key; tables.types[key] = entry[2]; tables.defaults[key] = entry[3]; tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; tables.order.push(key); } return tables; } } var CFFTopDict = function CFFTopDictClosure() { var layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; var tables = null; class CFFTopDict extends CFFDict { constructor(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } super(tables, strings); this.privateDict = null; } } return CFFTopDict; }(); exports.CFFTopDict = CFFTopDict; var CFFPrivateDict = function CFFPrivateDictClosure() { var layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; var tables = null; class CFFPrivateDict extends CFFDict { constructor(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } super(tables, strings); this.subrsIndex = null; } } return CFFPrivateDict; }(); exports.CFFPrivateDict = CFFPrivateDict; var CFFCharsetPredefinedTypes = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; class CFFCharset { constructor(predefined, format, charset, raw) { this.predefined = predefined; this.format = format; this.charset = charset; this.raw = raw; } } exports.CFFCharset = CFFCharset; class CFFEncoding { constructor(predefined, format, encoding, raw) { this.predefined = predefined; this.format = format; this.encoding = encoding; this.raw = raw; } } class CFFFDSelect { constructor(format, fdSelect) { this.format = format; this.fdSelect = fdSelect; } getFDIndex(glyphIndex) { if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { return -1; } return this.fdSelect[glyphIndex]; } } exports.CFFFDSelect = CFFFDSelect; class CFFOffsetTracker { constructor() { this.offsets = Object.create(null); } isTracking(key) { return key in this.offsets; } track(key, location) { if (key in this.offsets) { throw new _util.FormatError(`Already tracking location of ${key}`); } this.offsets[key] = location; } offset(value) { for (var key in this.offsets) { this.offsets[key] += value; } } setEntryLocation(key, values, output) { if (!(key in this.offsets)) { throw new _util.FormatError(`Not tracking location of ${key}`); } var data = output.data; var dataOffset = this.offsets[key]; var size = 5; for (var i = 0, ii = values.length; i < ii; ++i) { var offset0 = i * size + dataOffset; var offset1 = offset0 + 1; var offset2 = offset0 + 2; var offset3 = offset0 + 3; var offset4 = offset0 + 4; if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { throw new _util.FormatError("writing to an offset that is not empty"); } var value = values[i]; data[offset0] = 0x1d; data[offset1] = value >> 24 & 0xff; data[offset2] = value >> 16 & 0xff; data[offset3] = value >> 8 & 0xff; data[offset4] = value & 0xff; } } } class CFFCompiler { constructor(cff) { this.cff = cff; } compile() { var cff = this.cff; var output = { data: [], length: 0, add: function CFFCompiler_add(data) { this.data = this.data.concat(data); this.length = this.data.length; } }; var header = this.compileHeader(cff.header); output.add(header); var nameIndex = this.compileNameIndex(cff.names); output.add(nameIndex); if (cff.isCIDFont) { if (cff.topDict.hasName("FontMatrix")) { var base = cff.topDict.getByName("FontMatrix"); cff.topDict.removeByName("FontMatrix"); for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { var subDict = cff.fdArray[i]; var matrix = base.slice(0); if (subDict.hasName("FontMatrix")) { matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); } subDict.setByName("FontMatrix", matrix); } } } cff.topDict.setByName("charset", 0); var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); output.add(compiled.output); var topDictTracker = compiled.trackers[0]; var stringIndex = this.compileStringIndex(cff.strings.strings); output.add(stringIndex); var globalSubrIndex = this.compileIndex(cff.globalSubrIndex); output.add(globalSubrIndex); if (cff.encoding && cff.topDict.hasName("Encoding")) { if (cff.encoding.predefined) { topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); } else { var encoding = this.compileEncoding(cff.encoding); topDictTracker.setEntryLocation("Encoding", [output.length], output); output.add(encoding); } } var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); topDictTracker.setEntryLocation("charset", [output.length], output); output.add(charset); var charStrings = this.compileCharStrings(cff.charStrings); topDictTracker.setEntryLocation("CharStrings", [output.length], output); output.add(charStrings); if (cff.isCIDFont) { topDictTracker.setEntryLocation("FDSelect", [output.length], output); var fdSelect = this.compileFDSelect(cff.fdSelect); output.add(fdSelect); compiled = this.compileTopDicts(cff.fdArray, output.length, true); topDictTracker.setEntryLocation("FDArray", [output.length], output); output.add(compiled.output); var fontDictTrackers = compiled.trackers; this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); } this.compilePrivateDicts([cff.topDict], [topDictTracker], output); output.add([0]); return output.data; } encodeNumber(value) { if (Number.isInteger(value)) { return this.encodeInteger(value); } return this.encodeFloat(value); } static get EncodeFloatRegExp() { return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); } encodeFloat(num) { var value = num.toString(); var m = CFFCompiler.EncodeFloatRegExp.exec(value); if (m) { var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); value = (Math.round(num * epsilon) / epsilon).toString(); } var nibbles = ""; var i, ii; for (i = 0, ii = value.length; i < ii; ++i) { var a = value[i]; if (a === "e") { nibbles += value[++i] === "-" ? "c" : "b"; } else if (a === ".") { nibbles += "a"; } else if (a === "-") { nibbles += "e"; } else { nibbles += a; } } nibbles += nibbles.length & 1 ? "f" : "ff"; var out = [30]; for (i = 0, ii = nibbles.length; i < ii; i += 2) { out.push(parseInt(nibbles.substring(i, i + 2), 16)); } return out; } encodeInteger(value) { var code; if (value >= -107 && value <= 107) { code = [value + 139]; } else if (value >= 108 && value <= 1131) { value = value - 108; code = [(value >> 8) + 247, value & 0xff]; } else if (value >= -1131 && value <= -108) { value = -value - 108; code = [(value >> 8) + 251, value & 0xff]; } else if (value >= -32768 && value <= 32767) { code = [0x1c, value >> 8 & 0xff, value & 0xff]; } else { code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; } return code; } compileHeader(header) { return [header.major, header.minor, header.hdrSize, header.offSize]; } compileNameIndex(names) { var nameIndex = new CFFIndex(); for (var i = 0, ii = names.length; i < ii; ++i) { var name = names[i]; var length = Math.min(name.length, 127); var sanitizedName = new Array(length); for (var j = 0; j < length; j++) { var char = name[j]; if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") { char = "_"; } sanitizedName[j] = char; } sanitizedName = sanitizedName.join(""); if (sanitizedName === "") { sanitizedName = "Bad_Font_Name"; } nameIndex.add((0, _util.stringToBytes)(sanitizedName)); } return this.compileIndex(nameIndex); } compileTopDicts(dicts, length, removeCidKeys) { var fontDictTrackers = []; var fdArrayIndex = new CFFIndex(); for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; if (removeCidKeys) { fontDict.removeByName("CIDFontVersion"); fontDict.removeByName("CIDFontRevision"); fontDict.removeByName("CIDFontType"); fontDict.removeByName("CIDCount"); fontDict.removeByName("UIDBase"); } var fontDictTracker = new CFFOffsetTracker(); var fontDictData = this.compileDict(fontDict, fontDictTracker); fontDictTrackers.push(fontDictTracker); fdArrayIndex.add(fontDictData); fontDictTracker.offset(length); } fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); return { trackers: fontDictTrackers, output: fdArrayIndex }; } compilePrivateDicts(dicts, trackers, output) { for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; var privateDict = fontDict.privateDict; if (!privateDict || !fontDict.hasName("Private")) { throw new _util.FormatError("There must be a private dictionary."); } var privateDictTracker = new CFFOffsetTracker(); var privateDictData = this.compileDict(privateDict, privateDictTracker); var outputLength = output.length; privateDictTracker.offset(outputLength); if (!privateDictData.length) { outputLength = 0; } trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); output.add(privateDictData); if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { var subrs = this.compileIndex(privateDict.subrsIndex); privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); output.add(subrs); } } } compileDict(dict, offsetTracker) { var out = []; var order = dict.order; for (var i = 0; i < order.length; ++i) { var key = order[i]; if (!(key in dict.values)) { continue; } var values = dict.values[key]; var types = dict.types[key]; if (!Array.isArray(types)) { types = [types]; } if (!Array.isArray(values)) { values = [values]; } if (values.length === 0) { continue; } for (var j = 0, jj = types.length; j < jj; ++j) { var type = types[j]; var value = values[j]; switch (type) { case "num": case "sid": out = out.concat(this.encodeNumber(value)); break; case "offset": var name = dict.keyToNameMap[key]; if (!offsetTracker.isTracking(name)) { offsetTracker.track(name, out.length); } out = out.concat([0x1d, 0, 0, 0, 0]); break; case "array": case "delta": out = out.concat(this.encodeNumber(value)); for (var k = 1, kk = values.length; k < kk; ++k) { out = out.concat(this.encodeNumber(values[k])); } break; default: throw new _util.FormatError(`Unknown data type of ${type}`); } } out = out.concat(dict.opcodes[key]); } return out; } compileStringIndex(strings) { var stringIndex = new CFFIndex(); for (var i = 0, ii = strings.length; i < ii; ++i) { stringIndex.add((0, _util.stringToBytes)(strings[i])); } return this.compileIndex(stringIndex); } compileGlobalSubrIndex() { var globalSubrIndex = this.cff.globalSubrIndex; this.out.writeByteArray(this.compileIndex(globalSubrIndex)); } compileCharStrings(charStrings) { var charStringsIndex = new CFFIndex(); for (var i = 0; i < charStrings.count; i++) { var glyph = charStrings.get(i); if (glyph.length === 0) { charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); continue; } charStringsIndex.add(glyph); } return this.compileIndex(charStringsIndex); } compileCharset(charset, numGlyphs, strings, isCIDFont) { let out; const numGlyphsLessNotDef = numGlyphs - 1; if (isCIDFont) { out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); } else { const length = 1 + numGlyphsLessNotDef * 2; out = new Uint8Array(length); out[0] = 0; let charsetIndex = 0; const numCharsets = charset.charset.length; let warned = false; for (let i = 1; i < out.length; i += 2) { let sid = 0; if (charsetIndex < numCharsets) { const name = charset.charset[charsetIndex++]; sid = strings.getSID(name); if (sid === -1) { sid = 0; if (!warned) { warned = true; (0, _util.warn)(`Couldn't find ${name} in CFF strings`); } } } out[i] = sid >> 8 & 0xff; out[i + 1] = sid & 0xff; } } return this.compileTypedArray(out); } compileEncoding(encoding) { return this.compileTypedArray(encoding.raw); } compileFDSelect(fdSelect) { const format = fdSelect.format; let out, i; switch (format) { case 0: out = new Uint8Array(1 + fdSelect.fdSelect.length); out[0] = format; for (i = 0; i < fdSelect.fdSelect.length; i++) { out[i + 1] = fdSelect.fdSelect[i]; } break; case 3: const start = 0; let lastFD = fdSelect.fdSelect[0]; const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; for (i = 1; i < fdSelect.fdSelect.length; i++) { const currentFD = fdSelect.fdSelect[i]; if (currentFD !== lastFD) { ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); lastFD = currentFD; } } const numRanges = (ranges.length - 3) / 3; ranges[1] = numRanges >> 8 & 0xff; ranges[2] = numRanges & 0xff; ranges.push(i >> 8 & 0xff, i & 0xff); out = new Uint8Array(ranges); break; } return this.compileTypedArray(out); } compileTypedArray(data) { var out = []; for (var i = 0, ii = data.length; i < ii; ++i) { out[i] = data[i]; } return out; } compileIndex(index, trackers = []) { var objects = index.objects; var count = objects.length; if (count === 0) { return [0, 0, 0]; } var data = [count >> 8 & 0xff, count & 0xff]; var lastOffset = 1, i; for (i = 0; i < count; ++i) { lastOffset += objects[i].length; } var offsetSize; if (lastOffset < 0x100) { offsetSize = 1; } else if (lastOffset < 0x10000) { offsetSize = 2; } else if (lastOffset < 0x1000000) { offsetSize = 3; } else { offsetSize = 4; } data.push(offsetSize); var relativeOffset = 1; for (i = 0; i < count + 1; i++) { if (offsetSize === 1) { data.push(relativeOffset & 0xff); } else if (offsetSize === 2) { data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else if (offsetSize === 3) { data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else { data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } if (objects[i]) { relativeOffset += objects[i].length; } } for (i = 0; i < count; i++) { if (trackers[i]) { trackers[i].offset(data.length); } for (var j = 0, jj = objects[i].length; j < jj; j++) { data.push(objects[i][j]); } } return data; } } exports.CFFCompiler = CFFCompiler; /***/ }), /* 32 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0; const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; exports.ISOAdobeCharset = ISOAdobeCharset; const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertCharset = ExpertCharset; const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; exports.ExpertSubsetCharset = ExpertSubsetCharset; /***/ }), /* 33 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getEncoding = getEncoding; exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0; const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertEncoding = ExpertEncoding; const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; exports.MacRomanEncoding = MacRomanEncoding; const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; exports.StandardEncoding = StandardEncoding; const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; exports.WinAnsiEncoding = WinAnsiEncoding; const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; exports.SymbolSetEncoding = SymbolSetEncoding; const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; function getEncoding(encodingName) { switch (encodingName) { case "WinAnsiEncoding": return WinAnsiEncoding; case "StandardEncoding": return StandardEncoding; case "MacRomanEncoding": return MacRomanEncoding; case "SymbolSetEncoding": return SymbolSetEncoding; case "ZapfDingbatsEncoding": return ZapfDingbatsEncoding; case "ExpertEncoding": return ExpertEncoding; case "MacExpertEncoding": return MacExpertEncoding; default: return null; } } /***/ }), /* 34 */ /***/ (function(module, exports, __w_pdfjs_require__) { var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory; var getGlyphsUnicode = getLookupTableFactory(function (t) { t.A = 0x0041; t.AE = 0x00c6; t.AEacute = 0x01fc; t.AEmacron = 0x01e2; t.AEsmall = 0xf7e6; t.Aacute = 0x00c1; t.Aacutesmall = 0xf7e1; t.Abreve = 0x0102; t.Abreveacute = 0x1eae; t.Abrevecyrillic = 0x04d0; t.Abrevedotbelow = 0x1eb6; t.Abrevegrave = 0x1eb0; t.Abrevehookabove = 0x1eb2; t.Abrevetilde = 0x1eb4; t.Acaron = 0x01cd; t.Acircle = 0x24b6; t.Acircumflex = 0x00c2; t.Acircumflexacute = 0x1ea4; t.Acircumflexdotbelow = 0x1eac; t.Acircumflexgrave = 0x1ea6; t.Acircumflexhookabove = 0x1ea8; t.Acircumflexsmall = 0xf7e2; t.Acircumflextilde = 0x1eaa; t.Acute = 0xf6c9; t.Acutesmall = 0xf7b4; t.Acyrillic = 0x0410; t.Adblgrave = 0x0200; t.Adieresis = 0x00c4; t.Adieresiscyrillic = 0x04d2; t.Adieresismacron = 0x01de; t.Adieresissmall = 0xf7e4; t.Adotbelow = 0x1ea0; t.Adotmacron = 0x01e0; t.Agrave = 0x00c0; t.Agravesmall = 0xf7e0; t.Ahookabove = 0x1ea2; t.Aiecyrillic = 0x04d4; t.Ainvertedbreve = 0x0202; t.Alpha = 0x0391; t.Alphatonos = 0x0386; t.Amacron = 0x0100; t.Amonospace = 0xff21; t.Aogonek = 0x0104; t.Aring = 0x00c5; t.Aringacute = 0x01fa; t.Aringbelow = 0x1e00; t.Aringsmall = 0xf7e5; t.Asmall = 0xf761; t.Atilde = 0x00c3; t.Atildesmall = 0xf7e3; t.Aybarmenian = 0x0531; t.B = 0x0042; t.Bcircle = 0x24b7; t.Bdotaccent = 0x1e02; t.Bdotbelow = 0x1e04; t.Becyrillic = 0x0411; t.Benarmenian = 0x0532; t.Beta = 0x0392; t.Bhook = 0x0181; t.Blinebelow = 0x1e06; t.Bmonospace = 0xff22; t.Brevesmall = 0xf6f4; t.Bsmall = 0xf762; t.Btopbar = 0x0182; t.C = 0x0043; t.Caarmenian = 0x053e; t.Cacute = 0x0106; t.Caron = 0xf6ca; t.Caronsmall = 0xf6f5; t.Ccaron = 0x010c; t.Ccedilla = 0x00c7; t.Ccedillaacute = 0x1e08; t.Ccedillasmall = 0xf7e7; t.Ccircle = 0x24b8; t.Ccircumflex = 0x0108; t.Cdot = 0x010a; t.Cdotaccent = 0x010a; t.Cedillasmall = 0xf7b8; t.Chaarmenian = 0x0549; t.Cheabkhasiancyrillic = 0x04bc; t.Checyrillic = 0x0427; t.Chedescenderabkhasiancyrillic = 0x04be; t.Chedescendercyrillic = 0x04b6; t.Chedieresiscyrillic = 0x04f4; t.Cheharmenian = 0x0543; t.Chekhakassiancyrillic = 0x04cb; t.Cheverticalstrokecyrillic = 0x04b8; t.Chi = 0x03a7; t.Chook = 0x0187; t.Circumflexsmall = 0xf6f6; t.Cmonospace = 0xff23; t.Coarmenian = 0x0551; t.Csmall = 0xf763; t.D = 0x0044; t.DZ = 0x01f1; t.DZcaron = 0x01c4; t.Daarmenian = 0x0534; t.Dafrican = 0x0189; t.Dcaron = 0x010e; t.Dcedilla = 0x1e10; t.Dcircle = 0x24b9; t.Dcircumflexbelow = 0x1e12; t.Dcroat = 0x0110; t.Ddotaccent = 0x1e0a; t.Ddotbelow = 0x1e0c; t.Decyrillic = 0x0414; t.Deicoptic = 0x03ee; t.Delta = 0x2206; t.Deltagreek = 0x0394; t.Dhook = 0x018a; t.Dieresis = 0xf6cb; t.DieresisAcute = 0xf6cc; t.DieresisGrave = 0xf6cd; t.Dieresissmall = 0xf7a8; t.Digammagreek = 0x03dc; t.Djecyrillic = 0x0402; t.Dlinebelow = 0x1e0e; t.Dmonospace = 0xff24; t.Dotaccentsmall = 0xf6f7; t.Dslash = 0x0110; t.Dsmall = 0xf764; t.Dtopbar = 0x018b; t.Dz = 0x01f2; t.Dzcaron = 0x01c5; t.Dzeabkhasiancyrillic = 0x04e0; t.Dzecyrillic = 0x0405; t.Dzhecyrillic = 0x040f; t.E = 0x0045; t.Eacute = 0x00c9; t.Eacutesmall = 0xf7e9; t.Ebreve = 0x0114; t.Ecaron = 0x011a; t.Ecedillabreve = 0x1e1c; t.Echarmenian = 0x0535; t.Ecircle = 0x24ba; t.Ecircumflex = 0x00ca; t.Ecircumflexacute = 0x1ebe; t.Ecircumflexbelow = 0x1e18; t.Ecircumflexdotbelow = 0x1ec6; t.Ecircumflexgrave = 0x1ec0; t.Ecircumflexhookabove = 0x1ec2; t.Ecircumflexsmall = 0xf7ea; t.Ecircumflextilde = 0x1ec4; t.Ecyrillic = 0x0404; t.Edblgrave = 0x0204; t.Edieresis = 0x00cb; t.Edieresissmall = 0xf7eb; t.Edot = 0x0116; t.Edotaccent = 0x0116; t.Edotbelow = 0x1eb8; t.Efcyrillic = 0x0424; t.Egrave = 0x00c8; t.Egravesmall = 0xf7e8; t.Eharmenian = 0x0537; t.Ehookabove = 0x1eba; t.Eightroman = 0x2167; t.Einvertedbreve = 0x0206; t.Eiotifiedcyrillic = 0x0464; t.Elcyrillic = 0x041b; t.Elevenroman = 0x216a; t.Emacron = 0x0112; t.Emacronacute = 0x1e16; t.Emacrongrave = 0x1e14; t.Emcyrillic = 0x041c; t.Emonospace = 0xff25; t.Encyrillic = 0x041d; t.Endescendercyrillic = 0x04a2; t.Eng = 0x014a; t.Enghecyrillic = 0x04a4; t.Enhookcyrillic = 0x04c7; t.Eogonek = 0x0118; t.Eopen = 0x0190; t.Epsilon = 0x0395; t.Epsilontonos = 0x0388; t.Ercyrillic = 0x0420; t.Ereversed = 0x018e; t.Ereversedcyrillic = 0x042d; t.Escyrillic = 0x0421; t.Esdescendercyrillic = 0x04aa; t.Esh = 0x01a9; t.Esmall = 0xf765; t.Eta = 0x0397; t.Etarmenian = 0x0538; t.Etatonos = 0x0389; t.Eth = 0x00d0; t.Ethsmall = 0xf7f0; t.Etilde = 0x1ebc; t.Etildebelow = 0x1e1a; t.Euro = 0x20ac; t.Ezh = 0x01b7; t.Ezhcaron = 0x01ee; t.Ezhreversed = 0x01b8; t.F = 0x0046; t.Fcircle = 0x24bb; t.Fdotaccent = 0x1e1e; t.Feharmenian = 0x0556; t.Feicoptic = 0x03e4; t.Fhook = 0x0191; t.Fitacyrillic = 0x0472; t.Fiveroman = 0x2164; t.Fmonospace = 0xff26; t.Fourroman = 0x2163; t.Fsmall = 0xf766; t.G = 0x0047; t.GBsquare = 0x3387; t.Gacute = 0x01f4; t.Gamma = 0x0393; t.Gammaafrican = 0x0194; t.Gangiacoptic = 0x03ea; t.Gbreve = 0x011e; t.Gcaron = 0x01e6; t.Gcedilla = 0x0122; t.Gcircle = 0x24bc; t.Gcircumflex = 0x011c; t.Gcommaaccent = 0x0122; t.Gdot = 0x0120; t.Gdotaccent = 0x0120; t.Gecyrillic = 0x0413; t.Ghadarmenian = 0x0542; t.Ghemiddlehookcyrillic = 0x0494; t.Ghestrokecyrillic = 0x0492; t.Gheupturncyrillic = 0x0490; t.Ghook = 0x0193; t.Gimarmenian = 0x0533; t.Gjecyrillic = 0x0403; t.Gmacron = 0x1e20; t.Gmonospace = 0xff27; t.Grave = 0xf6ce; t.Gravesmall = 0xf760; t.Gsmall = 0xf767; t.Gsmallhook = 0x029b; t.Gstroke = 0x01e4; t.H = 0x0048; t.H18533 = 0x25cf; t.H18543 = 0x25aa; t.H18551 = 0x25ab; t.H22073 = 0x25a1; t.HPsquare = 0x33cb; t.Haabkhasiancyrillic = 0x04a8; t.Hadescendercyrillic = 0x04b2; t.Hardsigncyrillic = 0x042a; t.Hbar = 0x0126; t.Hbrevebelow = 0x1e2a; t.Hcedilla = 0x1e28; t.Hcircle = 0x24bd; t.Hcircumflex = 0x0124; t.Hdieresis = 0x1e26; t.Hdotaccent = 0x1e22; t.Hdotbelow = 0x1e24; t.Hmonospace = 0xff28; t.Hoarmenian = 0x0540; t.Horicoptic = 0x03e8; t.Hsmall = 0xf768; t.Hungarumlaut = 0xf6cf; t.Hungarumlautsmall = 0xf6f8; t.Hzsquare = 0x3390; t.I = 0x0049; t.IAcyrillic = 0x042f; t.IJ = 0x0132; t.IUcyrillic = 0x042e; t.Iacute = 0x00cd; t.Iacutesmall = 0xf7ed; t.Ibreve = 0x012c; t.Icaron = 0x01cf; t.Icircle = 0x24be; t.Icircumflex = 0x00ce; t.Icircumflexsmall = 0xf7ee; t.Icyrillic = 0x0406; t.Idblgrave = 0x0208; t.Idieresis = 0x00cf; t.Idieresisacute = 0x1e2e; t.Idieresiscyrillic = 0x04e4; t.Idieresissmall = 0xf7ef; t.Idot = 0x0130; t.Idotaccent = 0x0130; t.Idotbelow = 0x1eca; t.Iebrevecyrillic = 0x04d6; t.Iecyrillic = 0x0415; t.Ifraktur = 0x2111; t.Igrave = 0x00cc; t.Igravesmall = 0xf7ec; t.Ihookabove = 0x1ec8; t.Iicyrillic = 0x0418; t.Iinvertedbreve = 0x020a; t.Iishortcyrillic = 0x0419; t.Imacron = 0x012a; t.Imacroncyrillic = 0x04e2; t.Imonospace = 0xff29; t.Iniarmenian = 0x053b; t.Iocyrillic = 0x0401; t.Iogonek = 0x012e; t.Iota = 0x0399; t.Iotaafrican = 0x0196; t.Iotadieresis = 0x03aa; t.Iotatonos = 0x038a; t.Ismall = 0xf769; t.Istroke = 0x0197; t.Itilde = 0x0128; t.Itildebelow = 0x1e2c; t.Izhitsacyrillic = 0x0474; t.Izhitsadblgravecyrillic = 0x0476; t.J = 0x004a; t.Jaarmenian = 0x0541; t.Jcircle = 0x24bf; t.Jcircumflex = 0x0134; t.Jecyrillic = 0x0408; t.Jheharmenian = 0x054b; t.Jmonospace = 0xff2a; t.Jsmall = 0xf76a; t.K = 0x004b; t.KBsquare = 0x3385; t.KKsquare = 0x33cd; t.Kabashkircyrillic = 0x04a0; t.Kacute = 0x1e30; t.Kacyrillic = 0x041a; t.Kadescendercyrillic = 0x049a; t.Kahookcyrillic = 0x04c3; t.Kappa = 0x039a; t.Kastrokecyrillic = 0x049e; t.Kaverticalstrokecyrillic = 0x049c; t.Kcaron = 0x01e8; t.Kcedilla = 0x0136; t.Kcircle = 0x24c0; t.Kcommaaccent = 0x0136; t.Kdotbelow = 0x1e32; t.Keharmenian = 0x0554; t.Kenarmenian = 0x053f; t.Khacyrillic = 0x0425; t.Kheicoptic = 0x03e6; t.Khook = 0x0198; t.Kjecyrillic = 0x040c; t.Klinebelow = 0x1e34; t.Kmonospace = 0xff2b; t.Koppacyrillic = 0x0480; t.Koppagreek = 0x03de; t.Ksicyrillic = 0x046e; t.Ksmall = 0xf76b; t.L = 0x004c; t.LJ = 0x01c7; t.LL = 0xf6bf; t.Lacute = 0x0139; t.Lambda = 0x039b; t.Lcaron = 0x013d; t.Lcedilla = 0x013b; t.Lcircle = 0x24c1; t.Lcircumflexbelow = 0x1e3c; t.Lcommaaccent = 0x013b; t.Ldot = 0x013f; t.Ldotaccent = 0x013f; t.Ldotbelow = 0x1e36; t.Ldotbelowmacron = 0x1e38; t.Liwnarmenian = 0x053c; t.Lj = 0x01c8; t.Ljecyrillic = 0x0409; t.Llinebelow = 0x1e3a; t.Lmonospace = 0xff2c; t.Lslash = 0x0141; t.Lslashsmall = 0xf6f9; t.Lsmall = 0xf76c; t.M = 0x004d; t.MBsquare = 0x3386; t.Macron = 0xf6d0; t.Macronsmall = 0xf7af; t.Macute = 0x1e3e; t.Mcircle = 0x24c2; t.Mdotaccent = 0x1e40; t.Mdotbelow = 0x1e42; t.Menarmenian = 0x0544; t.Mmonospace = 0xff2d; t.Msmall = 0xf76d; t.Mturned = 0x019c; t.Mu = 0x039c; t.N = 0x004e; t.NJ = 0x01ca; t.Nacute = 0x0143; t.Ncaron = 0x0147; t.Ncedilla = 0x0145; t.Ncircle = 0x24c3; t.Ncircumflexbelow = 0x1e4a; t.Ncommaaccent = 0x0145; t.Ndotaccent = 0x1e44; t.Ndotbelow = 0x1e46; t.Nhookleft = 0x019d; t.Nineroman = 0x2168; t.Nj = 0x01cb; t.Njecyrillic = 0x040a; t.Nlinebelow = 0x1e48; t.Nmonospace = 0xff2e; t.Nowarmenian = 0x0546; t.Nsmall = 0xf76e; t.Ntilde = 0x00d1; t.Ntildesmall = 0xf7f1; t.Nu = 0x039d; t.O = 0x004f; t.OE = 0x0152; t.OEsmall = 0xf6fa; t.Oacute = 0x00d3; t.Oacutesmall = 0xf7f3; t.Obarredcyrillic = 0x04e8; t.Obarreddieresiscyrillic = 0x04ea; t.Obreve = 0x014e; t.Ocaron = 0x01d1; t.Ocenteredtilde = 0x019f; t.Ocircle = 0x24c4; t.Ocircumflex = 0x00d4; t.Ocircumflexacute = 0x1ed0; t.Ocircumflexdotbelow = 0x1ed8; t.Ocircumflexgrave = 0x1ed2; t.Ocircumflexhookabove = 0x1ed4; t.Ocircumflexsmall = 0xf7f4; t.Ocircumflextilde = 0x1ed6; t.Ocyrillic = 0x041e; t.Odblacute = 0x0150; t.Odblgrave = 0x020c; t.Odieresis = 0x00d6; t.Odieresiscyrillic = 0x04e6; t.Odieresissmall = 0xf7f6; t.Odotbelow = 0x1ecc; t.Ogoneksmall = 0xf6fb; t.Ograve = 0x00d2; t.Ogravesmall = 0xf7f2; t.Oharmenian = 0x0555; t.Ohm = 0x2126; t.Ohookabove = 0x1ece; t.Ohorn = 0x01a0; t.Ohornacute = 0x1eda; t.Ohorndotbelow = 0x1ee2; t.Ohorngrave = 0x1edc; t.Ohornhookabove = 0x1ede; t.Ohorntilde = 0x1ee0; t.Ohungarumlaut = 0x0150; t.Oi = 0x01a2; t.Oinvertedbreve = 0x020e; t.Omacron = 0x014c; t.Omacronacute = 0x1e52; t.Omacrongrave = 0x1e50; t.Omega = 0x2126; t.Omegacyrillic = 0x0460; t.Omegagreek = 0x03a9; t.Omegaroundcyrillic = 0x047a; t.Omegatitlocyrillic = 0x047c; t.Omegatonos = 0x038f; t.Omicron = 0x039f; t.Omicrontonos = 0x038c; t.Omonospace = 0xff2f; t.Oneroman = 0x2160; t.Oogonek = 0x01ea; t.Oogonekmacron = 0x01ec; t.Oopen = 0x0186; t.Oslash = 0x00d8; t.Oslashacute = 0x01fe; t.Oslashsmall = 0xf7f8; t.Osmall = 0xf76f; t.Ostrokeacute = 0x01fe; t.Otcyrillic = 0x047e; t.Otilde = 0x00d5; t.Otildeacute = 0x1e4c; t.Otildedieresis = 0x1e4e; t.Otildesmall = 0xf7f5; t.P = 0x0050; t.Pacute = 0x1e54; t.Pcircle = 0x24c5; t.Pdotaccent = 0x1e56; t.Pecyrillic = 0x041f; t.Peharmenian = 0x054a; t.Pemiddlehookcyrillic = 0x04a6; t.Phi = 0x03a6; t.Phook = 0x01a4; t.Pi = 0x03a0; t.Piwrarmenian = 0x0553; t.Pmonospace = 0xff30; t.Psi = 0x03a8; t.Psicyrillic = 0x0470; t.Psmall = 0xf770; t.Q = 0x0051; t.Qcircle = 0x24c6; t.Qmonospace = 0xff31; t.Qsmall = 0xf771; t.R = 0x0052; t.Raarmenian = 0x054c; t.Racute = 0x0154; t.Rcaron = 0x0158; t.Rcedilla = 0x0156; t.Rcircle = 0x24c7; t.Rcommaaccent = 0x0156; t.Rdblgrave = 0x0210; t.Rdotaccent = 0x1e58; t.Rdotbelow = 0x1e5a; t.Rdotbelowmacron = 0x1e5c; t.Reharmenian = 0x0550; t.Rfraktur = 0x211c; t.Rho = 0x03a1; t.Ringsmall = 0xf6fc; t.Rinvertedbreve = 0x0212; t.Rlinebelow = 0x1e5e; t.Rmonospace = 0xff32; t.Rsmall = 0xf772; t.Rsmallinverted = 0x0281; t.Rsmallinvertedsuperior = 0x02b6; t.S = 0x0053; t.SF010000 = 0x250c; t.SF020000 = 0x2514; t.SF030000 = 0x2510; t.SF040000 = 0x2518; t.SF050000 = 0x253c; t.SF060000 = 0x252c; t.SF070000 = 0x2534; t.SF080000 = 0x251c; t.SF090000 = 0x2524; t.SF100000 = 0x2500; t.SF110000 = 0x2502; t.SF190000 = 0x2561; t.SF200000 = 0x2562; t.SF210000 = 0x2556; t.SF220000 = 0x2555; t.SF230000 = 0x2563; t.SF240000 = 0x2551; t.SF250000 = 0x2557; t.SF260000 = 0x255d; t.SF270000 = 0x255c; t.SF280000 = 0x255b; t.SF360000 = 0x255e; t.SF370000 = 0x255f; t.SF380000 = 0x255a; t.SF390000 = 0x2554; t.SF400000 = 0x2569; t.SF410000 = 0x2566; t.SF420000 = 0x2560; t.SF430000 = 0x2550; t.SF440000 = 0x256c; t.SF450000 = 0x2567; t.SF460000 = 0x2568; t.SF470000 = 0x2564; t.SF480000 = 0x2565; t.SF490000 = 0x2559; t.SF500000 = 0x2558; t.SF510000 = 0x2552; t.SF520000 = 0x2553; t.SF530000 = 0x256b; t.SF540000 = 0x256a; t.Sacute = 0x015a; t.Sacutedotaccent = 0x1e64; t.Sampigreek = 0x03e0; t.Scaron = 0x0160; t.Scarondotaccent = 0x1e66; t.Scaronsmall = 0xf6fd; t.Scedilla = 0x015e; t.Schwa = 0x018f; t.Schwacyrillic = 0x04d8; t.Schwadieresiscyrillic = 0x04da; t.Scircle = 0x24c8; t.Scircumflex = 0x015c; t.Scommaaccent = 0x0218; t.Sdotaccent = 0x1e60; t.Sdotbelow = 0x1e62; t.Sdotbelowdotaccent = 0x1e68; t.Seharmenian = 0x054d; t.Sevenroman = 0x2166; t.Shaarmenian = 0x0547; t.Shacyrillic = 0x0428; t.Shchacyrillic = 0x0429; t.Sheicoptic = 0x03e2; t.Shhacyrillic = 0x04ba; t.Shimacoptic = 0x03ec; t.Sigma = 0x03a3; t.Sixroman = 0x2165; t.Smonospace = 0xff33; t.Softsigncyrillic = 0x042c; t.Ssmall = 0xf773; t.Stigmagreek = 0x03da; t.T = 0x0054; t.Tau = 0x03a4; t.Tbar = 0x0166; t.Tcaron = 0x0164; t.Tcedilla = 0x0162; t.Tcircle = 0x24c9; t.Tcircumflexbelow = 0x1e70; t.Tcommaaccent = 0x0162; t.Tdotaccent = 0x1e6a; t.Tdotbelow = 0x1e6c; t.Tecyrillic = 0x0422; t.Tedescendercyrillic = 0x04ac; t.Tenroman = 0x2169; t.Tetsecyrillic = 0x04b4; t.Theta = 0x0398; t.Thook = 0x01ac; t.Thorn = 0x00de; t.Thornsmall = 0xf7fe; t.Threeroman = 0x2162; t.Tildesmall = 0xf6fe; t.Tiwnarmenian = 0x054f; t.Tlinebelow = 0x1e6e; t.Tmonospace = 0xff34; t.Toarmenian = 0x0539; t.Tonefive = 0x01bc; t.Tonesix = 0x0184; t.Tonetwo = 0x01a7; t.Tretroflexhook = 0x01ae; t.Tsecyrillic = 0x0426; t.Tshecyrillic = 0x040b; t.Tsmall = 0xf774; t.Twelveroman = 0x216b; t.Tworoman = 0x2161; t.U = 0x0055; t.Uacute = 0x00da; t.Uacutesmall = 0xf7fa; t.Ubreve = 0x016c; t.Ucaron = 0x01d3; t.Ucircle = 0x24ca; t.Ucircumflex = 0x00db; t.Ucircumflexbelow = 0x1e76; t.Ucircumflexsmall = 0xf7fb; t.Ucyrillic = 0x0423; t.Udblacute = 0x0170; t.Udblgrave = 0x0214; t.Udieresis = 0x00dc; t.Udieresisacute = 0x01d7; t.Udieresisbelow = 0x1e72; t.Udieresiscaron = 0x01d9; t.Udieresiscyrillic = 0x04f0; t.Udieresisgrave = 0x01db; t.Udieresismacron = 0x01d5; t.Udieresissmall = 0xf7fc; t.Udotbelow = 0x1ee4; t.Ugrave = 0x00d9; t.Ugravesmall = 0xf7f9; t.Uhookabove = 0x1ee6; t.Uhorn = 0x01af; t.Uhornacute = 0x1ee8; t.Uhorndotbelow = 0x1ef0; t.Uhorngrave = 0x1eea; t.Uhornhookabove = 0x1eec; t.Uhorntilde = 0x1eee; t.Uhungarumlaut = 0x0170; t.Uhungarumlautcyrillic = 0x04f2; t.Uinvertedbreve = 0x0216; t.Ukcyrillic = 0x0478; t.Umacron = 0x016a; t.Umacroncyrillic = 0x04ee; t.Umacrondieresis = 0x1e7a; t.Umonospace = 0xff35; t.Uogonek = 0x0172; t.Upsilon = 0x03a5; t.Upsilon1 = 0x03d2; t.Upsilonacutehooksymbolgreek = 0x03d3; t.Upsilonafrican = 0x01b1; t.Upsilondieresis = 0x03ab; t.Upsilondieresishooksymbolgreek = 0x03d4; t.Upsilonhooksymbol = 0x03d2; t.Upsilontonos = 0x038e; t.Uring = 0x016e; t.Ushortcyrillic = 0x040e; t.Usmall = 0xf775; t.Ustraightcyrillic = 0x04ae; t.Ustraightstrokecyrillic = 0x04b0; t.Utilde = 0x0168; t.Utildeacute = 0x1e78; t.Utildebelow = 0x1e74; t.V = 0x0056; t.Vcircle = 0x24cb; t.Vdotbelow = 0x1e7e; t.Vecyrillic = 0x0412; t.Vewarmenian = 0x054e; t.Vhook = 0x01b2; t.Vmonospace = 0xff36; t.Voarmenian = 0x0548; t.Vsmall = 0xf776; t.Vtilde = 0x1e7c; t.W = 0x0057; t.Wacute = 0x1e82; t.Wcircle = 0x24cc; t.Wcircumflex = 0x0174; t.Wdieresis = 0x1e84; t.Wdotaccent = 0x1e86; t.Wdotbelow = 0x1e88; t.Wgrave = 0x1e80; t.Wmonospace = 0xff37; t.Wsmall = 0xf777; t.X = 0x0058; t.Xcircle = 0x24cd; t.Xdieresis = 0x1e8c; t.Xdotaccent = 0x1e8a; t.Xeharmenian = 0x053d; t.Xi = 0x039e; t.Xmonospace = 0xff38; t.Xsmall = 0xf778; t.Y = 0x0059; t.Yacute = 0x00dd; t.Yacutesmall = 0xf7fd; t.Yatcyrillic = 0x0462; t.Ycircle = 0x24ce; t.Ycircumflex = 0x0176; t.Ydieresis = 0x0178; t.Ydieresissmall = 0xf7ff; t.Ydotaccent = 0x1e8e; t.Ydotbelow = 0x1ef4; t.Yericyrillic = 0x042b; t.Yerudieresiscyrillic = 0x04f8; t.Ygrave = 0x1ef2; t.Yhook = 0x01b3; t.Yhookabove = 0x1ef6; t.Yiarmenian = 0x0545; t.Yicyrillic = 0x0407; t.Yiwnarmenian = 0x0552; t.Ymonospace = 0xff39; t.Ysmall = 0xf779; t.Ytilde = 0x1ef8; t.Yusbigcyrillic = 0x046a; t.Yusbigiotifiedcyrillic = 0x046c; t.Yuslittlecyrillic = 0x0466; t.Yuslittleiotifiedcyrillic = 0x0468; t.Z = 0x005a; t.Zaarmenian = 0x0536; t.Zacute = 0x0179; t.Zcaron = 0x017d; t.Zcaronsmall = 0xf6ff; t.Zcircle = 0x24cf; t.Zcircumflex = 0x1e90; t.Zdot = 0x017b; t.Zdotaccent = 0x017b; t.Zdotbelow = 0x1e92; t.Zecyrillic = 0x0417; t.Zedescendercyrillic = 0x0498; t.Zedieresiscyrillic = 0x04de; t.Zeta = 0x0396; t.Zhearmenian = 0x053a; t.Zhebrevecyrillic = 0x04c1; t.Zhecyrillic = 0x0416; t.Zhedescendercyrillic = 0x0496; t.Zhedieresiscyrillic = 0x04dc; t.Zlinebelow = 0x1e94; t.Zmonospace = 0xff3a; t.Zsmall = 0xf77a; t.Zstroke = 0x01b5; t.a = 0x0061; t.aabengali = 0x0986; t.aacute = 0x00e1; t.aadeva = 0x0906; t.aagujarati = 0x0a86; t.aagurmukhi = 0x0a06; t.aamatragurmukhi = 0x0a3e; t.aarusquare = 0x3303; t.aavowelsignbengali = 0x09be; t.aavowelsigndeva = 0x093e; t.aavowelsigngujarati = 0x0abe; t.abbreviationmarkarmenian = 0x055f; t.abbreviationsigndeva = 0x0970; t.abengali = 0x0985; t.abopomofo = 0x311a; t.abreve = 0x0103; t.abreveacute = 0x1eaf; t.abrevecyrillic = 0x04d1; t.abrevedotbelow = 0x1eb7; t.abrevegrave = 0x1eb1; t.abrevehookabove = 0x1eb3; t.abrevetilde = 0x1eb5; t.acaron = 0x01ce; t.acircle = 0x24d0; t.acircumflex = 0x00e2; t.acircumflexacute = 0x1ea5; t.acircumflexdotbelow = 0x1ead; t.acircumflexgrave = 0x1ea7; t.acircumflexhookabove = 0x1ea9; t.acircumflextilde = 0x1eab; t.acute = 0x00b4; t.acutebelowcmb = 0x0317; t.acutecmb = 0x0301; t.acutecomb = 0x0301; t.acutedeva = 0x0954; t.acutelowmod = 0x02cf; t.acutetonecmb = 0x0341; t.acyrillic = 0x0430; t.adblgrave = 0x0201; t.addakgurmukhi = 0x0a71; t.adeva = 0x0905; t.adieresis = 0x00e4; t.adieresiscyrillic = 0x04d3; t.adieresismacron = 0x01df; t.adotbelow = 0x1ea1; t.adotmacron = 0x01e1; t.ae = 0x00e6; t.aeacute = 0x01fd; t.aekorean = 0x3150; t.aemacron = 0x01e3; t.afii00208 = 0x2015; t.afii08941 = 0x20a4; t.afii10017 = 0x0410; t.afii10018 = 0x0411; t.afii10019 = 0x0412; t.afii10020 = 0x0413; t.afii10021 = 0x0414; t.afii10022 = 0x0415; t.afii10023 = 0x0401; t.afii10024 = 0x0416; t.afii10025 = 0x0417; t.afii10026 = 0x0418; t.afii10027 = 0x0419; t.afii10028 = 0x041a; t.afii10029 = 0x041b; t.afii10030 = 0x041c; t.afii10031 = 0x041d; t.afii10032 = 0x041e; t.afii10033 = 0x041f; t.afii10034 = 0x0420; t.afii10035 = 0x0421; t.afii10036 = 0x0422; t.afii10037 = 0x0423; t.afii10038 = 0x0424; t.afii10039 = 0x0425; t.afii10040 = 0x0426; t.afii10041 = 0x0427; t.afii10042 = 0x0428; t.afii10043 = 0x0429; t.afii10044 = 0x042a; t.afii10045 = 0x042b; t.afii10046 = 0x042c; t.afii10047 = 0x042d; t.afii10048 = 0x042e; t.afii10049 = 0x042f; t.afii10050 = 0x0490; t.afii10051 = 0x0402; t.afii10052 = 0x0403; t.afii10053 = 0x0404; t.afii10054 = 0x0405; t.afii10055 = 0x0406; t.afii10056 = 0x0407; t.afii10057 = 0x0408; t.afii10058 = 0x0409; t.afii10059 = 0x040a; t.afii10060 = 0x040b; t.afii10061 = 0x040c; t.afii10062 = 0x040e; t.afii10063 = 0xf6c4; t.afii10064 = 0xf6c5; t.afii10065 = 0x0430; t.afii10066 = 0x0431; t.afii10067 = 0x0432; t.afii10068 = 0x0433; t.afii10069 = 0x0434; t.afii10070 = 0x0435; t.afii10071 = 0x0451; t.afii10072 = 0x0436; t.afii10073 = 0x0437; t.afii10074 = 0x0438; t.afii10075 = 0x0439; t.afii10076 = 0x043a; t.afii10077 = 0x043b; t.afii10078 = 0x043c; t.afii10079 = 0x043d; t.afii10080 = 0x043e; t.afii10081 = 0x043f; t.afii10082 = 0x0440; t.afii10083 = 0x0441; t.afii10084 = 0x0442; t.afii10085 = 0x0443; t.afii10086 = 0x0444; t.afii10087 = 0x0445; t.afii10088 = 0x0446; t.afii10089 = 0x0447; t.afii10090 = 0x0448; t.afii10091 = 0x0449; t.afii10092 = 0x044a; t.afii10093 = 0x044b; t.afii10094 = 0x044c; t.afii10095 = 0x044d; t.afii10096 = 0x044e; t.afii10097 = 0x044f; t.afii10098 = 0x0491; t.afii10099 = 0x0452; t.afii10100 = 0x0453; t.afii10101 = 0x0454; t.afii10102 = 0x0455; t.afii10103 = 0x0456; t.afii10104 = 0x0457; t.afii10105 = 0x0458; t.afii10106 = 0x0459; t.afii10107 = 0x045a; t.afii10108 = 0x045b; t.afii10109 = 0x045c; t.afii10110 = 0x045e; t.afii10145 = 0x040f; t.afii10146 = 0x0462; t.afii10147 = 0x0472; t.afii10148 = 0x0474; t.afii10192 = 0xf6c6; t.afii10193 = 0x045f; t.afii10194 = 0x0463; t.afii10195 = 0x0473; t.afii10196 = 0x0475; t.afii10831 = 0xf6c7; t.afii10832 = 0xf6c8; t.afii10846 = 0x04d9; t.afii299 = 0x200e; t.afii300 = 0x200f; t.afii301 = 0x200d; t.afii57381 = 0x066a; t.afii57388 = 0x060c; t.afii57392 = 0x0660; t.afii57393 = 0x0661; t.afii57394 = 0x0662; t.afii57395 = 0x0663; t.afii57396 = 0x0664; t.afii57397 = 0x0665; t.afii57398 = 0x0666; t.afii57399 = 0x0667; t.afii57400 = 0x0668; t.afii57401 = 0x0669; t.afii57403 = 0x061b; t.afii57407 = 0x061f; t.afii57409 = 0x0621; t.afii57410 = 0x0622; t.afii57411 = 0x0623; t.afii57412 = 0x0624; t.afii57413 = 0x0625; t.afii57414 = 0x0626; t.afii57415 = 0x0627; t.afii57416 = 0x0628; t.afii57417 = 0x0629; t.afii57418 = 0x062a; t.afii57419 = 0x062b; t.afii57420 = 0x062c; t.afii57421 = 0x062d; t.afii57422 = 0x062e; t.afii57423 = 0x062f; t.afii57424 = 0x0630; t.afii57425 = 0x0631; t.afii57426 = 0x0632; t.afii57427 = 0x0633; t.afii57428 = 0x0634; t.afii57429 = 0x0635; t.afii57430 = 0x0636; t.afii57431 = 0x0637; t.afii57432 = 0x0638; t.afii57433 = 0x0639; t.afii57434 = 0x063a; t.afii57440 = 0x0640; t.afii57441 = 0x0641; t.afii57442 = 0x0642; t.afii57443 = 0x0643; t.afii57444 = 0x0644; t.afii57445 = 0x0645; t.afii57446 = 0x0646; t.afii57448 = 0x0648; t.afii57449 = 0x0649; t.afii57450 = 0x064a; t.afii57451 = 0x064b; t.afii57452 = 0x064c; t.afii57453 = 0x064d; t.afii57454 = 0x064e; t.afii57455 = 0x064f; t.afii57456 = 0x0650; t.afii57457 = 0x0651; t.afii57458 = 0x0652; t.afii57470 = 0x0647; t.afii57505 = 0x06a4; t.afii57506 = 0x067e; t.afii57507 = 0x0686; t.afii57508 = 0x0698; t.afii57509 = 0x06af; t.afii57511 = 0x0679; t.afii57512 = 0x0688; t.afii57513 = 0x0691; t.afii57514 = 0x06ba; t.afii57519 = 0x06d2; t.afii57534 = 0x06d5; t.afii57636 = 0x20aa; t.afii57645 = 0x05be; t.afii57658 = 0x05c3; t.afii57664 = 0x05d0; t.afii57665 = 0x05d1; t.afii57666 = 0x05d2; t.afii57667 = 0x05d3; t.afii57668 = 0x05d4; t.afii57669 = 0x05d5; t.afii57670 = 0x05d6; t.afii57671 = 0x05d7; t.afii57672 = 0x05d8; t.afii57673 = 0x05d9; t.afii57674 = 0x05da; t.afii57675 = 0x05db; t.afii57676 = 0x05dc; t.afii57677 = 0x05dd; t.afii57678 = 0x05de; t.afii57679 = 0x05df; t.afii57680 = 0x05e0; t.afii57681 = 0x05e1; t.afii57682 = 0x05e2; t.afii57683 = 0x05e3; t.afii57684 = 0x05e4; t.afii57685 = 0x05e5; t.afii57686 = 0x05e6; t.afii57687 = 0x05e7; t.afii57688 = 0x05e8; t.afii57689 = 0x05e9; t.afii57690 = 0x05ea; t.afii57694 = 0xfb2a; t.afii57695 = 0xfb2b; t.afii57700 = 0xfb4b; t.afii57705 = 0xfb1f; t.afii57716 = 0x05f0; t.afii57717 = 0x05f1; t.afii57718 = 0x05f2; t.afii57723 = 0xfb35; t.afii57793 = 0x05b4; t.afii57794 = 0x05b5; t.afii57795 = 0x05b6; t.afii57796 = 0x05bb; t.afii57797 = 0x05b8; t.afii57798 = 0x05b7; t.afii57799 = 0x05b0; t.afii57800 = 0x05b2; t.afii57801 = 0x05b1; t.afii57802 = 0x05b3; t.afii57803 = 0x05c2; t.afii57804 = 0x05c1; t.afii57806 = 0x05b9; t.afii57807 = 0x05bc; t.afii57839 = 0x05bd; t.afii57841 = 0x05bf; t.afii57842 = 0x05c0; t.afii57929 = 0x02bc; t.afii61248 = 0x2105; t.afii61289 = 0x2113; t.afii61352 = 0x2116; t.afii61573 = 0x202c; t.afii61574 = 0x202d; t.afii61575 = 0x202e; t.afii61664 = 0x200c; t.afii63167 = 0x066d; t.afii64937 = 0x02bd; t.agrave = 0x00e0; t.agujarati = 0x0a85; t.agurmukhi = 0x0a05; t.ahiragana = 0x3042; t.ahookabove = 0x1ea3; t.aibengali = 0x0990; t.aibopomofo = 0x311e; t.aideva = 0x0910; t.aiecyrillic = 0x04d5; t.aigujarati = 0x0a90; t.aigurmukhi = 0x0a10; t.aimatragurmukhi = 0x0a48; t.ainarabic = 0x0639; t.ainfinalarabic = 0xfeca; t.aininitialarabic = 0xfecb; t.ainmedialarabic = 0xfecc; t.ainvertedbreve = 0x0203; t.aivowelsignbengali = 0x09c8; t.aivowelsigndeva = 0x0948; t.aivowelsigngujarati = 0x0ac8; t.akatakana = 0x30a2; t.akatakanahalfwidth = 0xff71; t.akorean = 0x314f; t.alef = 0x05d0; t.alefarabic = 0x0627; t.alefdageshhebrew = 0xfb30; t.aleffinalarabic = 0xfe8e; t.alefhamzaabovearabic = 0x0623; t.alefhamzaabovefinalarabic = 0xfe84; t.alefhamzabelowarabic = 0x0625; t.alefhamzabelowfinalarabic = 0xfe88; t.alefhebrew = 0x05d0; t.aleflamedhebrew = 0xfb4f; t.alefmaddaabovearabic = 0x0622; t.alefmaddaabovefinalarabic = 0xfe82; t.alefmaksuraarabic = 0x0649; t.alefmaksurafinalarabic = 0xfef0; t.alefmaksurainitialarabic = 0xfef3; t.alefmaksuramedialarabic = 0xfef4; t.alefpatahhebrew = 0xfb2e; t.alefqamatshebrew = 0xfb2f; t.aleph = 0x2135; t.allequal = 0x224c; t.alpha = 0x03b1; t.alphatonos = 0x03ac; t.amacron = 0x0101; t.amonospace = 0xff41; t.ampersand = 0x0026; t.ampersandmonospace = 0xff06; t.ampersandsmall = 0xf726; t.amsquare = 0x33c2; t.anbopomofo = 0x3122; t.angbopomofo = 0x3124; t.angbracketleft = 0x3008; t.angbracketright = 0x3009; t.angkhankhuthai = 0x0e5a; t.angle = 0x2220; t.anglebracketleft = 0x3008; t.anglebracketleftvertical = 0xfe3f; t.anglebracketright = 0x3009; t.anglebracketrightvertical = 0xfe40; t.angleleft = 0x2329; t.angleright = 0x232a; t.angstrom = 0x212b; t.anoteleia = 0x0387; t.anudattadeva = 0x0952; t.anusvarabengali = 0x0982; t.anusvaradeva = 0x0902; t.anusvaragujarati = 0x0a82; t.aogonek = 0x0105; t.apaatosquare = 0x3300; t.aparen = 0x249c; t.apostrophearmenian = 0x055a; t.apostrophemod = 0x02bc; t.apple = 0xf8ff; t.approaches = 0x2250; t.approxequal = 0x2248; t.approxequalorimage = 0x2252; t.approximatelyequal = 0x2245; t.araeaekorean = 0x318e; t.araeakorean = 0x318d; t.arc = 0x2312; t.arighthalfring = 0x1e9a; t.aring = 0x00e5; t.aringacute = 0x01fb; t.aringbelow = 0x1e01; t.arrowboth = 0x2194; t.arrowdashdown = 0x21e3; t.arrowdashleft = 0x21e0; t.arrowdashright = 0x21e2; t.arrowdashup = 0x21e1; t.arrowdblboth = 0x21d4; t.arrowdbldown = 0x21d3; t.arrowdblleft = 0x21d0; t.arrowdblright = 0x21d2; t.arrowdblup = 0x21d1; t.arrowdown = 0x2193; t.arrowdownleft = 0x2199; t.arrowdownright = 0x2198; t.arrowdownwhite = 0x21e9; t.arrowheaddownmod = 0x02c5; t.arrowheadleftmod = 0x02c2; t.arrowheadrightmod = 0x02c3; t.arrowheadupmod = 0x02c4; t.arrowhorizex = 0xf8e7; t.arrowleft = 0x2190; t.arrowleftdbl = 0x21d0; t.arrowleftdblstroke = 0x21cd; t.arrowleftoverright = 0x21c6; t.arrowleftwhite = 0x21e6; t.arrowright = 0x2192; t.arrowrightdblstroke = 0x21cf; t.arrowrightheavy = 0x279e; t.arrowrightoverleft = 0x21c4; t.arrowrightwhite = 0x21e8; t.arrowtableft = 0x21e4; t.arrowtabright = 0x21e5; t.arrowup = 0x2191; t.arrowupdn = 0x2195; t.arrowupdnbse = 0x21a8; t.arrowupdownbase = 0x21a8; t.arrowupleft = 0x2196; t.arrowupleftofdown = 0x21c5; t.arrowupright = 0x2197; t.arrowupwhite = 0x21e7; t.arrowvertex = 0xf8e6; t.asciicircum = 0x005e; t.asciicircummonospace = 0xff3e; t.asciitilde = 0x007e; t.asciitildemonospace = 0xff5e; t.ascript = 0x0251; t.ascriptturned = 0x0252; t.asmallhiragana = 0x3041; t.asmallkatakana = 0x30a1; t.asmallkatakanahalfwidth = 0xff67; t.asterisk = 0x002a; t.asteriskaltonearabic = 0x066d; t.asteriskarabic = 0x066d; t.asteriskmath = 0x2217; t.asteriskmonospace = 0xff0a; t.asterisksmall = 0xfe61; t.asterism = 0x2042; t.asuperior = 0xf6e9; t.asymptoticallyequal = 0x2243; t.at = 0x0040; t.atilde = 0x00e3; t.atmonospace = 0xff20; t.atsmall = 0xfe6b; t.aturned = 0x0250; t.aubengali = 0x0994; t.aubopomofo = 0x3120; t.audeva = 0x0914; t.augujarati = 0x0a94; t.augurmukhi = 0x0a14; t.aulengthmarkbengali = 0x09d7; t.aumatragurmukhi = 0x0a4c; t.auvowelsignbengali = 0x09cc; t.auvowelsigndeva = 0x094c; t.auvowelsigngujarati = 0x0acc; t.avagrahadeva = 0x093d; t.aybarmenian = 0x0561; t.ayin = 0x05e2; t.ayinaltonehebrew = 0xfb20; t.ayinhebrew = 0x05e2; t.b = 0x0062; t.babengali = 0x09ac; t.backslash = 0x005c; t.backslashmonospace = 0xff3c; t.badeva = 0x092c; t.bagujarati = 0x0aac; t.bagurmukhi = 0x0a2c; t.bahiragana = 0x3070; t.bahtthai = 0x0e3f; t.bakatakana = 0x30d0; t.bar = 0x007c; t.barmonospace = 0xff5c; t.bbopomofo = 0x3105; t.bcircle = 0x24d1; t.bdotaccent = 0x1e03; t.bdotbelow = 0x1e05; t.beamedsixteenthnotes = 0x266c; t.because = 0x2235; t.becyrillic = 0x0431; t.beharabic = 0x0628; t.behfinalarabic = 0xfe90; t.behinitialarabic = 0xfe91; t.behiragana = 0x3079; t.behmedialarabic = 0xfe92; t.behmeeminitialarabic = 0xfc9f; t.behmeemisolatedarabic = 0xfc08; t.behnoonfinalarabic = 0xfc6d; t.bekatakana = 0x30d9; t.benarmenian = 0x0562; t.bet = 0x05d1; t.beta = 0x03b2; t.betasymbolgreek = 0x03d0; t.betdagesh = 0xfb31; t.betdageshhebrew = 0xfb31; t.bethebrew = 0x05d1; t.betrafehebrew = 0xfb4c; t.bhabengali = 0x09ad; t.bhadeva = 0x092d; t.bhagujarati = 0x0aad; t.bhagurmukhi = 0x0a2d; t.bhook = 0x0253; t.bihiragana = 0x3073; t.bikatakana = 0x30d3; t.bilabialclick = 0x0298; t.bindigurmukhi = 0x0a02; t.birusquare = 0x3331; t.blackcircle = 0x25cf; t.blackdiamond = 0x25c6; t.blackdownpointingtriangle = 0x25bc; t.blackleftpointingpointer = 0x25c4; t.blackleftpointingtriangle = 0x25c0; t.blacklenticularbracketleft = 0x3010; t.blacklenticularbracketleftvertical = 0xfe3b; t.blacklenticularbracketright = 0x3011; t.blacklenticularbracketrightvertical = 0xfe3c; t.blacklowerlefttriangle = 0x25e3; t.blacklowerrighttriangle = 0x25e2; t.blackrectangle = 0x25ac; t.blackrightpointingpointer = 0x25ba; t.blackrightpointingtriangle = 0x25b6; t.blacksmallsquare = 0x25aa; t.blacksmilingface = 0x263b; t.blacksquare = 0x25a0; t.blackstar = 0x2605; t.blackupperlefttriangle = 0x25e4; t.blackupperrighttriangle = 0x25e5; t.blackuppointingsmalltriangle = 0x25b4; t.blackuppointingtriangle = 0x25b2; t.blank = 0x2423; t.blinebelow = 0x1e07; t.block = 0x2588; t.bmonospace = 0xff42; t.bobaimaithai = 0x0e1a; t.bohiragana = 0x307c; t.bokatakana = 0x30dc; t.bparen = 0x249d; t.bqsquare = 0x33c3; t.braceex = 0xf8f4; t.braceleft = 0x007b; t.braceleftbt = 0xf8f3; t.braceleftmid = 0xf8f2; t.braceleftmonospace = 0xff5b; t.braceleftsmall = 0xfe5b; t.bracelefttp = 0xf8f1; t.braceleftvertical = 0xfe37; t.braceright = 0x007d; t.bracerightbt = 0xf8fe; t.bracerightmid = 0xf8fd; t.bracerightmonospace = 0xff5d; t.bracerightsmall = 0xfe5c; t.bracerighttp = 0xf8fc; t.bracerightvertical = 0xfe38; t.bracketleft = 0x005b; t.bracketleftbt = 0xf8f0; t.bracketleftex = 0xf8ef; t.bracketleftmonospace = 0xff3b; t.bracketlefttp = 0xf8ee; t.bracketright = 0x005d; t.bracketrightbt = 0xf8fb; t.bracketrightex = 0xf8fa; t.bracketrightmonospace = 0xff3d; t.bracketrighttp = 0xf8f9; t.breve = 0x02d8; t.brevebelowcmb = 0x032e; t.brevecmb = 0x0306; t.breveinvertedbelowcmb = 0x032f; t.breveinvertedcmb = 0x0311; t.breveinverteddoublecmb = 0x0361; t.bridgebelowcmb = 0x032a; t.bridgeinvertedbelowcmb = 0x033a; t.brokenbar = 0x00a6; t.bstroke = 0x0180; t.bsuperior = 0xf6ea; t.btopbar = 0x0183; t.buhiragana = 0x3076; t.bukatakana = 0x30d6; t.bullet = 0x2022; t.bulletinverse = 0x25d8; t.bulletoperator = 0x2219; t.bullseye = 0x25ce; t.c = 0x0063; t.caarmenian = 0x056e; t.cabengali = 0x099a; t.cacute = 0x0107; t.cadeva = 0x091a; t.cagujarati = 0x0a9a; t.cagurmukhi = 0x0a1a; t.calsquare = 0x3388; t.candrabindubengali = 0x0981; t.candrabinducmb = 0x0310; t.candrabindudeva = 0x0901; t.candrabindugujarati = 0x0a81; t.capslock = 0x21ea; t.careof = 0x2105; t.caron = 0x02c7; t.caronbelowcmb = 0x032c; t.caroncmb = 0x030c; t.carriagereturn = 0x21b5; t.cbopomofo = 0x3118; t.ccaron = 0x010d; t.ccedilla = 0x00e7; t.ccedillaacute = 0x1e09; t.ccircle = 0x24d2; t.ccircumflex = 0x0109; t.ccurl = 0x0255; t.cdot = 0x010b; t.cdotaccent = 0x010b; t.cdsquare = 0x33c5; t.cedilla = 0x00b8; t.cedillacmb = 0x0327; t.cent = 0x00a2; t.centigrade = 0x2103; t.centinferior = 0xf6df; t.centmonospace = 0xffe0; t.centoldstyle = 0xf7a2; t.centsuperior = 0xf6e0; t.chaarmenian = 0x0579; t.chabengali = 0x099b; t.chadeva = 0x091b; t.chagujarati = 0x0a9b; t.chagurmukhi = 0x0a1b; t.chbopomofo = 0x3114; t.cheabkhasiancyrillic = 0x04bd; t.checkmark = 0x2713; t.checyrillic = 0x0447; t.chedescenderabkhasiancyrillic = 0x04bf; t.chedescendercyrillic = 0x04b7; t.chedieresiscyrillic = 0x04f5; t.cheharmenian = 0x0573; t.chekhakassiancyrillic = 0x04cc; t.cheverticalstrokecyrillic = 0x04b9; t.chi = 0x03c7; t.chieuchacirclekorean = 0x3277; t.chieuchaparenkorean = 0x3217; t.chieuchcirclekorean = 0x3269; t.chieuchkorean = 0x314a; t.chieuchparenkorean = 0x3209; t.chochangthai = 0x0e0a; t.chochanthai = 0x0e08; t.chochingthai = 0x0e09; t.chochoethai = 0x0e0c; t.chook = 0x0188; t.cieucacirclekorean = 0x3276; t.cieucaparenkorean = 0x3216; t.cieuccirclekorean = 0x3268; t.cieuckorean = 0x3148; t.cieucparenkorean = 0x3208; t.cieucuparenkorean = 0x321c; t.circle = 0x25cb; t.circlecopyrt = 0x00a9; t.circlemultiply = 0x2297; t.circleot = 0x2299; t.circleplus = 0x2295; t.circlepostalmark = 0x3036; t.circlewithlefthalfblack = 0x25d0; t.circlewithrighthalfblack = 0x25d1; t.circumflex = 0x02c6; t.circumflexbelowcmb = 0x032d; t.circumflexcmb = 0x0302; t.clear = 0x2327; t.clickalveolar = 0x01c2; t.clickdental = 0x01c0; t.clicklateral = 0x01c1; t.clickretroflex = 0x01c3; t.club = 0x2663; t.clubsuitblack = 0x2663; t.clubsuitwhite = 0x2667; t.cmcubedsquare = 0x33a4; t.cmonospace = 0xff43; t.cmsquaredsquare = 0x33a0; t.coarmenian = 0x0581; t.colon = 0x003a; t.colonmonetary = 0x20a1; t.colonmonospace = 0xff1a; t.colonsign = 0x20a1; t.colonsmall = 0xfe55; t.colontriangularhalfmod = 0x02d1; t.colontriangularmod = 0x02d0; t.comma = 0x002c; t.commaabovecmb = 0x0313; t.commaaboverightcmb = 0x0315; t.commaaccent = 0xf6c3; t.commaarabic = 0x060c; t.commaarmenian = 0x055d; t.commainferior = 0xf6e1; t.commamonospace = 0xff0c; t.commareversedabovecmb = 0x0314; t.commareversedmod = 0x02bd; t.commasmall = 0xfe50; t.commasuperior = 0xf6e2; t.commaturnedabovecmb = 0x0312; t.commaturnedmod = 0x02bb; t.compass = 0x263c; t.congruent = 0x2245; t.contourintegral = 0x222e; t.control = 0x2303; t.controlACK = 0x0006; t.controlBEL = 0x0007; t.controlBS = 0x0008; t.controlCAN = 0x0018; t.controlCR = 0x000d; t.controlDC1 = 0x0011; t.controlDC2 = 0x0012; t.controlDC3 = 0x0013; t.controlDC4 = 0x0014; t.controlDEL = 0x007f; t.controlDLE = 0x0010; t.controlEM = 0x0019; t.controlENQ = 0x0005; t.controlEOT = 0x0004; t.controlESC = 0x001b; t.controlETB = 0x0017; t.controlETX = 0x0003; t.controlFF = 0x000c; t.controlFS = 0x001c; t.controlGS = 0x001d; t.controlHT = 0x0009; t.controlLF = 0x000a; t.controlNAK = 0x0015; t.controlNULL = 0x0000; t.controlRS = 0x001e; t.controlSI = 0x000f; t.controlSO = 0x000e; t.controlSOT = 0x0002; t.controlSTX = 0x0001; t.controlSUB = 0x001a; t.controlSYN = 0x0016; t.controlUS = 0x001f; t.controlVT = 0x000b; t.copyright = 0x00a9; t.copyrightsans = 0xf8e9; t.copyrightserif = 0xf6d9; t.cornerbracketleft = 0x300c; t.cornerbracketlefthalfwidth = 0xff62; t.cornerbracketleftvertical = 0xfe41; t.cornerbracketright = 0x300d; t.cornerbracketrighthalfwidth = 0xff63; t.cornerbracketrightvertical = 0xfe42; t.corporationsquare = 0x337f; t.cosquare = 0x33c7; t.coverkgsquare = 0x33c6; t.cparen = 0x249e; t.cruzeiro = 0x20a2; t.cstretched = 0x0297; t.curlyand = 0x22cf; t.curlyor = 0x22ce; t.currency = 0x00a4; t.cyrBreve = 0xf6d1; t.cyrFlex = 0xf6d2; t.cyrbreve = 0xf6d4; t.cyrflex = 0xf6d5; t.d = 0x0064; t.daarmenian = 0x0564; t.dabengali = 0x09a6; t.dadarabic = 0x0636; t.dadeva = 0x0926; t.dadfinalarabic = 0xfebe; t.dadinitialarabic = 0xfebf; t.dadmedialarabic = 0xfec0; t.dagesh = 0x05bc; t.dageshhebrew = 0x05bc; t.dagger = 0x2020; t.daggerdbl = 0x2021; t.dagujarati = 0x0aa6; t.dagurmukhi = 0x0a26; t.dahiragana = 0x3060; t.dakatakana = 0x30c0; t.dalarabic = 0x062f; t.dalet = 0x05d3; t.daletdagesh = 0xfb33; t.daletdageshhebrew = 0xfb33; t.dalethebrew = 0x05d3; t.dalfinalarabic = 0xfeaa; t.dammaarabic = 0x064f; t.dammalowarabic = 0x064f; t.dammatanaltonearabic = 0x064c; t.dammatanarabic = 0x064c; t.danda = 0x0964; t.dargahebrew = 0x05a7; t.dargalefthebrew = 0x05a7; t.dasiapneumatacyrilliccmb = 0x0485; t.dblGrave = 0xf6d3; t.dblanglebracketleft = 0x300a; t.dblanglebracketleftvertical = 0xfe3d; t.dblanglebracketright = 0x300b; t.dblanglebracketrightvertical = 0xfe3e; t.dblarchinvertedbelowcmb = 0x032b; t.dblarrowleft = 0x21d4; t.dblarrowright = 0x21d2; t.dbldanda = 0x0965; t.dblgrave = 0xf6d6; t.dblgravecmb = 0x030f; t.dblintegral = 0x222c; t.dbllowline = 0x2017; t.dbllowlinecmb = 0x0333; t.dbloverlinecmb = 0x033f; t.dblprimemod = 0x02ba; t.dblverticalbar = 0x2016; t.dblverticallineabovecmb = 0x030e; t.dbopomofo = 0x3109; t.dbsquare = 0x33c8; t.dcaron = 0x010f; t.dcedilla = 0x1e11; t.dcircle = 0x24d3; t.dcircumflexbelow = 0x1e13; t.dcroat = 0x0111; t.ddabengali = 0x09a1; t.ddadeva = 0x0921; t.ddagujarati = 0x0aa1; t.ddagurmukhi = 0x0a21; t.ddalarabic = 0x0688; t.ddalfinalarabic = 0xfb89; t.dddhadeva = 0x095c; t.ddhabengali = 0x09a2; t.ddhadeva = 0x0922; t.ddhagujarati = 0x0aa2; t.ddhagurmukhi = 0x0a22; t.ddotaccent = 0x1e0b; t.ddotbelow = 0x1e0d; t.decimalseparatorarabic = 0x066b; t.decimalseparatorpersian = 0x066b; t.decyrillic = 0x0434; t.degree = 0x00b0; t.dehihebrew = 0x05ad; t.dehiragana = 0x3067; t.deicoptic = 0x03ef; t.dekatakana = 0x30c7; t.deleteleft = 0x232b; t.deleteright = 0x2326; t.delta = 0x03b4; t.deltaturned = 0x018d; t.denominatorminusonenumeratorbengali = 0x09f8; t.dezh = 0x02a4; t.dhabengali = 0x09a7; t.dhadeva = 0x0927; t.dhagujarati = 0x0aa7; t.dhagurmukhi = 0x0a27; t.dhook = 0x0257; t.dialytikatonos = 0x0385; t.dialytikatonoscmb = 0x0344; t.diamond = 0x2666; t.diamondsuitwhite = 0x2662; t.dieresis = 0x00a8; t.dieresisacute = 0xf6d7; t.dieresisbelowcmb = 0x0324; t.dieresiscmb = 0x0308; t.dieresisgrave = 0xf6d8; t.dieresistonos = 0x0385; t.dihiragana = 0x3062; t.dikatakana = 0x30c2; t.dittomark = 0x3003; t.divide = 0x00f7; t.divides = 0x2223; t.divisionslash = 0x2215; t.djecyrillic = 0x0452; t.dkshade = 0x2593; t.dlinebelow = 0x1e0f; t.dlsquare = 0x3397; t.dmacron = 0x0111; t.dmonospace = 0xff44; t.dnblock = 0x2584; t.dochadathai = 0x0e0e; t.dodekthai = 0x0e14; t.dohiragana = 0x3069; t.dokatakana = 0x30c9; t.dollar = 0x0024; t.dollarinferior = 0xf6e3; t.dollarmonospace = 0xff04; t.dollaroldstyle = 0xf724; t.dollarsmall = 0xfe69; t.dollarsuperior = 0xf6e4; t.dong = 0x20ab; t.dorusquare = 0x3326; t.dotaccent = 0x02d9; t.dotaccentcmb = 0x0307; t.dotbelowcmb = 0x0323; t.dotbelowcomb = 0x0323; t.dotkatakana = 0x30fb; t.dotlessi = 0x0131; t.dotlessj = 0xf6be; t.dotlessjstrokehook = 0x0284; t.dotmath = 0x22c5; t.dottedcircle = 0x25cc; t.doubleyodpatah = 0xfb1f; t.doubleyodpatahhebrew = 0xfb1f; t.downtackbelowcmb = 0x031e; t.downtackmod = 0x02d5; t.dparen = 0x249f; t.dsuperior = 0xf6eb; t.dtail = 0x0256; t.dtopbar = 0x018c; t.duhiragana = 0x3065; t.dukatakana = 0x30c5; t.dz = 0x01f3; t.dzaltone = 0x02a3; t.dzcaron = 0x01c6; t.dzcurl = 0x02a5; t.dzeabkhasiancyrillic = 0x04e1; t.dzecyrillic = 0x0455; t.dzhecyrillic = 0x045f; t.e = 0x0065; t.eacute = 0x00e9; t.earth = 0x2641; t.ebengali = 0x098f; t.ebopomofo = 0x311c; t.ebreve = 0x0115; t.ecandradeva = 0x090d; t.ecandragujarati = 0x0a8d; t.ecandravowelsigndeva = 0x0945; t.ecandravowelsigngujarati = 0x0ac5; t.ecaron = 0x011b; t.ecedillabreve = 0x1e1d; t.echarmenian = 0x0565; t.echyiwnarmenian = 0x0587; t.ecircle = 0x24d4; t.ecircumflex = 0x00ea; t.ecircumflexacute = 0x1ebf; t.ecircumflexbelow = 0x1e19; t.ecircumflexdotbelow = 0x1ec7; t.ecircumflexgrave = 0x1ec1; t.ecircumflexhookabove = 0x1ec3; t.ecircumflextilde = 0x1ec5; t.ecyrillic = 0x0454; t.edblgrave = 0x0205; t.edeva = 0x090f; t.edieresis = 0x00eb; t.edot = 0x0117; t.edotaccent = 0x0117; t.edotbelow = 0x1eb9; t.eegurmukhi = 0x0a0f; t.eematragurmukhi = 0x0a47; t.efcyrillic = 0x0444; t.egrave = 0x00e8; t.egujarati = 0x0a8f; t.eharmenian = 0x0567; t.ehbopomofo = 0x311d; t.ehiragana = 0x3048; t.ehookabove = 0x1ebb; t.eibopomofo = 0x311f; t.eight = 0x0038; t.eightarabic = 0x0668; t.eightbengali = 0x09ee; t.eightcircle = 0x2467; t.eightcircleinversesansserif = 0x2791; t.eightdeva = 0x096e; t.eighteencircle = 0x2471; t.eighteenparen = 0x2485; t.eighteenperiod = 0x2499; t.eightgujarati = 0x0aee; t.eightgurmukhi = 0x0a6e; t.eighthackarabic = 0x0668; t.eighthangzhou = 0x3028; t.eighthnotebeamed = 0x266b; t.eightideographicparen = 0x3227; t.eightinferior = 0x2088; t.eightmonospace = 0xff18; t.eightoldstyle = 0xf738; t.eightparen = 0x247b; t.eightperiod = 0x248f; t.eightpersian = 0x06f8; t.eightroman = 0x2177; t.eightsuperior = 0x2078; t.eightthai = 0x0e58; t.einvertedbreve = 0x0207; t.eiotifiedcyrillic = 0x0465; t.ekatakana = 0x30a8; t.ekatakanahalfwidth = 0xff74; t.ekonkargurmukhi = 0x0a74; t.ekorean = 0x3154; t.elcyrillic = 0x043b; t.element = 0x2208; t.elevencircle = 0x246a; t.elevenparen = 0x247e; t.elevenperiod = 0x2492; t.elevenroman = 0x217a; t.ellipsis = 0x2026; t.ellipsisvertical = 0x22ee; t.emacron = 0x0113; t.emacronacute = 0x1e17; t.emacrongrave = 0x1e15; t.emcyrillic = 0x043c; t.emdash = 0x2014; t.emdashvertical = 0xfe31; t.emonospace = 0xff45; t.emphasismarkarmenian = 0x055b; t.emptyset = 0x2205; t.enbopomofo = 0x3123; t.encyrillic = 0x043d; t.endash = 0x2013; t.endashvertical = 0xfe32; t.endescendercyrillic = 0x04a3; t.eng = 0x014b; t.engbopomofo = 0x3125; t.enghecyrillic = 0x04a5; t.enhookcyrillic = 0x04c8; t.enspace = 0x2002; t.eogonek = 0x0119; t.eokorean = 0x3153; t.eopen = 0x025b; t.eopenclosed = 0x029a; t.eopenreversed = 0x025c; t.eopenreversedclosed = 0x025e; t.eopenreversedhook = 0x025d; t.eparen = 0x24a0; t.epsilon = 0x03b5; t.epsilontonos = 0x03ad; t.equal = 0x003d; t.equalmonospace = 0xff1d; t.equalsmall = 0xfe66; t.equalsuperior = 0x207c; t.equivalence = 0x2261; t.erbopomofo = 0x3126; t.ercyrillic = 0x0440; t.ereversed = 0x0258; t.ereversedcyrillic = 0x044d; t.escyrillic = 0x0441; t.esdescendercyrillic = 0x04ab; t.esh = 0x0283; t.eshcurl = 0x0286; t.eshortdeva = 0x090e; t.eshortvowelsigndeva = 0x0946; t.eshreversedloop = 0x01aa; t.eshsquatreversed = 0x0285; t.esmallhiragana = 0x3047; t.esmallkatakana = 0x30a7; t.esmallkatakanahalfwidth = 0xff6a; t.estimated = 0x212e; t.esuperior = 0xf6ec; t.eta = 0x03b7; t.etarmenian = 0x0568; t.etatonos = 0x03ae; t.eth = 0x00f0; t.etilde = 0x1ebd; t.etildebelow = 0x1e1b; t.etnahtafoukhhebrew = 0x0591; t.etnahtafoukhlefthebrew = 0x0591; t.etnahtahebrew = 0x0591; t.etnahtalefthebrew = 0x0591; t.eturned = 0x01dd; t.eukorean = 0x3161; t.euro = 0x20ac; t.evowelsignbengali = 0x09c7; t.evowelsigndeva = 0x0947; t.evowelsigngujarati = 0x0ac7; t.exclam = 0x0021; t.exclamarmenian = 0x055c; t.exclamdbl = 0x203c; t.exclamdown = 0x00a1; t.exclamdownsmall = 0xf7a1; t.exclammonospace = 0xff01; t.exclamsmall = 0xf721; t.existential = 0x2203; t.ezh = 0x0292; t.ezhcaron = 0x01ef; t.ezhcurl = 0x0293; t.ezhreversed = 0x01b9; t.ezhtail = 0x01ba; t.f = 0x0066; t.fadeva = 0x095e; t.fagurmukhi = 0x0a5e; t.fahrenheit = 0x2109; t.fathaarabic = 0x064e; t.fathalowarabic = 0x064e; t.fathatanarabic = 0x064b; t.fbopomofo = 0x3108; t.fcircle = 0x24d5; t.fdotaccent = 0x1e1f; t.feharabic = 0x0641; t.feharmenian = 0x0586; t.fehfinalarabic = 0xfed2; t.fehinitialarabic = 0xfed3; t.fehmedialarabic = 0xfed4; t.feicoptic = 0x03e5; t.female = 0x2640; t.ff = 0xfb00; t.f_f = 0xfb00; t.ffi = 0xfb03; t.ffl = 0xfb04; t.fi = 0xfb01; t.fifteencircle = 0x246e; t.fifteenparen = 0x2482; t.fifteenperiod = 0x2496; t.figuredash = 0x2012; t.filledbox = 0x25a0; t.filledrect = 0x25ac; t.finalkaf = 0x05da; t.finalkafdagesh = 0xfb3a; t.finalkafdageshhebrew = 0xfb3a; t.finalkafhebrew = 0x05da; t.finalmem = 0x05dd; t.finalmemhebrew = 0x05dd; t.finalnun = 0x05df; t.finalnunhebrew = 0x05df; t.finalpe = 0x05e3; t.finalpehebrew = 0x05e3; t.finaltsadi = 0x05e5; t.finaltsadihebrew = 0x05e5; t.firsttonechinese = 0x02c9; t.fisheye = 0x25c9; t.fitacyrillic = 0x0473; t.five = 0x0035; t.fivearabic = 0x0665; t.fivebengali = 0x09eb; t.fivecircle = 0x2464; t.fivecircleinversesansserif = 0x278e; t.fivedeva = 0x096b; t.fiveeighths = 0x215d; t.fivegujarati = 0x0aeb; t.fivegurmukhi = 0x0a6b; t.fivehackarabic = 0x0665; t.fivehangzhou = 0x3025; t.fiveideographicparen = 0x3224; t.fiveinferior = 0x2085; t.fivemonospace = 0xff15; t.fiveoldstyle = 0xf735; t.fiveparen = 0x2478; t.fiveperiod = 0x248c; t.fivepersian = 0x06f5; t.fiveroman = 0x2174; t.fivesuperior = 0x2075; t.fivethai = 0x0e55; t.fl = 0xfb02; t.florin = 0x0192; t.fmonospace = 0xff46; t.fmsquare = 0x3399; t.fofanthai = 0x0e1f; t.fofathai = 0x0e1d; t.fongmanthai = 0x0e4f; t.forall = 0x2200; t.four = 0x0034; t.fourarabic = 0x0664; t.fourbengali = 0x09ea; t.fourcircle = 0x2463; t.fourcircleinversesansserif = 0x278d; t.fourdeva = 0x096a; t.fourgujarati = 0x0aea; t.fourgurmukhi = 0x0a6a; t.fourhackarabic = 0x0664; t.fourhangzhou = 0x3024; t.fourideographicparen = 0x3223; t.fourinferior = 0x2084; t.fourmonospace = 0xff14; t.fournumeratorbengali = 0x09f7; t.fouroldstyle = 0xf734; t.fourparen = 0x2477; t.fourperiod = 0x248b; t.fourpersian = 0x06f4; t.fourroman = 0x2173; t.foursuperior = 0x2074; t.fourteencircle = 0x246d; t.fourteenparen = 0x2481; t.fourteenperiod = 0x2495; t.fourthai = 0x0e54; t.fourthtonechinese = 0x02cb; t.fparen = 0x24a1; t.fraction = 0x2044; t.franc = 0x20a3; t.g = 0x0067; t.gabengali = 0x0997; t.gacute = 0x01f5; t.gadeva = 0x0917; t.gafarabic = 0x06af; t.gaffinalarabic = 0xfb93; t.gafinitialarabic = 0xfb94; t.gafmedialarabic = 0xfb95; t.gagujarati = 0x0a97; t.gagurmukhi = 0x0a17; t.gahiragana = 0x304c; t.gakatakana = 0x30ac; t.gamma = 0x03b3; t.gammalatinsmall = 0x0263; t.gammasuperior = 0x02e0; t.gangiacoptic = 0x03eb; t.gbopomofo = 0x310d; t.gbreve = 0x011f; t.gcaron = 0x01e7; t.gcedilla = 0x0123; t.gcircle = 0x24d6; t.gcircumflex = 0x011d; t.gcommaaccent = 0x0123; t.gdot = 0x0121; t.gdotaccent = 0x0121; t.gecyrillic = 0x0433; t.gehiragana = 0x3052; t.gekatakana = 0x30b2; t.geometricallyequal = 0x2251; t.gereshaccenthebrew = 0x059c; t.gereshhebrew = 0x05f3; t.gereshmuqdamhebrew = 0x059d; t.germandbls = 0x00df; t.gershayimaccenthebrew = 0x059e; t.gershayimhebrew = 0x05f4; t.getamark = 0x3013; t.ghabengali = 0x0998; t.ghadarmenian = 0x0572; t.ghadeva = 0x0918; t.ghagujarati = 0x0a98; t.ghagurmukhi = 0x0a18; t.ghainarabic = 0x063a; t.ghainfinalarabic = 0xfece; t.ghaininitialarabic = 0xfecf; t.ghainmedialarabic = 0xfed0; t.ghemiddlehookcyrillic = 0x0495; t.ghestrokecyrillic = 0x0493; t.gheupturncyrillic = 0x0491; t.ghhadeva = 0x095a; t.ghhagurmukhi = 0x0a5a; t.ghook = 0x0260; t.ghzsquare = 0x3393; t.gihiragana = 0x304e; t.gikatakana = 0x30ae; t.gimarmenian = 0x0563; t.gimel = 0x05d2; t.gimeldagesh = 0xfb32; t.gimeldageshhebrew = 0xfb32; t.gimelhebrew = 0x05d2; t.gjecyrillic = 0x0453; t.glottalinvertedstroke = 0x01be; t.glottalstop = 0x0294; t.glottalstopinverted = 0x0296; t.glottalstopmod = 0x02c0; t.glottalstopreversed = 0x0295; t.glottalstopreversedmod = 0x02c1; t.glottalstopreversedsuperior = 0x02e4; t.glottalstopstroke = 0x02a1; t.glottalstopstrokereversed = 0x02a2; t.gmacron = 0x1e21; t.gmonospace = 0xff47; t.gohiragana = 0x3054; t.gokatakana = 0x30b4; t.gparen = 0x24a2; t.gpasquare = 0x33ac; t.gradient = 0x2207; t.grave = 0x0060; t.gravebelowcmb = 0x0316; t.gravecmb = 0x0300; t.gravecomb = 0x0300; t.gravedeva = 0x0953; t.gravelowmod = 0x02ce; t.gravemonospace = 0xff40; t.gravetonecmb = 0x0340; t.greater = 0x003e; t.greaterequal = 0x2265; t.greaterequalorless = 0x22db; t.greatermonospace = 0xff1e; t.greaterorequivalent = 0x2273; t.greaterorless = 0x2277; t.greateroverequal = 0x2267; t.greatersmall = 0xfe65; t.gscript = 0x0261; t.gstroke = 0x01e5; t.guhiragana = 0x3050; t.guillemotleft = 0x00ab; t.guillemotright = 0x00bb; t.guilsinglleft = 0x2039; t.guilsinglright = 0x203a; t.gukatakana = 0x30b0; t.guramusquare = 0x3318; t.gysquare = 0x33c9; t.h = 0x0068; t.haabkhasiancyrillic = 0x04a9; t.haaltonearabic = 0x06c1; t.habengali = 0x09b9; t.hadescendercyrillic = 0x04b3; t.hadeva = 0x0939; t.hagujarati = 0x0ab9; t.hagurmukhi = 0x0a39; t.haharabic = 0x062d; t.hahfinalarabic = 0xfea2; t.hahinitialarabic = 0xfea3; t.hahiragana = 0x306f; t.hahmedialarabic = 0xfea4; t.haitusquare = 0x332a; t.hakatakana = 0x30cf; t.hakatakanahalfwidth = 0xff8a; t.halantgurmukhi = 0x0a4d; t.hamzaarabic = 0x0621; t.hamzalowarabic = 0x0621; t.hangulfiller = 0x3164; t.hardsigncyrillic = 0x044a; t.harpoonleftbarbup = 0x21bc; t.harpoonrightbarbup = 0x21c0; t.hasquare = 0x33ca; t.hatafpatah = 0x05b2; t.hatafpatah16 = 0x05b2; t.hatafpatah23 = 0x05b2; t.hatafpatah2f = 0x05b2; t.hatafpatahhebrew = 0x05b2; t.hatafpatahnarrowhebrew = 0x05b2; t.hatafpatahquarterhebrew = 0x05b2; t.hatafpatahwidehebrew = 0x05b2; t.hatafqamats = 0x05b3; t.hatafqamats1b = 0x05b3; t.hatafqamats28 = 0x05b3; t.hatafqamats34 = 0x05b3; t.hatafqamatshebrew = 0x05b3; t.hatafqamatsnarrowhebrew = 0x05b3; t.hatafqamatsquarterhebrew = 0x05b3; t.hatafqamatswidehebrew = 0x05b3; t.hatafsegol = 0x05b1; t.hatafsegol17 = 0x05b1; t.hatafsegol24 = 0x05b1; t.hatafsegol30 = 0x05b1; t.hatafsegolhebrew = 0x05b1; t.hatafsegolnarrowhebrew = 0x05b1; t.hatafsegolquarterhebrew = 0x05b1; t.hatafsegolwidehebrew = 0x05b1; t.hbar = 0x0127; t.hbopomofo = 0x310f; t.hbrevebelow = 0x1e2b; t.hcedilla = 0x1e29; t.hcircle = 0x24d7; t.hcircumflex = 0x0125; t.hdieresis = 0x1e27; t.hdotaccent = 0x1e23; t.hdotbelow = 0x1e25; t.he = 0x05d4; t.heart = 0x2665; t.heartsuitblack = 0x2665; t.heartsuitwhite = 0x2661; t.hedagesh = 0xfb34; t.hedageshhebrew = 0xfb34; t.hehaltonearabic = 0x06c1; t.heharabic = 0x0647; t.hehebrew = 0x05d4; t.hehfinalaltonearabic = 0xfba7; t.hehfinalalttwoarabic = 0xfeea; t.hehfinalarabic = 0xfeea; t.hehhamzaabovefinalarabic = 0xfba5; t.hehhamzaaboveisolatedarabic = 0xfba4; t.hehinitialaltonearabic = 0xfba8; t.hehinitialarabic = 0xfeeb; t.hehiragana = 0x3078; t.hehmedialaltonearabic = 0xfba9; t.hehmedialarabic = 0xfeec; t.heiseierasquare = 0x337b; t.hekatakana = 0x30d8; t.hekatakanahalfwidth = 0xff8d; t.hekutaarusquare = 0x3336; t.henghook = 0x0267; t.herutusquare = 0x3339; t.het = 0x05d7; t.hethebrew = 0x05d7; t.hhook = 0x0266; t.hhooksuperior = 0x02b1; t.hieuhacirclekorean = 0x327b; t.hieuhaparenkorean = 0x321b; t.hieuhcirclekorean = 0x326d; t.hieuhkorean = 0x314e; t.hieuhparenkorean = 0x320d; t.hihiragana = 0x3072; t.hikatakana = 0x30d2; t.hikatakanahalfwidth = 0xff8b; t.hiriq = 0x05b4; t.hiriq14 = 0x05b4; t.hiriq21 = 0x05b4; t.hiriq2d = 0x05b4; t.hiriqhebrew = 0x05b4; t.hiriqnarrowhebrew = 0x05b4; t.hiriqquarterhebrew = 0x05b4; t.hiriqwidehebrew = 0x05b4; t.hlinebelow = 0x1e96; t.hmonospace = 0xff48; t.hoarmenian = 0x0570; t.hohipthai = 0x0e2b; t.hohiragana = 0x307b; t.hokatakana = 0x30db; t.hokatakanahalfwidth = 0xff8e; t.holam = 0x05b9; t.holam19 = 0x05b9; t.holam26 = 0x05b9; t.holam32 = 0x05b9; t.holamhebrew = 0x05b9; t.holamnarrowhebrew = 0x05b9; t.holamquarterhebrew = 0x05b9; t.holamwidehebrew = 0x05b9; t.honokhukthai = 0x0e2e; t.hookabovecomb = 0x0309; t.hookcmb = 0x0309; t.hookpalatalizedbelowcmb = 0x0321; t.hookretroflexbelowcmb = 0x0322; t.hoonsquare = 0x3342; t.horicoptic = 0x03e9; t.horizontalbar = 0x2015; t.horncmb = 0x031b; t.hotsprings = 0x2668; t.house = 0x2302; t.hparen = 0x24a3; t.hsuperior = 0x02b0; t.hturned = 0x0265; t.huhiragana = 0x3075; t.huiitosquare = 0x3333; t.hukatakana = 0x30d5; t.hukatakanahalfwidth = 0xff8c; t.hungarumlaut = 0x02dd; t.hungarumlautcmb = 0x030b; t.hv = 0x0195; t.hyphen = 0x002d; t.hypheninferior = 0xf6e5; t.hyphenmonospace = 0xff0d; t.hyphensmall = 0xfe63; t.hyphensuperior = 0xf6e6; t.hyphentwo = 0x2010; t.i = 0x0069; t.iacute = 0x00ed; t.iacyrillic = 0x044f; t.ibengali = 0x0987; t.ibopomofo = 0x3127; t.ibreve = 0x012d; t.icaron = 0x01d0; t.icircle = 0x24d8; t.icircumflex = 0x00ee; t.icyrillic = 0x0456; t.idblgrave = 0x0209; t.ideographearthcircle = 0x328f; t.ideographfirecircle = 0x328b; t.ideographicallianceparen = 0x323f; t.ideographiccallparen = 0x323a; t.ideographiccentrecircle = 0x32a5; t.ideographicclose = 0x3006; t.ideographiccomma = 0x3001; t.ideographiccommaleft = 0xff64; t.ideographiccongratulationparen = 0x3237; t.ideographiccorrectcircle = 0x32a3; t.ideographicearthparen = 0x322f; t.ideographicenterpriseparen = 0x323d; t.ideographicexcellentcircle = 0x329d; t.ideographicfestivalparen = 0x3240; t.ideographicfinancialcircle = 0x3296; t.ideographicfinancialparen = 0x3236; t.ideographicfireparen = 0x322b; t.ideographichaveparen = 0x3232; t.ideographichighcircle = 0x32a4; t.ideographiciterationmark = 0x3005; t.ideographiclaborcircle = 0x3298; t.ideographiclaborparen = 0x3238; t.ideographicleftcircle = 0x32a7; t.ideographiclowcircle = 0x32a6; t.ideographicmedicinecircle = 0x32a9; t.ideographicmetalparen = 0x322e; t.ideographicmoonparen = 0x322a; t.ideographicnameparen = 0x3234; t.ideographicperiod = 0x3002; t.ideographicprintcircle = 0x329e; t.ideographicreachparen = 0x3243; t.ideographicrepresentparen = 0x3239; t.ideographicresourceparen = 0x323e; t.ideographicrightcircle = 0x32a8; t.ideographicsecretcircle = 0x3299; t.ideographicselfparen = 0x3242; t.ideographicsocietyparen = 0x3233; t.ideographicspace = 0x3000; t.ideographicspecialparen = 0x3235; t.ideographicstockparen = 0x3231; t.ideographicstudyparen = 0x323b; t.ideographicsunparen = 0x3230; t.ideographicsuperviseparen = 0x323c; t.ideographicwaterparen = 0x322c; t.ideographicwoodparen = 0x322d; t.ideographiczero = 0x3007; t.ideographmetalcircle = 0x328e; t.ideographmooncircle = 0x328a; t.ideographnamecircle = 0x3294; t.ideographsuncircle = 0x3290; t.ideographwatercircle = 0x328c; t.ideographwoodcircle = 0x328d; t.ideva = 0x0907; t.idieresis = 0x00ef; t.idieresisacute = 0x1e2f; t.idieresiscyrillic = 0x04e5; t.idotbelow = 0x1ecb; t.iebrevecyrillic = 0x04d7; t.iecyrillic = 0x0435; t.ieungacirclekorean = 0x3275; t.ieungaparenkorean = 0x3215; t.ieungcirclekorean = 0x3267; t.ieungkorean = 0x3147; t.ieungparenkorean = 0x3207; t.igrave = 0x00ec; t.igujarati = 0x0a87; t.igurmukhi = 0x0a07; t.ihiragana = 0x3044; t.ihookabove = 0x1ec9; t.iibengali = 0x0988; t.iicyrillic = 0x0438; t.iideva = 0x0908; t.iigujarati = 0x0a88; t.iigurmukhi = 0x0a08; t.iimatragurmukhi = 0x0a40; t.iinvertedbreve = 0x020b; t.iishortcyrillic = 0x0439; t.iivowelsignbengali = 0x09c0; t.iivowelsigndeva = 0x0940; t.iivowelsigngujarati = 0x0ac0; t.ij = 0x0133; t.ikatakana = 0x30a4; t.ikatakanahalfwidth = 0xff72; t.ikorean = 0x3163; t.ilde = 0x02dc; t.iluyhebrew = 0x05ac; t.imacron = 0x012b; t.imacroncyrillic = 0x04e3; t.imageorapproximatelyequal = 0x2253; t.imatragurmukhi = 0x0a3f; t.imonospace = 0xff49; t.increment = 0x2206; t.infinity = 0x221e; t.iniarmenian = 0x056b; t.integral = 0x222b; t.integralbottom = 0x2321; t.integralbt = 0x2321; t.integralex = 0xf8f5; t.integraltop = 0x2320; t.integraltp = 0x2320; t.intersection = 0x2229; t.intisquare = 0x3305; t.invbullet = 0x25d8; t.invcircle = 0x25d9; t.invsmileface = 0x263b; t.iocyrillic = 0x0451; t.iogonek = 0x012f; t.iota = 0x03b9; t.iotadieresis = 0x03ca; t.iotadieresistonos = 0x0390; t.iotalatin = 0x0269; t.iotatonos = 0x03af; t.iparen = 0x24a4; t.irigurmukhi = 0x0a72; t.ismallhiragana = 0x3043; t.ismallkatakana = 0x30a3; t.ismallkatakanahalfwidth = 0xff68; t.issharbengali = 0x09fa; t.istroke = 0x0268; t.isuperior = 0xf6ed; t.iterationhiragana = 0x309d; t.iterationkatakana = 0x30fd; t.itilde = 0x0129; t.itildebelow = 0x1e2d; t.iubopomofo = 0x3129; t.iucyrillic = 0x044e; t.ivowelsignbengali = 0x09bf; t.ivowelsigndeva = 0x093f; t.ivowelsigngujarati = 0x0abf; t.izhitsacyrillic = 0x0475; t.izhitsadblgravecyrillic = 0x0477; t.j = 0x006a; t.jaarmenian = 0x0571; t.jabengali = 0x099c; t.jadeva = 0x091c; t.jagujarati = 0x0a9c; t.jagurmukhi = 0x0a1c; t.jbopomofo = 0x3110; t.jcaron = 0x01f0; t.jcircle = 0x24d9; t.jcircumflex = 0x0135; t.jcrossedtail = 0x029d; t.jdotlessstroke = 0x025f; t.jecyrillic = 0x0458; t.jeemarabic = 0x062c; t.jeemfinalarabic = 0xfe9e; t.jeeminitialarabic = 0xfe9f; t.jeemmedialarabic = 0xfea0; t.jeharabic = 0x0698; t.jehfinalarabic = 0xfb8b; t.jhabengali = 0x099d; t.jhadeva = 0x091d; t.jhagujarati = 0x0a9d; t.jhagurmukhi = 0x0a1d; t.jheharmenian = 0x057b; t.jis = 0x3004; t.jmonospace = 0xff4a; t.jparen = 0x24a5; t.jsuperior = 0x02b2; t.k = 0x006b; t.kabashkircyrillic = 0x04a1; t.kabengali = 0x0995; t.kacute = 0x1e31; t.kacyrillic = 0x043a; t.kadescendercyrillic = 0x049b; t.kadeva = 0x0915; t.kaf = 0x05db; t.kafarabic = 0x0643; t.kafdagesh = 0xfb3b; t.kafdageshhebrew = 0xfb3b; t.kaffinalarabic = 0xfeda; t.kafhebrew = 0x05db; t.kafinitialarabic = 0xfedb; t.kafmedialarabic = 0xfedc; t.kafrafehebrew = 0xfb4d; t.kagujarati = 0x0a95; t.kagurmukhi = 0x0a15; t.kahiragana = 0x304b; t.kahookcyrillic = 0x04c4; t.kakatakana = 0x30ab; t.kakatakanahalfwidth = 0xff76; t.kappa = 0x03ba; t.kappasymbolgreek = 0x03f0; t.kapyeounmieumkorean = 0x3171; t.kapyeounphieuphkorean = 0x3184; t.kapyeounpieupkorean = 0x3178; t.kapyeounssangpieupkorean = 0x3179; t.karoriisquare = 0x330d; t.kashidaautoarabic = 0x0640; t.kashidaautonosidebearingarabic = 0x0640; t.kasmallkatakana = 0x30f5; t.kasquare = 0x3384; t.kasraarabic = 0x0650; t.kasratanarabic = 0x064d; t.kastrokecyrillic = 0x049f; t.katahiraprolongmarkhalfwidth = 0xff70; t.kaverticalstrokecyrillic = 0x049d; t.kbopomofo = 0x310e; t.kcalsquare = 0x3389; t.kcaron = 0x01e9; t.kcedilla = 0x0137; t.kcircle = 0x24da; t.kcommaaccent = 0x0137; t.kdotbelow = 0x1e33; t.keharmenian = 0x0584; t.kehiragana = 0x3051; t.kekatakana = 0x30b1; t.kekatakanahalfwidth = 0xff79; t.kenarmenian = 0x056f; t.kesmallkatakana = 0x30f6; t.kgreenlandic = 0x0138; t.khabengali = 0x0996; t.khacyrillic = 0x0445; t.khadeva = 0x0916; t.khagujarati = 0x0a96; t.khagurmukhi = 0x0a16; t.khaharabic = 0x062e; t.khahfinalarabic = 0xfea6; t.khahinitialarabic = 0xfea7; t.khahmedialarabic = 0xfea8; t.kheicoptic = 0x03e7; t.khhadeva = 0x0959; t.khhagurmukhi = 0x0a59; t.khieukhacirclekorean = 0x3278; t.khieukhaparenkorean = 0x3218; t.khieukhcirclekorean = 0x326a; t.khieukhkorean = 0x314b; t.khieukhparenkorean = 0x320a; t.khokhaithai = 0x0e02; t.khokhonthai = 0x0e05; t.khokhuatthai = 0x0e03; t.khokhwaithai = 0x0e04; t.khomutthai = 0x0e5b; t.khook = 0x0199; t.khorakhangthai = 0x0e06; t.khzsquare = 0x3391; t.kihiragana = 0x304d; t.kikatakana = 0x30ad; t.kikatakanahalfwidth = 0xff77; t.kiroguramusquare = 0x3315; t.kiromeetorusquare = 0x3316; t.kirosquare = 0x3314; t.kiyeokacirclekorean = 0x326e; t.kiyeokaparenkorean = 0x320e; t.kiyeokcirclekorean = 0x3260; t.kiyeokkorean = 0x3131; t.kiyeokparenkorean = 0x3200; t.kiyeoksioskorean = 0x3133; t.kjecyrillic = 0x045c; t.klinebelow = 0x1e35; t.klsquare = 0x3398; t.kmcubedsquare = 0x33a6; t.kmonospace = 0xff4b; t.kmsquaredsquare = 0x33a2; t.kohiragana = 0x3053; t.kohmsquare = 0x33c0; t.kokaithai = 0x0e01; t.kokatakana = 0x30b3; t.kokatakanahalfwidth = 0xff7a; t.kooposquare = 0x331e; t.koppacyrillic = 0x0481; t.koreanstandardsymbol = 0x327f; t.koroniscmb = 0x0343; t.kparen = 0x24a6; t.kpasquare = 0x33aa; t.ksicyrillic = 0x046f; t.ktsquare = 0x33cf; t.kturned = 0x029e; t.kuhiragana = 0x304f; t.kukatakana = 0x30af; t.kukatakanahalfwidth = 0xff78; t.kvsquare = 0x33b8; t.kwsquare = 0x33be; t.l = 0x006c; t.labengali = 0x09b2; t.lacute = 0x013a; t.ladeva = 0x0932; t.lagujarati = 0x0ab2; t.lagurmukhi = 0x0a32; t.lakkhangyaothai = 0x0e45; t.lamaleffinalarabic = 0xfefc; t.lamalefhamzaabovefinalarabic = 0xfef8; t.lamalefhamzaaboveisolatedarabic = 0xfef7; t.lamalefhamzabelowfinalarabic = 0xfefa; t.lamalefhamzabelowisolatedarabic = 0xfef9; t.lamalefisolatedarabic = 0xfefb; t.lamalefmaddaabovefinalarabic = 0xfef6; t.lamalefmaddaaboveisolatedarabic = 0xfef5; t.lamarabic = 0x0644; t.lambda = 0x03bb; t.lambdastroke = 0x019b; t.lamed = 0x05dc; t.lameddagesh = 0xfb3c; t.lameddageshhebrew = 0xfb3c; t.lamedhebrew = 0x05dc; t.lamfinalarabic = 0xfede; t.lamhahinitialarabic = 0xfcca; t.laminitialarabic = 0xfedf; t.lamjeeminitialarabic = 0xfcc9; t.lamkhahinitialarabic = 0xfccb; t.lamlamhehisolatedarabic = 0xfdf2; t.lammedialarabic = 0xfee0; t.lammeemhahinitialarabic = 0xfd88; t.lammeeminitialarabic = 0xfccc; t.largecircle = 0x25ef; t.lbar = 0x019a; t.lbelt = 0x026c; t.lbopomofo = 0x310c; t.lcaron = 0x013e; t.lcedilla = 0x013c; t.lcircle = 0x24db; t.lcircumflexbelow = 0x1e3d; t.lcommaaccent = 0x013c; t.ldot = 0x0140; t.ldotaccent = 0x0140; t.ldotbelow = 0x1e37; t.ldotbelowmacron = 0x1e39; t.leftangleabovecmb = 0x031a; t.lefttackbelowcmb = 0x0318; t.less = 0x003c; t.lessequal = 0x2264; t.lessequalorgreater = 0x22da; t.lessmonospace = 0xff1c; t.lessorequivalent = 0x2272; t.lessorgreater = 0x2276; t.lessoverequal = 0x2266; t.lesssmall = 0xfe64; t.lezh = 0x026e; t.lfblock = 0x258c; t.lhookretroflex = 0x026d; t.lira = 0x20a4; t.liwnarmenian = 0x056c; t.lj = 0x01c9; t.ljecyrillic = 0x0459; t.ll = 0xf6c0; t.lladeva = 0x0933; t.llagujarati = 0x0ab3; t.llinebelow = 0x1e3b; t.llladeva = 0x0934; t.llvocalicbengali = 0x09e1; t.llvocalicdeva = 0x0961; t.llvocalicvowelsignbengali = 0x09e3; t.llvocalicvowelsigndeva = 0x0963; t.lmiddletilde = 0x026b; t.lmonospace = 0xff4c; t.lmsquare = 0x33d0; t.lochulathai = 0x0e2c; t.logicaland = 0x2227; t.logicalnot = 0x00ac; t.logicalnotreversed = 0x2310; t.logicalor = 0x2228; t.lolingthai = 0x0e25; t.longs = 0x017f; t.lowlinecenterline = 0xfe4e; t.lowlinecmb = 0x0332; t.lowlinedashed = 0xfe4d; t.lozenge = 0x25ca; t.lparen = 0x24a7; t.lslash = 0x0142; t.lsquare = 0x2113; t.lsuperior = 0xf6ee; t.ltshade = 0x2591; t.luthai = 0x0e26; t.lvocalicbengali = 0x098c; t.lvocalicdeva = 0x090c; t.lvocalicvowelsignbengali = 0x09e2; t.lvocalicvowelsigndeva = 0x0962; t.lxsquare = 0x33d3; t.m = 0x006d; t.mabengali = 0x09ae; t.macron = 0x00af; t.macronbelowcmb = 0x0331; t.macroncmb = 0x0304; t.macronlowmod = 0x02cd; t.macronmonospace = 0xffe3; t.macute = 0x1e3f; t.madeva = 0x092e; t.magujarati = 0x0aae; t.magurmukhi = 0x0a2e; t.mahapakhhebrew = 0x05a4; t.mahapakhlefthebrew = 0x05a4; t.mahiragana = 0x307e; t.maichattawalowleftthai = 0xf895; t.maichattawalowrightthai = 0xf894; t.maichattawathai = 0x0e4b; t.maichattawaupperleftthai = 0xf893; t.maieklowleftthai = 0xf88c; t.maieklowrightthai = 0xf88b; t.maiekthai = 0x0e48; t.maiekupperleftthai = 0xf88a; t.maihanakatleftthai = 0xf884; t.maihanakatthai = 0x0e31; t.maitaikhuleftthai = 0xf889; t.maitaikhuthai = 0x0e47; t.maitholowleftthai = 0xf88f; t.maitholowrightthai = 0xf88e; t.maithothai = 0x0e49; t.maithoupperleftthai = 0xf88d; t.maitrilowleftthai = 0xf892; t.maitrilowrightthai = 0xf891; t.maitrithai = 0x0e4a; t.maitriupperleftthai = 0xf890; t.maiyamokthai = 0x0e46; t.makatakana = 0x30de; t.makatakanahalfwidth = 0xff8f; t.male = 0x2642; t.mansyonsquare = 0x3347; t.maqafhebrew = 0x05be; t.mars = 0x2642; t.masoracirclehebrew = 0x05af; t.masquare = 0x3383; t.mbopomofo = 0x3107; t.mbsquare = 0x33d4; t.mcircle = 0x24dc; t.mcubedsquare = 0x33a5; t.mdotaccent = 0x1e41; t.mdotbelow = 0x1e43; t.meemarabic = 0x0645; t.meemfinalarabic = 0xfee2; t.meeminitialarabic = 0xfee3; t.meemmedialarabic = 0xfee4; t.meemmeeminitialarabic = 0xfcd1; t.meemmeemisolatedarabic = 0xfc48; t.meetorusquare = 0x334d; t.mehiragana = 0x3081; t.meizierasquare = 0x337e; t.mekatakana = 0x30e1; t.mekatakanahalfwidth = 0xff92; t.mem = 0x05de; t.memdagesh = 0xfb3e; t.memdageshhebrew = 0xfb3e; t.memhebrew = 0x05de; t.menarmenian = 0x0574; t.merkhahebrew = 0x05a5; t.merkhakefulahebrew = 0x05a6; t.merkhakefulalefthebrew = 0x05a6; t.merkhalefthebrew = 0x05a5; t.mhook = 0x0271; t.mhzsquare = 0x3392; t.middledotkatakanahalfwidth = 0xff65; t.middot = 0x00b7; t.mieumacirclekorean = 0x3272; t.mieumaparenkorean = 0x3212; t.mieumcirclekorean = 0x3264; t.mieumkorean = 0x3141; t.mieumpansioskorean = 0x3170; t.mieumparenkorean = 0x3204; t.mieumpieupkorean = 0x316e; t.mieumsioskorean = 0x316f; t.mihiragana = 0x307f; t.mikatakana = 0x30df; t.mikatakanahalfwidth = 0xff90; t.minus = 0x2212; t.minusbelowcmb = 0x0320; t.minuscircle = 0x2296; t.minusmod = 0x02d7; t.minusplus = 0x2213; t.minute = 0x2032; t.miribaarusquare = 0x334a; t.mirisquare = 0x3349; t.mlonglegturned = 0x0270; t.mlsquare = 0x3396; t.mmcubedsquare = 0x33a3; t.mmonospace = 0xff4d; t.mmsquaredsquare = 0x339f; t.mohiragana = 0x3082; t.mohmsquare = 0x33c1; t.mokatakana = 0x30e2; t.mokatakanahalfwidth = 0xff93; t.molsquare = 0x33d6; t.momathai = 0x0e21; t.moverssquare = 0x33a7; t.moverssquaredsquare = 0x33a8; t.mparen = 0x24a8; t.mpasquare = 0x33ab; t.mssquare = 0x33b3; t.msuperior = 0xf6ef; t.mturned = 0x026f; t.mu = 0x00b5; t.mu1 = 0x00b5; t.muasquare = 0x3382; t.muchgreater = 0x226b; t.muchless = 0x226a; t.mufsquare = 0x338c; t.mugreek = 0x03bc; t.mugsquare = 0x338d; t.muhiragana = 0x3080; t.mukatakana = 0x30e0; t.mukatakanahalfwidth = 0xff91; t.mulsquare = 0x3395; t.multiply = 0x00d7; t.mumsquare = 0x339b; t.munahhebrew = 0x05a3; t.munahlefthebrew = 0x05a3; t.musicalnote = 0x266a; t.musicalnotedbl = 0x266b; t.musicflatsign = 0x266d; t.musicsharpsign = 0x266f; t.mussquare = 0x33b2; t.muvsquare = 0x33b6; t.muwsquare = 0x33bc; t.mvmegasquare = 0x33b9; t.mvsquare = 0x33b7; t.mwmegasquare = 0x33bf; t.mwsquare = 0x33bd; t.n = 0x006e; t.nabengali = 0x09a8; t.nabla = 0x2207; t.nacute = 0x0144; t.nadeva = 0x0928; t.nagujarati = 0x0aa8; t.nagurmukhi = 0x0a28; t.nahiragana = 0x306a; t.nakatakana = 0x30ca; t.nakatakanahalfwidth = 0xff85; t.napostrophe = 0x0149; t.nasquare = 0x3381; t.nbopomofo = 0x310b; t.nbspace = 0x00a0; t.ncaron = 0x0148; t.ncedilla = 0x0146; t.ncircle = 0x24dd; t.ncircumflexbelow = 0x1e4b; t.ncommaaccent = 0x0146; t.ndotaccent = 0x1e45; t.ndotbelow = 0x1e47; t.nehiragana = 0x306d; t.nekatakana = 0x30cd; t.nekatakanahalfwidth = 0xff88; t.newsheqelsign = 0x20aa; t.nfsquare = 0x338b; t.ngabengali = 0x0999; t.ngadeva = 0x0919; t.ngagujarati = 0x0a99; t.ngagurmukhi = 0x0a19; t.ngonguthai = 0x0e07; t.nhiragana = 0x3093; t.nhookleft = 0x0272; t.nhookretroflex = 0x0273; t.nieunacirclekorean = 0x326f; t.nieunaparenkorean = 0x320f; t.nieuncieuckorean = 0x3135; t.nieuncirclekorean = 0x3261; t.nieunhieuhkorean = 0x3136; t.nieunkorean = 0x3134; t.nieunpansioskorean = 0x3168; t.nieunparenkorean = 0x3201; t.nieunsioskorean = 0x3167; t.nieuntikeutkorean = 0x3166; t.nihiragana = 0x306b; t.nikatakana = 0x30cb; t.nikatakanahalfwidth = 0xff86; t.nikhahitleftthai = 0xf899; t.nikhahitthai = 0x0e4d; t.nine = 0x0039; t.ninearabic = 0x0669; t.ninebengali = 0x09ef; t.ninecircle = 0x2468; t.ninecircleinversesansserif = 0x2792; t.ninedeva = 0x096f; t.ninegujarati = 0x0aef; t.ninegurmukhi = 0x0a6f; t.ninehackarabic = 0x0669; t.ninehangzhou = 0x3029; t.nineideographicparen = 0x3228; t.nineinferior = 0x2089; t.ninemonospace = 0xff19; t.nineoldstyle = 0xf739; t.nineparen = 0x247c; t.nineperiod = 0x2490; t.ninepersian = 0x06f9; t.nineroman = 0x2178; t.ninesuperior = 0x2079; t.nineteencircle = 0x2472; t.nineteenparen = 0x2486; t.nineteenperiod = 0x249a; t.ninethai = 0x0e59; t.nj = 0x01cc; t.njecyrillic = 0x045a; t.nkatakana = 0x30f3; t.nkatakanahalfwidth = 0xff9d; t.nlegrightlong = 0x019e; t.nlinebelow = 0x1e49; t.nmonospace = 0xff4e; t.nmsquare = 0x339a; t.nnabengali = 0x09a3; t.nnadeva = 0x0923; t.nnagujarati = 0x0aa3; t.nnagurmukhi = 0x0a23; t.nnnadeva = 0x0929; t.nohiragana = 0x306e; t.nokatakana = 0x30ce; t.nokatakanahalfwidth = 0xff89; t.nonbreakingspace = 0x00a0; t.nonenthai = 0x0e13; t.nonuthai = 0x0e19; t.noonarabic = 0x0646; t.noonfinalarabic = 0xfee6; t.noonghunnaarabic = 0x06ba; t.noonghunnafinalarabic = 0xfb9f; t.nooninitialarabic = 0xfee7; t.noonjeeminitialarabic = 0xfcd2; t.noonjeemisolatedarabic = 0xfc4b; t.noonmedialarabic = 0xfee8; t.noonmeeminitialarabic = 0xfcd5; t.noonmeemisolatedarabic = 0xfc4e; t.noonnoonfinalarabic = 0xfc8d; t.notcontains = 0x220c; t.notelement = 0x2209; t.notelementof = 0x2209; t.notequal = 0x2260; t.notgreater = 0x226f; t.notgreaternorequal = 0x2271; t.notgreaternorless = 0x2279; t.notidentical = 0x2262; t.notless = 0x226e; t.notlessnorequal = 0x2270; t.notparallel = 0x2226; t.notprecedes = 0x2280; t.notsubset = 0x2284; t.notsucceeds = 0x2281; t.notsuperset = 0x2285; t.nowarmenian = 0x0576; t.nparen = 0x24a9; t.nssquare = 0x33b1; t.nsuperior = 0x207f; t.ntilde = 0x00f1; t.nu = 0x03bd; t.nuhiragana = 0x306c; t.nukatakana = 0x30cc; t.nukatakanahalfwidth = 0xff87; t.nuktabengali = 0x09bc; t.nuktadeva = 0x093c; t.nuktagujarati = 0x0abc; t.nuktagurmukhi = 0x0a3c; t.numbersign = 0x0023; t.numbersignmonospace = 0xff03; t.numbersignsmall = 0xfe5f; t.numeralsigngreek = 0x0374; t.numeralsignlowergreek = 0x0375; t.numero = 0x2116; t.nun = 0x05e0; t.nundagesh = 0xfb40; t.nundageshhebrew = 0xfb40; t.nunhebrew = 0x05e0; t.nvsquare = 0x33b5; t.nwsquare = 0x33bb; t.nyabengali = 0x099e; t.nyadeva = 0x091e; t.nyagujarati = 0x0a9e; t.nyagurmukhi = 0x0a1e; t.o = 0x006f; t.oacute = 0x00f3; t.oangthai = 0x0e2d; t.obarred = 0x0275; t.obarredcyrillic = 0x04e9; t.obarreddieresiscyrillic = 0x04eb; t.obengali = 0x0993; t.obopomofo = 0x311b; t.obreve = 0x014f; t.ocandradeva = 0x0911; t.ocandragujarati = 0x0a91; t.ocandravowelsigndeva = 0x0949; t.ocandravowelsigngujarati = 0x0ac9; t.ocaron = 0x01d2; t.ocircle = 0x24de; t.ocircumflex = 0x00f4; t.ocircumflexacute = 0x1ed1; t.ocircumflexdotbelow = 0x1ed9; t.ocircumflexgrave = 0x1ed3; t.ocircumflexhookabove = 0x1ed5; t.ocircumflextilde = 0x1ed7; t.ocyrillic = 0x043e; t.odblacute = 0x0151; t.odblgrave = 0x020d; t.odeva = 0x0913; t.odieresis = 0x00f6; t.odieresiscyrillic = 0x04e7; t.odotbelow = 0x1ecd; t.oe = 0x0153; t.oekorean = 0x315a; t.ogonek = 0x02db; t.ogonekcmb = 0x0328; t.ograve = 0x00f2; t.ogujarati = 0x0a93; t.oharmenian = 0x0585; t.ohiragana = 0x304a; t.ohookabove = 0x1ecf; t.ohorn = 0x01a1; t.ohornacute = 0x1edb; t.ohorndotbelow = 0x1ee3; t.ohorngrave = 0x1edd; t.ohornhookabove = 0x1edf; t.ohorntilde = 0x1ee1; t.ohungarumlaut = 0x0151; t.oi = 0x01a3; t.oinvertedbreve = 0x020f; t.okatakana = 0x30aa; t.okatakanahalfwidth = 0xff75; t.okorean = 0x3157; t.olehebrew = 0x05ab; t.omacron = 0x014d; t.omacronacute = 0x1e53; t.omacrongrave = 0x1e51; t.omdeva = 0x0950; t.omega = 0x03c9; t.omega1 = 0x03d6; t.omegacyrillic = 0x0461; t.omegalatinclosed = 0x0277; t.omegaroundcyrillic = 0x047b; t.omegatitlocyrillic = 0x047d; t.omegatonos = 0x03ce; t.omgujarati = 0x0ad0; t.omicron = 0x03bf; t.omicrontonos = 0x03cc; t.omonospace = 0xff4f; t.one = 0x0031; t.onearabic = 0x0661; t.onebengali = 0x09e7; t.onecircle = 0x2460; t.onecircleinversesansserif = 0x278a; t.onedeva = 0x0967; t.onedotenleader = 0x2024; t.oneeighth = 0x215b; t.onefitted = 0xf6dc; t.onegujarati = 0x0ae7; t.onegurmukhi = 0x0a67; t.onehackarabic = 0x0661; t.onehalf = 0x00bd; t.onehangzhou = 0x3021; t.oneideographicparen = 0x3220; t.oneinferior = 0x2081; t.onemonospace = 0xff11; t.onenumeratorbengali = 0x09f4; t.oneoldstyle = 0xf731; t.oneparen = 0x2474; t.oneperiod = 0x2488; t.onepersian = 0x06f1; t.onequarter = 0x00bc; t.oneroman = 0x2170; t.onesuperior = 0x00b9; t.onethai = 0x0e51; t.onethird = 0x2153; t.oogonek = 0x01eb; t.oogonekmacron = 0x01ed; t.oogurmukhi = 0x0a13; t.oomatragurmukhi = 0x0a4b; t.oopen = 0x0254; t.oparen = 0x24aa; t.openbullet = 0x25e6; t.option = 0x2325; t.ordfeminine = 0x00aa; t.ordmasculine = 0x00ba; t.orthogonal = 0x221f; t.oshortdeva = 0x0912; t.oshortvowelsigndeva = 0x094a; t.oslash = 0x00f8; t.oslashacute = 0x01ff; t.osmallhiragana = 0x3049; t.osmallkatakana = 0x30a9; t.osmallkatakanahalfwidth = 0xff6b; t.ostrokeacute = 0x01ff; t.osuperior = 0xf6f0; t.otcyrillic = 0x047f; t.otilde = 0x00f5; t.otildeacute = 0x1e4d; t.otildedieresis = 0x1e4f; t.oubopomofo = 0x3121; t.overline = 0x203e; t.overlinecenterline = 0xfe4a; t.overlinecmb = 0x0305; t.overlinedashed = 0xfe49; t.overlinedblwavy = 0xfe4c; t.overlinewavy = 0xfe4b; t.overscore = 0x00af; t.ovowelsignbengali = 0x09cb; t.ovowelsigndeva = 0x094b; t.ovowelsigngujarati = 0x0acb; t.p = 0x0070; t.paampssquare = 0x3380; t.paasentosquare = 0x332b; t.pabengali = 0x09aa; t.pacute = 0x1e55; t.padeva = 0x092a; t.pagedown = 0x21df; t.pageup = 0x21de; t.pagujarati = 0x0aaa; t.pagurmukhi = 0x0a2a; t.pahiragana = 0x3071; t.paiyannoithai = 0x0e2f; t.pakatakana = 0x30d1; t.palatalizationcyrilliccmb = 0x0484; t.palochkacyrillic = 0x04c0; t.pansioskorean = 0x317f; t.paragraph = 0x00b6; t.parallel = 0x2225; t.parenleft = 0x0028; t.parenleftaltonearabic = 0xfd3e; t.parenleftbt = 0xf8ed; t.parenleftex = 0xf8ec; t.parenleftinferior = 0x208d; t.parenleftmonospace = 0xff08; t.parenleftsmall = 0xfe59; t.parenleftsuperior = 0x207d; t.parenlefttp = 0xf8eb; t.parenleftvertical = 0xfe35; t.parenright = 0x0029; t.parenrightaltonearabic = 0xfd3f; t.parenrightbt = 0xf8f8; t.parenrightex = 0xf8f7; t.parenrightinferior = 0x208e; t.parenrightmonospace = 0xff09; t.parenrightsmall = 0xfe5a; t.parenrightsuperior = 0x207e; t.parenrighttp = 0xf8f6; t.parenrightvertical = 0xfe36; t.partialdiff = 0x2202; t.paseqhebrew = 0x05c0; t.pashtahebrew = 0x0599; t.pasquare = 0x33a9; t.patah = 0x05b7; t.patah11 = 0x05b7; t.patah1d = 0x05b7; t.patah2a = 0x05b7; t.patahhebrew = 0x05b7; t.patahnarrowhebrew = 0x05b7; t.patahquarterhebrew = 0x05b7; t.patahwidehebrew = 0x05b7; t.pazerhebrew = 0x05a1; t.pbopomofo = 0x3106; t.pcircle = 0x24df; t.pdotaccent = 0x1e57; t.pe = 0x05e4; t.pecyrillic = 0x043f; t.pedagesh = 0xfb44; t.pedageshhebrew = 0xfb44; t.peezisquare = 0x333b; t.pefinaldageshhebrew = 0xfb43; t.peharabic = 0x067e; t.peharmenian = 0x057a; t.pehebrew = 0x05e4; t.pehfinalarabic = 0xfb57; t.pehinitialarabic = 0xfb58; t.pehiragana = 0x307a; t.pehmedialarabic = 0xfb59; t.pekatakana = 0x30da; t.pemiddlehookcyrillic = 0x04a7; t.perafehebrew = 0xfb4e; t.percent = 0x0025; t.percentarabic = 0x066a; t.percentmonospace = 0xff05; t.percentsmall = 0xfe6a; t.period = 0x002e; t.periodarmenian = 0x0589; t.periodcentered = 0x00b7; t.periodhalfwidth = 0xff61; t.periodinferior = 0xf6e7; t.periodmonospace = 0xff0e; t.periodsmall = 0xfe52; t.periodsuperior = 0xf6e8; t.perispomenigreekcmb = 0x0342; t.perpendicular = 0x22a5; t.perthousand = 0x2030; t.peseta = 0x20a7; t.pfsquare = 0x338a; t.phabengali = 0x09ab; t.phadeva = 0x092b; t.phagujarati = 0x0aab; t.phagurmukhi = 0x0a2b; t.phi = 0x03c6; t.phi1 = 0x03d5; t.phieuphacirclekorean = 0x327a; t.phieuphaparenkorean = 0x321a; t.phieuphcirclekorean = 0x326c; t.phieuphkorean = 0x314d; t.phieuphparenkorean = 0x320c; t.philatin = 0x0278; t.phinthuthai = 0x0e3a; t.phisymbolgreek = 0x03d5; t.phook = 0x01a5; t.phophanthai = 0x0e1e; t.phophungthai = 0x0e1c; t.phosamphaothai = 0x0e20; t.pi = 0x03c0; t.pieupacirclekorean = 0x3273; t.pieupaparenkorean = 0x3213; t.pieupcieuckorean = 0x3176; t.pieupcirclekorean = 0x3265; t.pieupkiyeokkorean = 0x3172; t.pieupkorean = 0x3142; t.pieupparenkorean = 0x3205; t.pieupsioskiyeokkorean = 0x3174; t.pieupsioskorean = 0x3144; t.pieupsiostikeutkorean = 0x3175; t.pieupthieuthkorean = 0x3177; t.pieuptikeutkorean = 0x3173; t.pihiragana = 0x3074; t.pikatakana = 0x30d4; t.pisymbolgreek = 0x03d6; t.piwrarmenian = 0x0583; t.plus = 0x002b; t.plusbelowcmb = 0x031f; t.pluscircle = 0x2295; t.plusminus = 0x00b1; t.plusmod = 0x02d6; t.plusmonospace = 0xff0b; t.plussmall = 0xfe62; t.plussuperior = 0x207a; t.pmonospace = 0xff50; t.pmsquare = 0x33d8; t.pohiragana = 0x307d; t.pointingindexdownwhite = 0x261f; t.pointingindexleftwhite = 0x261c; t.pointingindexrightwhite = 0x261e; t.pointingindexupwhite = 0x261d; t.pokatakana = 0x30dd; t.poplathai = 0x0e1b; t.postalmark = 0x3012; t.postalmarkface = 0x3020; t.pparen = 0x24ab; t.precedes = 0x227a; t.prescription = 0x211e; t.primemod = 0x02b9; t.primereversed = 0x2035; t.product = 0x220f; t.projective = 0x2305; t.prolongedkana = 0x30fc; t.propellor = 0x2318; t.propersubset = 0x2282; t.propersuperset = 0x2283; t.proportion = 0x2237; t.proportional = 0x221d; t.psi = 0x03c8; t.psicyrillic = 0x0471; t.psilipneumatacyrilliccmb = 0x0486; t.pssquare = 0x33b0; t.puhiragana = 0x3077; t.pukatakana = 0x30d7; t.pvsquare = 0x33b4; t.pwsquare = 0x33ba; t.q = 0x0071; t.qadeva = 0x0958; t.qadmahebrew = 0x05a8; t.qafarabic = 0x0642; t.qaffinalarabic = 0xfed6; t.qafinitialarabic = 0xfed7; t.qafmedialarabic = 0xfed8; t.qamats = 0x05b8; t.qamats10 = 0x05b8; t.qamats1a = 0x05b8; t.qamats1c = 0x05b8; t.qamats27 = 0x05b8; t.qamats29 = 0x05b8; t.qamats33 = 0x05b8; t.qamatsde = 0x05b8; t.qamatshebrew = 0x05b8; t.qamatsnarrowhebrew = 0x05b8; t.qamatsqatanhebrew = 0x05b8; t.qamatsqatannarrowhebrew = 0x05b8; t.qamatsqatanquarterhebrew = 0x05b8; t.qamatsqatanwidehebrew = 0x05b8; t.qamatsquarterhebrew = 0x05b8; t.qamatswidehebrew = 0x05b8; t.qarneyparahebrew = 0x059f; t.qbopomofo = 0x3111; t.qcircle = 0x24e0; t.qhook = 0x02a0; t.qmonospace = 0xff51; t.qof = 0x05e7; t.qofdagesh = 0xfb47; t.qofdageshhebrew = 0xfb47; t.qofhebrew = 0x05e7; t.qparen = 0x24ac; t.quarternote = 0x2669; t.qubuts = 0x05bb; t.qubuts18 = 0x05bb; t.qubuts25 = 0x05bb; t.qubuts31 = 0x05bb; t.qubutshebrew = 0x05bb; t.qubutsnarrowhebrew = 0x05bb; t.qubutsquarterhebrew = 0x05bb; t.qubutswidehebrew = 0x05bb; t.question = 0x003f; t.questionarabic = 0x061f; t.questionarmenian = 0x055e; t.questiondown = 0x00bf; t.questiondownsmall = 0xf7bf; t.questiongreek = 0x037e; t.questionmonospace = 0xff1f; t.questionsmall = 0xf73f; t.quotedbl = 0x0022; t.quotedblbase = 0x201e; t.quotedblleft = 0x201c; t.quotedblmonospace = 0xff02; t.quotedblprime = 0x301e; t.quotedblprimereversed = 0x301d; t.quotedblright = 0x201d; t.quoteleft = 0x2018; t.quoteleftreversed = 0x201b; t.quotereversed = 0x201b; t.quoteright = 0x2019; t.quoterightn = 0x0149; t.quotesinglbase = 0x201a; t.quotesingle = 0x0027; t.quotesinglemonospace = 0xff07; t.r = 0x0072; t.raarmenian = 0x057c; t.rabengali = 0x09b0; t.racute = 0x0155; t.radeva = 0x0930; t.radical = 0x221a; t.radicalex = 0xf8e5; t.radoverssquare = 0x33ae; t.radoverssquaredsquare = 0x33af; t.radsquare = 0x33ad; t.rafe = 0x05bf; t.rafehebrew = 0x05bf; t.ragujarati = 0x0ab0; t.ragurmukhi = 0x0a30; t.rahiragana = 0x3089; t.rakatakana = 0x30e9; t.rakatakanahalfwidth = 0xff97; t.ralowerdiagonalbengali = 0x09f1; t.ramiddlediagonalbengali = 0x09f0; t.ramshorn = 0x0264; t.ratio = 0x2236; t.rbopomofo = 0x3116; t.rcaron = 0x0159; t.rcedilla = 0x0157; t.rcircle = 0x24e1; t.rcommaaccent = 0x0157; t.rdblgrave = 0x0211; t.rdotaccent = 0x1e59; t.rdotbelow = 0x1e5b; t.rdotbelowmacron = 0x1e5d; t.referencemark = 0x203b; t.reflexsubset = 0x2286; t.reflexsuperset = 0x2287; t.registered = 0x00ae; t.registersans = 0xf8e8; t.registerserif = 0xf6da; t.reharabic = 0x0631; t.reharmenian = 0x0580; t.rehfinalarabic = 0xfeae; t.rehiragana = 0x308c; t.rekatakana = 0x30ec; t.rekatakanahalfwidth = 0xff9a; t.resh = 0x05e8; t.reshdageshhebrew = 0xfb48; t.reshhebrew = 0x05e8; t.reversedtilde = 0x223d; t.reviahebrew = 0x0597; t.reviamugrashhebrew = 0x0597; t.revlogicalnot = 0x2310; t.rfishhook = 0x027e; t.rfishhookreversed = 0x027f; t.rhabengali = 0x09dd; t.rhadeva = 0x095d; t.rho = 0x03c1; t.rhook = 0x027d; t.rhookturned = 0x027b; t.rhookturnedsuperior = 0x02b5; t.rhosymbolgreek = 0x03f1; t.rhotichookmod = 0x02de; t.rieulacirclekorean = 0x3271; t.rieulaparenkorean = 0x3211; t.rieulcirclekorean = 0x3263; t.rieulhieuhkorean = 0x3140; t.rieulkiyeokkorean = 0x313a; t.rieulkiyeoksioskorean = 0x3169; t.rieulkorean = 0x3139; t.rieulmieumkorean = 0x313b; t.rieulpansioskorean = 0x316c; t.rieulparenkorean = 0x3203; t.rieulphieuphkorean = 0x313f; t.rieulpieupkorean = 0x313c; t.rieulpieupsioskorean = 0x316b; t.rieulsioskorean = 0x313d; t.rieulthieuthkorean = 0x313e; t.rieultikeutkorean = 0x316a; t.rieulyeorinhieuhkorean = 0x316d; t.rightangle = 0x221f; t.righttackbelowcmb = 0x0319; t.righttriangle = 0x22bf; t.rihiragana = 0x308a; t.rikatakana = 0x30ea; t.rikatakanahalfwidth = 0xff98; t.ring = 0x02da; t.ringbelowcmb = 0x0325; t.ringcmb = 0x030a; t.ringhalfleft = 0x02bf; t.ringhalfleftarmenian = 0x0559; t.ringhalfleftbelowcmb = 0x031c; t.ringhalfleftcentered = 0x02d3; t.ringhalfright = 0x02be; t.ringhalfrightbelowcmb = 0x0339; t.ringhalfrightcentered = 0x02d2; t.rinvertedbreve = 0x0213; t.rittorusquare = 0x3351; t.rlinebelow = 0x1e5f; t.rlongleg = 0x027c; t.rlonglegturned = 0x027a; t.rmonospace = 0xff52; t.rohiragana = 0x308d; t.rokatakana = 0x30ed; t.rokatakanahalfwidth = 0xff9b; t.roruathai = 0x0e23; t.rparen = 0x24ad; t.rrabengali = 0x09dc; t.rradeva = 0x0931; t.rragurmukhi = 0x0a5c; t.rreharabic = 0x0691; t.rrehfinalarabic = 0xfb8d; t.rrvocalicbengali = 0x09e0; t.rrvocalicdeva = 0x0960; t.rrvocalicgujarati = 0x0ae0; t.rrvocalicvowelsignbengali = 0x09c4; t.rrvocalicvowelsigndeva = 0x0944; t.rrvocalicvowelsigngujarati = 0x0ac4; t.rsuperior = 0xf6f1; t.rtblock = 0x2590; t.rturned = 0x0279; t.rturnedsuperior = 0x02b4; t.ruhiragana = 0x308b; t.rukatakana = 0x30eb; t.rukatakanahalfwidth = 0xff99; t.rupeemarkbengali = 0x09f2; t.rupeesignbengali = 0x09f3; t.rupiah = 0xf6dd; t.ruthai = 0x0e24; t.rvocalicbengali = 0x098b; t.rvocalicdeva = 0x090b; t.rvocalicgujarati = 0x0a8b; t.rvocalicvowelsignbengali = 0x09c3; t.rvocalicvowelsigndeva = 0x0943; t.rvocalicvowelsigngujarati = 0x0ac3; t.s = 0x0073; t.sabengali = 0x09b8; t.sacute = 0x015b; t.sacutedotaccent = 0x1e65; t.sadarabic = 0x0635; t.sadeva = 0x0938; t.sadfinalarabic = 0xfeba; t.sadinitialarabic = 0xfebb; t.sadmedialarabic = 0xfebc; t.sagujarati = 0x0ab8; t.sagurmukhi = 0x0a38; t.sahiragana = 0x3055; t.sakatakana = 0x30b5; t.sakatakanahalfwidth = 0xff7b; t.sallallahoualayhewasallamarabic = 0xfdfa; t.samekh = 0x05e1; t.samekhdagesh = 0xfb41; t.samekhdageshhebrew = 0xfb41; t.samekhhebrew = 0x05e1; t.saraaathai = 0x0e32; t.saraaethai = 0x0e41; t.saraaimaimalaithai = 0x0e44; t.saraaimaimuanthai = 0x0e43; t.saraamthai = 0x0e33; t.saraathai = 0x0e30; t.saraethai = 0x0e40; t.saraiileftthai = 0xf886; t.saraiithai = 0x0e35; t.saraileftthai = 0xf885; t.saraithai = 0x0e34; t.saraothai = 0x0e42; t.saraueeleftthai = 0xf888; t.saraueethai = 0x0e37; t.saraueleftthai = 0xf887; t.sarauethai = 0x0e36; t.sarauthai = 0x0e38; t.sarauuthai = 0x0e39; t.sbopomofo = 0x3119; t.scaron = 0x0161; t.scarondotaccent = 0x1e67; t.scedilla = 0x015f; t.schwa = 0x0259; t.schwacyrillic = 0x04d9; t.schwadieresiscyrillic = 0x04db; t.schwahook = 0x025a; t.scircle = 0x24e2; t.scircumflex = 0x015d; t.scommaaccent = 0x0219; t.sdotaccent = 0x1e61; t.sdotbelow = 0x1e63; t.sdotbelowdotaccent = 0x1e69; t.seagullbelowcmb = 0x033c; t.second = 0x2033; t.secondtonechinese = 0x02ca; t.section = 0x00a7; t.seenarabic = 0x0633; t.seenfinalarabic = 0xfeb2; t.seeninitialarabic = 0xfeb3; t.seenmedialarabic = 0xfeb4; t.segol = 0x05b6; t.segol13 = 0x05b6; t.segol1f = 0x05b6; t.segol2c = 0x05b6; t.segolhebrew = 0x05b6; t.segolnarrowhebrew = 0x05b6; t.segolquarterhebrew = 0x05b6; t.segoltahebrew = 0x0592; t.segolwidehebrew = 0x05b6; t.seharmenian = 0x057d; t.sehiragana = 0x305b; t.sekatakana = 0x30bb; t.sekatakanahalfwidth = 0xff7e; t.semicolon = 0x003b; t.semicolonarabic = 0x061b; t.semicolonmonospace = 0xff1b; t.semicolonsmall = 0xfe54; t.semivoicedmarkkana = 0x309c; t.semivoicedmarkkanahalfwidth = 0xff9f; t.sentisquare = 0x3322; t.sentosquare = 0x3323; t.seven = 0x0037; t.sevenarabic = 0x0667; t.sevenbengali = 0x09ed; t.sevencircle = 0x2466; t.sevencircleinversesansserif = 0x2790; t.sevendeva = 0x096d; t.seveneighths = 0x215e; t.sevengujarati = 0x0aed; t.sevengurmukhi = 0x0a6d; t.sevenhackarabic = 0x0667; t.sevenhangzhou = 0x3027; t.sevenideographicparen = 0x3226; t.seveninferior = 0x2087; t.sevenmonospace = 0xff17; t.sevenoldstyle = 0xf737; t.sevenparen = 0x247a; t.sevenperiod = 0x248e; t.sevenpersian = 0x06f7; t.sevenroman = 0x2176; t.sevensuperior = 0x2077; t.seventeencircle = 0x2470; t.seventeenparen = 0x2484; t.seventeenperiod = 0x2498; t.seventhai = 0x0e57; t.sfthyphen = 0x00ad; t.shaarmenian = 0x0577; t.shabengali = 0x09b6; t.shacyrillic = 0x0448; t.shaddaarabic = 0x0651; t.shaddadammaarabic = 0xfc61; t.shaddadammatanarabic = 0xfc5e; t.shaddafathaarabic = 0xfc60; t.shaddakasraarabic = 0xfc62; t.shaddakasratanarabic = 0xfc5f; t.shade = 0x2592; t.shadedark = 0x2593; t.shadelight = 0x2591; t.shademedium = 0x2592; t.shadeva = 0x0936; t.shagujarati = 0x0ab6; t.shagurmukhi = 0x0a36; t.shalshelethebrew = 0x0593; t.shbopomofo = 0x3115; t.shchacyrillic = 0x0449; t.sheenarabic = 0x0634; t.sheenfinalarabic = 0xfeb6; t.sheeninitialarabic = 0xfeb7; t.sheenmedialarabic = 0xfeb8; t.sheicoptic = 0x03e3; t.sheqel = 0x20aa; t.sheqelhebrew = 0x20aa; t.sheva = 0x05b0; t.sheva115 = 0x05b0; t.sheva15 = 0x05b0; t.sheva22 = 0x05b0; t.sheva2e = 0x05b0; t.shevahebrew = 0x05b0; t.shevanarrowhebrew = 0x05b0; t.shevaquarterhebrew = 0x05b0; t.shevawidehebrew = 0x05b0; t.shhacyrillic = 0x04bb; t.shimacoptic = 0x03ed; t.shin = 0x05e9; t.shindagesh = 0xfb49; t.shindageshhebrew = 0xfb49; t.shindageshshindot = 0xfb2c; t.shindageshshindothebrew = 0xfb2c; t.shindageshsindot = 0xfb2d; t.shindageshsindothebrew = 0xfb2d; t.shindothebrew = 0x05c1; t.shinhebrew = 0x05e9; t.shinshindot = 0xfb2a; t.shinshindothebrew = 0xfb2a; t.shinsindot = 0xfb2b; t.shinsindothebrew = 0xfb2b; t.shook = 0x0282; t.sigma = 0x03c3; t.sigma1 = 0x03c2; t.sigmafinal = 0x03c2; t.sigmalunatesymbolgreek = 0x03f2; t.sihiragana = 0x3057; t.sikatakana = 0x30b7; t.sikatakanahalfwidth = 0xff7c; t.siluqhebrew = 0x05bd; t.siluqlefthebrew = 0x05bd; t.similar = 0x223c; t.sindothebrew = 0x05c2; t.siosacirclekorean = 0x3274; t.siosaparenkorean = 0x3214; t.sioscieuckorean = 0x317e; t.sioscirclekorean = 0x3266; t.sioskiyeokkorean = 0x317a; t.sioskorean = 0x3145; t.siosnieunkorean = 0x317b; t.siosparenkorean = 0x3206; t.siospieupkorean = 0x317d; t.siostikeutkorean = 0x317c; t.six = 0x0036; t.sixarabic = 0x0666; t.sixbengali = 0x09ec; t.sixcircle = 0x2465; t.sixcircleinversesansserif = 0x278f; t.sixdeva = 0x096c; t.sixgujarati = 0x0aec; t.sixgurmukhi = 0x0a6c; t.sixhackarabic = 0x0666; t.sixhangzhou = 0x3026; t.sixideographicparen = 0x3225; t.sixinferior = 0x2086; t.sixmonospace = 0xff16; t.sixoldstyle = 0xf736; t.sixparen = 0x2479; t.sixperiod = 0x248d; t.sixpersian = 0x06f6; t.sixroman = 0x2175; t.sixsuperior = 0x2076; t.sixteencircle = 0x246f; t.sixteencurrencydenominatorbengali = 0x09f9; t.sixteenparen = 0x2483; t.sixteenperiod = 0x2497; t.sixthai = 0x0e56; t.slash = 0x002f; t.slashmonospace = 0xff0f; t.slong = 0x017f; t.slongdotaccent = 0x1e9b; t.smileface = 0x263a; t.smonospace = 0xff53; t.sofpasuqhebrew = 0x05c3; t.softhyphen = 0x00ad; t.softsigncyrillic = 0x044c; t.sohiragana = 0x305d; t.sokatakana = 0x30bd; t.sokatakanahalfwidth = 0xff7f; t.soliduslongoverlaycmb = 0x0338; t.solidusshortoverlaycmb = 0x0337; t.sorusithai = 0x0e29; t.sosalathai = 0x0e28; t.sosothai = 0x0e0b; t.sosuathai = 0x0e2a; t.space = 0x0020; t.spacehackarabic = 0x0020; t.spade = 0x2660; t.spadesuitblack = 0x2660; t.spadesuitwhite = 0x2664; t.sparen = 0x24ae; t.squarebelowcmb = 0x033b; t.squarecc = 0x33c4; t.squarecm = 0x339d; t.squarediagonalcrosshatchfill = 0x25a9; t.squarehorizontalfill = 0x25a4; t.squarekg = 0x338f; t.squarekm = 0x339e; t.squarekmcapital = 0x33ce; t.squareln = 0x33d1; t.squarelog = 0x33d2; t.squaremg = 0x338e; t.squaremil = 0x33d5; t.squaremm = 0x339c; t.squaremsquared = 0x33a1; t.squareorthogonalcrosshatchfill = 0x25a6; t.squareupperlefttolowerrightfill = 0x25a7; t.squareupperrighttolowerleftfill = 0x25a8; t.squareverticalfill = 0x25a5; t.squarewhitewithsmallblack = 0x25a3; t.srsquare = 0x33db; t.ssabengali = 0x09b7; t.ssadeva = 0x0937; t.ssagujarati = 0x0ab7; t.ssangcieuckorean = 0x3149; t.ssanghieuhkorean = 0x3185; t.ssangieungkorean = 0x3180; t.ssangkiyeokkorean = 0x3132; t.ssangnieunkorean = 0x3165; t.ssangpieupkorean = 0x3143; t.ssangsioskorean = 0x3146; t.ssangtikeutkorean = 0x3138; t.ssuperior = 0xf6f2; t.sterling = 0x00a3; t.sterlingmonospace = 0xffe1; t.strokelongoverlaycmb = 0x0336; t.strokeshortoverlaycmb = 0x0335; t.subset = 0x2282; t.subsetnotequal = 0x228a; t.subsetorequal = 0x2286; t.succeeds = 0x227b; t.suchthat = 0x220b; t.suhiragana = 0x3059; t.sukatakana = 0x30b9; t.sukatakanahalfwidth = 0xff7d; t.sukunarabic = 0x0652; t.summation = 0x2211; t.sun = 0x263c; t.superset = 0x2283; t.supersetnotequal = 0x228b; t.supersetorequal = 0x2287; t.svsquare = 0x33dc; t.syouwaerasquare = 0x337c; t.t = 0x0074; t.tabengali = 0x09a4; t.tackdown = 0x22a4; t.tackleft = 0x22a3; t.tadeva = 0x0924; t.tagujarati = 0x0aa4; t.tagurmukhi = 0x0a24; t.taharabic = 0x0637; t.tahfinalarabic = 0xfec2; t.tahinitialarabic = 0xfec3; t.tahiragana = 0x305f; t.tahmedialarabic = 0xfec4; t.taisyouerasquare = 0x337d; t.takatakana = 0x30bf; t.takatakanahalfwidth = 0xff80; t.tatweelarabic = 0x0640; t.tau = 0x03c4; t.tav = 0x05ea; t.tavdages = 0xfb4a; t.tavdagesh = 0xfb4a; t.tavdageshhebrew = 0xfb4a; t.tavhebrew = 0x05ea; t.tbar = 0x0167; t.tbopomofo = 0x310a; t.tcaron = 0x0165; t.tccurl = 0x02a8; t.tcedilla = 0x0163; t.tcheharabic = 0x0686; t.tchehfinalarabic = 0xfb7b; t.tchehinitialarabic = 0xfb7c; t.tchehmedialarabic = 0xfb7d; t.tcircle = 0x24e3; t.tcircumflexbelow = 0x1e71; t.tcommaaccent = 0x0163; t.tdieresis = 0x1e97; t.tdotaccent = 0x1e6b; t.tdotbelow = 0x1e6d; t.tecyrillic = 0x0442; t.tedescendercyrillic = 0x04ad; t.teharabic = 0x062a; t.tehfinalarabic = 0xfe96; t.tehhahinitialarabic = 0xfca2; t.tehhahisolatedarabic = 0xfc0c; t.tehinitialarabic = 0xfe97; t.tehiragana = 0x3066; t.tehjeeminitialarabic = 0xfca1; t.tehjeemisolatedarabic = 0xfc0b; t.tehmarbutaarabic = 0x0629; t.tehmarbutafinalarabic = 0xfe94; t.tehmedialarabic = 0xfe98; t.tehmeeminitialarabic = 0xfca4; t.tehmeemisolatedarabic = 0xfc0e; t.tehnoonfinalarabic = 0xfc73; t.tekatakana = 0x30c6; t.tekatakanahalfwidth = 0xff83; t.telephone = 0x2121; t.telephoneblack = 0x260e; t.telishagedolahebrew = 0x05a0; t.telishaqetanahebrew = 0x05a9; t.tencircle = 0x2469; t.tenideographicparen = 0x3229; t.tenparen = 0x247d; t.tenperiod = 0x2491; t.tenroman = 0x2179; t.tesh = 0x02a7; t.tet = 0x05d8; t.tetdagesh = 0xfb38; t.tetdageshhebrew = 0xfb38; t.tethebrew = 0x05d8; t.tetsecyrillic = 0x04b5; t.tevirhebrew = 0x059b; t.tevirlefthebrew = 0x059b; t.thabengali = 0x09a5; t.thadeva = 0x0925; t.thagujarati = 0x0aa5; t.thagurmukhi = 0x0a25; t.thalarabic = 0x0630; t.thalfinalarabic = 0xfeac; t.thanthakhatlowleftthai = 0xf898; t.thanthakhatlowrightthai = 0xf897; t.thanthakhatthai = 0x0e4c; t.thanthakhatupperleftthai = 0xf896; t.theharabic = 0x062b; t.thehfinalarabic = 0xfe9a; t.thehinitialarabic = 0xfe9b; t.thehmedialarabic = 0xfe9c; t.thereexists = 0x2203; t.therefore = 0x2234; t.theta = 0x03b8; t.theta1 = 0x03d1; t.thetasymbolgreek = 0x03d1; t.thieuthacirclekorean = 0x3279; t.thieuthaparenkorean = 0x3219; t.thieuthcirclekorean = 0x326b; t.thieuthkorean = 0x314c; t.thieuthparenkorean = 0x320b; t.thirteencircle = 0x246c; t.thirteenparen = 0x2480; t.thirteenperiod = 0x2494; t.thonangmonthothai = 0x0e11; t.thook = 0x01ad; t.thophuthaothai = 0x0e12; t.thorn = 0x00fe; t.thothahanthai = 0x0e17; t.thothanthai = 0x0e10; t.thothongthai = 0x0e18; t.thothungthai = 0x0e16; t.thousandcyrillic = 0x0482; t.thousandsseparatorarabic = 0x066c; t.thousandsseparatorpersian = 0x066c; t.three = 0x0033; t.threearabic = 0x0663; t.threebengali = 0x09e9; t.threecircle = 0x2462; t.threecircleinversesansserif = 0x278c; t.threedeva = 0x0969; t.threeeighths = 0x215c; t.threegujarati = 0x0ae9; t.threegurmukhi = 0x0a69; t.threehackarabic = 0x0663; t.threehangzhou = 0x3023; t.threeideographicparen = 0x3222; t.threeinferior = 0x2083; t.threemonospace = 0xff13; t.threenumeratorbengali = 0x09f6; t.threeoldstyle = 0xf733; t.threeparen = 0x2476; t.threeperiod = 0x248a; t.threepersian = 0x06f3; t.threequarters = 0x00be; t.threequartersemdash = 0xf6de; t.threeroman = 0x2172; t.threesuperior = 0x00b3; t.threethai = 0x0e53; t.thzsquare = 0x3394; t.tihiragana = 0x3061; t.tikatakana = 0x30c1; t.tikatakanahalfwidth = 0xff81; t.tikeutacirclekorean = 0x3270; t.tikeutaparenkorean = 0x3210; t.tikeutcirclekorean = 0x3262; t.tikeutkorean = 0x3137; t.tikeutparenkorean = 0x3202; t.tilde = 0x02dc; t.tildebelowcmb = 0x0330; t.tildecmb = 0x0303; t.tildecomb = 0x0303; t.tildedoublecmb = 0x0360; t.tildeoperator = 0x223c; t.tildeoverlaycmb = 0x0334; t.tildeverticalcmb = 0x033e; t.timescircle = 0x2297; t.tipehahebrew = 0x0596; t.tipehalefthebrew = 0x0596; t.tippigurmukhi = 0x0a70; t.titlocyrilliccmb = 0x0483; t.tiwnarmenian = 0x057f; t.tlinebelow = 0x1e6f; t.tmonospace = 0xff54; t.toarmenian = 0x0569; t.tohiragana = 0x3068; t.tokatakana = 0x30c8; t.tokatakanahalfwidth = 0xff84; t.tonebarextrahighmod = 0x02e5; t.tonebarextralowmod = 0x02e9; t.tonebarhighmod = 0x02e6; t.tonebarlowmod = 0x02e8; t.tonebarmidmod = 0x02e7; t.tonefive = 0x01bd; t.tonesix = 0x0185; t.tonetwo = 0x01a8; t.tonos = 0x0384; t.tonsquare = 0x3327; t.topatakthai = 0x0e0f; t.tortoiseshellbracketleft = 0x3014; t.tortoiseshellbracketleftsmall = 0xfe5d; t.tortoiseshellbracketleftvertical = 0xfe39; t.tortoiseshellbracketright = 0x3015; t.tortoiseshellbracketrightsmall = 0xfe5e; t.tortoiseshellbracketrightvertical = 0xfe3a; t.totaothai = 0x0e15; t.tpalatalhook = 0x01ab; t.tparen = 0x24af; t.trademark = 0x2122; t.trademarksans = 0xf8ea; t.trademarkserif = 0xf6db; t.tretroflexhook = 0x0288; t.triagdn = 0x25bc; t.triaglf = 0x25c4; t.triagrt = 0x25ba; t.triagup = 0x25b2; t.ts = 0x02a6; t.tsadi = 0x05e6; t.tsadidagesh = 0xfb46; t.tsadidageshhebrew = 0xfb46; t.tsadihebrew = 0x05e6; t.tsecyrillic = 0x0446; t.tsere = 0x05b5; t.tsere12 = 0x05b5; t.tsere1e = 0x05b5; t.tsere2b = 0x05b5; t.tserehebrew = 0x05b5; t.tserenarrowhebrew = 0x05b5; t.tserequarterhebrew = 0x05b5; t.tserewidehebrew = 0x05b5; t.tshecyrillic = 0x045b; t.tsuperior = 0xf6f3; t.ttabengali = 0x099f; t.ttadeva = 0x091f; t.ttagujarati = 0x0a9f; t.ttagurmukhi = 0x0a1f; t.tteharabic = 0x0679; t.ttehfinalarabic = 0xfb67; t.ttehinitialarabic = 0xfb68; t.ttehmedialarabic = 0xfb69; t.tthabengali = 0x09a0; t.tthadeva = 0x0920; t.tthagujarati = 0x0aa0; t.tthagurmukhi = 0x0a20; t.tturned = 0x0287; t.tuhiragana = 0x3064; t.tukatakana = 0x30c4; t.tukatakanahalfwidth = 0xff82; t.tusmallhiragana = 0x3063; t.tusmallkatakana = 0x30c3; t.tusmallkatakanahalfwidth = 0xff6f; t.twelvecircle = 0x246b; t.twelveparen = 0x247f; t.twelveperiod = 0x2493; t.twelveroman = 0x217b; t.twentycircle = 0x2473; t.twentyhangzhou = 0x5344; t.twentyparen = 0x2487; t.twentyperiod = 0x249b; t.two = 0x0032; t.twoarabic = 0x0662; t.twobengali = 0x09e8; t.twocircle = 0x2461; t.twocircleinversesansserif = 0x278b; t.twodeva = 0x0968; t.twodotenleader = 0x2025; t.twodotleader = 0x2025; t.twodotleadervertical = 0xfe30; t.twogujarati = 0x0ae8; t.twogurmukhi = 0x0a68; t.twohackarabic = 0x0662; t.twohangzhou = 0x3022; t.twoideographicparen = 0x3221; t.twoinferior = 0x2082; t.twomonospace = 0xff12; t.twonumeratorbengali = 0x09f5; t.twooldstyle = 0xf732; t.twoparen = 0x2475; t.twoperiod = 0x2489; t.twopersian = 0x06f2; t.tworoman = 0x2171; t.twostroke = 0x01bb; t.twosuperior = 0x00b2; t.twothai = 0x0e52; t.twothirds = 0x2154; t.u = 0x0075; t.uacute = 0x00fa; t.ubar = 0x0289; t.ubengali = 0x0989; t.ubopomofo = 0x3128; t.ubreve = 0x016d; t.ucaron = 0x01d4; t.ucircle = 0x24e4; t.ucircumflex = 0x00fb; t.ucircumflexbelow = 0x1e77; t.ucyrillic = 0x0443; t.udattadeva = 0x0951; t.udblacute = 0x0171; t.udblgrave = 0x0215; t.udeva = 0x0909; t.udieresis = 0x00fc; t.udieresisacute = 0x01d8; t.udieresisbelow = 0x1e73; t.udieresiscaron = 0x01da; t.udieresiscyrillic = 0x04f1; t.udieresisgrave = 0x01dc; t.udieresismacron = 0x01d6; t.udotbelow = 0x1ee5; t.ugrave = 0x00f9; t.ugujarati = 0x0a89; t.ugurmukhi = 0x0a09; t.uhiragana = 0x3046; t.uhookabove = 0x1ee7; t.uhorn = 0x01b0; t.uhornacute = 0x1ee9; t.uhorndotbelow = 0x1ef1; t.uhorngrave = 0x1eeb; t.uhornhookabove = 0x1eed; t.uhorntilde = 0x1eef; t.uhungarumlaut = 0x0171; t.uhungarumlautcyrillic = 0x04f3; t.uinvertedbreve = 0x0217; t.ukatakana = 0x30a6; t.ukatakanahalfwidth = 0xff73; t.ukcyrillic = 0x0479; t.ukorean = 0x315c; t.umacron = 0x016b; t.umacroncyrillic = 0x04ef; t.umacrondieresis = 0x1e7b; t.umatragurmukhi = 0x0a41; t.umonospace = 0xff55; t.underscore = 0x005f; t.underscoredbl = 0x2017; t.underscoremonospace = 0xff3f; t.underscorevertical = 0xfe33; t.underscorewavy = 0xfe4f; t.union = 0x222a; t.universal = 0x2200; t.uogonek = 0x0173; t.uparen = 0x24b0; t.upblock = 0x2580; t.upperdothebrew = 0x05c4; t.upsilon = 0x03c5; t.upsilondieresis = 0x03cb; t.upsilondieresistonos = 0x03b0; t.upsilonlatin = 0x028a; t.upsilontonos = 0x03cd; t.uptackbelowcmb = 0x031d; t.uptackmod = 0x02d4; t.uragurmukhi = 0x0a73; t.uring = 0x016f; t.ushortcyrillic = 0x045e; t.usmallhiragana = 0x3045; t.usmallkatakana = 0x30a5; t.usmallkatakanahalfwidth = 0xff69; t.ustraightcyrillic = 0x04af; t.ustraightstrokecyrillic = 0x04b1; t.utilde = 0x0169; t.utildeacute = 0x1e79; t.utildebelow = 0x1e75; t.uubengali = 0x098a; t.uudeva = 0x090a; t.uugujarati = 0x0a8a; t.uugurmukhi = 0x0a0a; t.uumatragurmukhi = 0x0a42; t.uuvowelsignbengali = 0x09c2; t.uuvowelsigndeva = 0x0942; t.uuvowelsigngujarati = 0x0ac2; t.uvowelsignbengali = 0x09c1; t.uvowelsigndeva = 0x0941; t.uvowelsigngujarati = 0x0ac1; t.v = 0x0076; t.vadeva = 0x0935; t.vagujarati = 0x0ab5; t.vagurmukhi = 0x0a35; t.vakatakana = 0x30f7; t.vav = 0x05d5; t.vavdagesh = 0xfb35; t.vavdagesh65 = 0xfb35; t.vavdageshhebrew = 0xfb35; t.vavhebrew = 0x05d5; t.vavholam = 0xfb4b; t.vavholamhebrew = 0xfb4b; t.vavvavhebrew = 0x05f0; t.vavyodhebrew = 0x05f1; t.vcircle = 0x24e5; t.vdotbelow = 0x1e7f; t.vecyrillic = 0x0432; t.veharabic = 0x06a4; t.vehfinalarabic = 0xfb6b; t.vehinitialarabic = 0xfb6c; t.vehmedialarabic = 0xfb6d; t.vekatakana = 0x30f9; t.venus = 0x2640; t.verticalbar = 0x007c; t.verticallineabovecmb = 0x030d; t.verticallinebelowcmb = 0x0329; t.verticallinelowmod = 0x02cc; t.verticallinemod = 0x02c8; t.vewarmenian = 0x057e; t.vhook = 0x028b; t.vikatakana = 0x30f8; t.viramabengali = 0x09cd; t.viramadeva = 0x094d; t.viramagujarati = 0x0acd; t.visargabengali = 0x0983; t.visargadeva = 0x0903; t.visargagujarati = 0x0a83; t.vmonospace = 0xff56; t.voarmenian = 0x0578; t.voicediterationhiragana = 0x309e; t.voicediterationkatakana = 0x30fe; t.voicedmarkkana = 0x309b; t.voicedmarkkanahalfwidth = 0xff9e; t.vokatakana = 0x30fa; t.vparen = 0x24b1; t.vtilde = 0x1e7d; t.vturned = 0x028c; t.vuhiragana = 0x3094; t.vukatakana = 0x30f4; t.w = 0x0077; t.wacute = 0x1e83; t.waekorean = 0x3159; t.wahiragana = 0x308f; t.wakatakana = 0x30ef; t.wakatakanahalfwidth = 0xff9c; t.wakorean = 0x3158; t.wasmallhiragana = 0x308e; t.wasmallkatakana = 0x30ee; t.wattosquare = 0x3357; t.wavedash = 0x301c; t.wavyunderscorevertical = 0xfe34; t.wawarabic = 0x0648; t.wawfinalarabic = 0xfeee; t.wawhamzaabovearabic = 0x0624; t.wawhamzaabovefinalarabic = 0xfe86; t.wbsquare = 0x33dd; t.wcircle = 0x24e6; t.wcircumflex = 0x0175; t.wdieresis = 0x1e85; t.wdotaccent = 0x1e87; t.wdotbelow = 0x1e89; t.wehiragana = 0x3091; t.weierstrass = 0x2118; t.wekatakana = 0x30f1; t.wekorean = 0x315e; t.weokorean = 0x315d; t.wgrave = 0x1e81; t.whitebullet = 0x25e6; t.whitecircle = 0x25cb; t.whitecircleinverse = 0x25d9; t.whitecornerbracketleft = 0x300e; t.whitecornerbracketleftvertical = 0xfe43; t.whitecornerbracketright = 0x300f; t.whitecornerbracketrightvertical = 0xfe44; t.whitediamond = 0x25c7; t.whitediamondcontainingblacksmalldiamond = 0x25c8; t.whitedownpointingsmalltriangle = 0x25bf; t.whitedownpointingtriangle = 0x25bd; t.whiteleftpointingsmalltriangle = 0x25c3; t.whiteleftpointingtriangle = 0x25c1; t.whitelenticularbracketleft = 0x3016; t.whitelenticularbracketright = 0x3017; t.whiterightpointingsmalltriangle = 0x25b9; t.whiterightpointingtriangle = 0x25b7; t.whitesmallsquare = 0x25ab; t.whitesmilingface = 0x263a; t.whitesquare = 0x25a1; t.whitestar = 0x2606; t.whitetelephone = 0x260f; t.whitetortoiseshellbracketleft = 0x3018; t.whitetortoiseshellbracketright = 0x3019; t.whiteuppointingsmalltriangle = 0x25b5; t.whiteuppointingtriangle = 0x25b3; t.wihiragana = 0x3090; t.wikatakana = 0x30f0; t.wikorean = 0x315f; t.wmonospace = 0xff57; t.wohiragana = 0x3092; t.wokatakana = 0x30f2; t.wokatakanahalfwidth = 0xff66; t.won = 0x20a9; t.wonmonospace = 0xffe6; t.wowaenthai = 0x0e27; t.wparen = 0x24b2; t.wring = 0x1e98; t.wsuperior = 0x02b7; t.wturned = 0x028d; t.wynn = 0x01bf; t.x = 0x0078; t.xabovecmb = 0x033d; t.xbopomofo = 0x3112; t.xcircle = 0x24e7; t.xdieresis = 0x1e8d; t.xdotaccent = 0x1e8b; t.xeharmenian = 0x056d; t.xi = 0x03be; t.xmonospace = 0xff58; t.xparen = 0x24b3; t.xsuperior = 0x02e3; t.y = 0x0079; t.yaadosquare = 0x334e; t.yabengali = 0x09af; t.yacute = 0x00fd; t.yadeva = 0x092f; t.yaekorean = 0x3152; t.yagujarati = 0x0aaf; t.yagurmukhi = 0x0a2f; t.yahiragana = 0x3084; t.yakatakana = 0x30e4; t.yakatakanahalfwidth = 0xff94; t.yakorean = 0x3151; t.yamakkanthai = 0x0e4e; t.yasmallhiragana = 0x3083; t.yasmallkatakana = 0x30e3; t.yasmallkatakanahalfwidth = 0xff6c; t.yatcyrillic = 0x0463; t.ycircle = 0x24e8; t.ycircumflex = 0x0177; t.ydieresis = 0x00ff; t.ydotaccent = 0x1e8f; t.ydotbelow = 0x1ef5; t.yeharabic = 0x064a; t.yehbarreearabic = 0x06d2; t.yehbarreefinalarabic = 0xfbaf; t.yehfinalarabic = 0xfef2; t.yehhamzaabovearabic = 0x0626; t.yehhamzaabovefinalarabic = 0xfe8a; t.yehhamzaaboveinitialarabic = 0xfe8b; t.yehhamzaabovemedialarabic = 0xfe8c; t.yehinitialarabic = 0xfef3; t.yehmedialarabic = 0xfef4; t.yehmeeminitialarabic = 0xfcdd; t.yehmeemisolatedarabic = 0xfc58; t.yehnoonfinalarabic = 0xfc94; t.yehthreedotsbelowarabic = 0x06d1; t.yekorean = 0x3156; t.yen = 0x00a5; t.yenmonospace = 0xffe5; t.yeokorean = 0x3155; t.yeorinhieuhkorean = 0x3186; t.yerahbenyomohebrew = 0x05aa; t.yerahbenyomolefthebrew = 0x05aa; t.yericyrillic = 0x044b; t.yerudieresiscyrillic = 0x04f9; t.yesieungkorean = 0x3181; t.yesieungpansioskorean = 0x3183; t.yesieungsioskorean = 0x3182; t.yetivhebrew = 0x059a; t.ygrave = 0x1ef3; t.yhook = 0x01b4; t.yhookabove = 0x1ef7; t.yiarmenian = 0x0575; t.yicyrillic = 0x0457; t.yikorean = 0x3162; t.yinyang = 0x262f; t.yiwnarmenian = 0x0582; t.ymonospace = 0xff59; t.yod = 0x05d9; t.yoddagesh = 0xfb39; t.yoddageshhebrew = 0xfb39; t.yodhebrew = 0x05d9; t.yodyodhebrew = 0x05f2; t.yodyodpatahhebrew = 0xfb1f; t.yohiragana = 0x3088; t.yoikorean = 0x3189; t.yokatakana = 0x30e8; t.yokatakanahalfwidth = 0xff96; t.yokorean = 0x315b; t.yosmallhiragana = 0x3087; t.yosmallkatakana = 0x30e7; t.yosmallkatakanahalfwidth = 0xff6e; t.yotgreek = 0x03f3; t.yoyaekorean = 0x3188; t.yoyakorean = 0x3187; t.yoyakthai = 0x0e22; t.yoyingthai = 0x0e0d; t.yparen = 0x24b4; t.ypogegrammeni = 0x037a; t.ypogegrammenigreekcmb = 0x0345; t.yr = 0x01a6; t.yring = 0x1e99; t.ysuperior = 0x02b8; t.ytilde = 0x1ef9; t.yturned = 0x028e; t.yuhiragana = 0x3086; t.yuikorean = 0x318c; t.yukatakana = 0x30e6; t.yukatakanahalfwidth = 0xff95; t.yukorean = 0x3160; t.yusbigcyrillic = 0x046b; t.yusbigiotifiedcyrillic = 0x046d; t.yuslittlecyrillic = 0x0467; t.yuslittleiotifiedcyrillic = 0x0469; t.yusmallhiragana = 0x3085; t.yusmallkatakana = 0x30e5; t.yusmallkatakanahalfwidth = 0xff6d; t.yuyekorean = 0x318b; t.yuyeokorean = 0x318a; t.yyabengali = 0x09df; t.yyadeva = 0x095f; t.z = 0x007a; t.zaarmenian = 0x0566; t.zacute = 0x017a; t.zadeva = 0x095b; t.zagurmukhi = 0x0a5b; t.zaharabic = 0x0638; t.zahfinalarabic = 0xfec6; t.zahinitialarabic = 0xfec7; t.zahiragana = 0x3056; t.zahmedialarabic = 0xfec8; t.zainarabic = 0x0632; t.zainfinalarabic = 0xfeb0; t.zakatakana = 0x30b6; t.zaqefgadolhebrew = 0x0595; t.zaqefqatanhebrew = 0x0594; t.zarqahebrew = 0x0598; t.zayin = 0x05d6; t.zayindagesh = 0xfb36; t.zayindageshhebrew = 0xfb36; t.zayinhebrew = 0x05d6; t.zbopomofo = 0x3117; t.zcaron = 0x017e; t.zcircle = 0x24e9; t.zcircumflex = 0x1e91; t.zcurl = 0x0291; t.zdot = 0x017c; t.zdotaccent = 0x017c; t.zdotbelow = 0x1e93; t.zecyrillic = 0x0437; t.zedescendercyrillic = 0x0499; t.zedieresiscyrillic = 0x04df; t.zehiragana = 0x305c; t.zekatakana = 0x30bc; t.zero = 0x0030; t.zeroarabic = 0x0660; t.zerobengali = 0x09e6; t.zerodeva = 0x0966; t.zerogujarati = 0x0ae6; t.zerogurmukhi = 0x0a66; t.zerohackarabic = 0x0660; t.zeroinferior = 0x2080; t.zeromonospace = 0xff10; t.zerooldstyle = 0xf730; t.zeropersian = 0x06f0; t.zerosuperior = 0x2070; t.zerothai = 0x0e50; t.zerowidthjoiner = 0xfeff; t.zerowidthnonjoiner = 0x200c; t.zerowidthspace = 0x200b; t.zeta = 0x03b6; t.zhbopomofo = 0x3113; t.zhearmenian = 0x056a; t.zhebrevecyrillic = 0x04c2; t.zhecyrillic = 0x0436; t.zhedescendercyrillic = 0x0497; t.zhedieresiscyrillic = 0x04dd; t.zihiragana = 0x3058; t.zikatakana = 0x30b8; t.zinorhebrew = 0x05ae; t.zlinebelow = 0x1e95; t.zmonospace = 0xff5a; t.zohiragana = 0x305e; t.zokatakana = 0x30be; t.zparen = 0x24b5; t.zretroflexhook = 0x0290; t.zstroke = 0x01b6; t.zuhiragana = 0x305a; t.zukatakana = 0x30ba; t[".notdef"] = 0x0000; t.angbracketleftbig = 0x2329; t.angbracketleftBig = 0x2329; t.angbracketleftbigg = 0x2329; t.angbracketleftBigg = 0x2329; t.angbracketrightBig = 0x232a; t.angbracketrightbig = 0x232a; t.angbracketrightBigg = 0x232a; t.angbracketrightbigg = 0x232a; t.arrowhookleft = 0x21aa; t.arrowhookright = 0x21a9; t.arrowlefttophalf = 0x21bc; t.arrowleftbothalf = 0x21bd; t.arrownortheast = 0x2197; t.arrownorthwest = 0x2196; t.arrowrighttophalf = 0x21c0; t.arrowrightbothalf = 0x21c1; t.arrowsoutheast = 0x2198; t.arrowsouthwest = 0x2199; t.backslashbig = 0x2216; t.backslashBig = 0x2216; t.backslashBigg = 0x2216; t.backslashbigg = 0x2216; t.bardbl = 0x2016; t.bracehtipdownleft = 0xfe37; t.bracehtipdownright = 0xfe37; t.bracehtipupleft = 0xfe38; t.bracehtipupright = 0xfe38; t.braceleftBig = 0x007b; t.braceleftbig = 0x007b; t.braceleftbigg = 0x007b; t.braceleftBigg = 0x007b; t.bracerightBig = 0x007d; t.bracerightbig = 0x007d; t.bracerightbigg = 0x007d; t.bracerightBigg = 0x007d; t.bracketleftbig = 0x005b; t.bracketleftBig = 0x005b; t.bracketleftbigg = 0x005b; t.bracketleftBigg = 0x005b; t.bracketrightBig = 0x005d; t.bracketrightbig = 0x005d; t.bracketrightbigg = 0x005d; t.bracketrightBigg = 0x005d; t.ceilingleftbig = 0x2308; t.ceilingleftBig = 0x2308; t.ceilingleftBigg = 0x2308; t.ceilingleftbigg = 0x2308; t.ceilingrightbig = 0x2309; t.ceilingrightBig = 0x2309; t.ceilingrightbigg = 0x2309; t.ceilingrightBigg = 0x2309; t.circledotdisplay = 0x2299; t.circledottext = 0x2299; t.circlemultiplydisplay = 0x2297; t.circlemultiplytext = 0x2297; t.circleplusdisplay = 0x2295; t.circleplustext = 0x2295; t.contintegraldisplay = 0x222e; t.contintegraltext = 0x222e; t.coproductdisplay = 0x2210; t.coproducttext = 0x2210; t.floorleftBig = 0x230a; t.floorleftbig = 0x230a; t.floorleftbigg = 0x230a; t.floorleftBigg = 0x230a; t.floorrightbig = 0x230b; t.floorrightBig = 0x230b; t.floorrightBigg = 0x230b; t.floorrightbigg = 0x230b; t.hatwide = 0x0302; t.hatwider = 0x0302; t.hatwidest = 0x0302; t.intercal = 0x1d40; t.integraldisplay = 0x222b; t.integraltext = 0x222b; t.intersectiondisplay = 0x22c2; t.intersectiontext = 0x22c2; t.logicalanddisplay = 0x2227; t.logicalandtext = 0x2227; t.logicalordisplay = 0x2228; t.logicalortext = 0x2228; t.parenleftBig = 0x0028; t.parenleftbig = 0x0028; t.parenleftBigg = 0x0028; t.parenleftbigg = 0x0028; t.parenrightBig = 0x0029; t.parenrightbig = 0x0029; t.parenrightBigg = 0x0029; t.parenrightbigg = 0x0029; t.prime = 0x2032; t.productdisplay = 0x220f; t.producttext = 0x220f; t.radicalbig = 0x221a; t.radicalBig = 0x221a; t.radicalBigg = 0x221a; t.radicalbigg = 0x221a; t.radicalbt = 0x221a; t.radicaltp = 0x221a; t.radicalvertex = 0x221a; t.slashbig = 0x002f; t.slashBig = 0x002f; t.slashBigg = 0x002f; t.slashbigg = 0x002f; t.summationdisplay = 0x2211; t.summationtext = 0x2211; t.tildewide = 0x02dc; t.tildewider = 0x02dc; t.tildewidest = 0x02dc; t.uniondisplay = 0x22c3; t.unionmultidisplay = 0x228e; t.unionmultitext = 0x228e; t.unionsqdisplay = 0x2294; t.unionsqtext = 0x2294; t.uniontext = 0x22c3; t.vextenddouble = 0x2225; t.vextendsingle = 0x2223; }); var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) { t.space = 0x0020; t.a1 = 0x2701; t.a2 = 0x2702; t.a202 = 0x2703; t.a3 = 0x2704; t.a4 = 0x260e; t.a5 = 0x2706; t.a119 = 0x2707; t.a118 = 0x2708; t.a117 = 0x2709; t.a11 = 0x261b; t.a12 = 0x261e; t.a13 = 0x270c; t.a14 = 0x270d; t.a15 = 0x270e; t.a16 = 0x270f; t.a105 = 0x2710; t.a17 = 0x2711; t.a18 = 0x2712; t.a19 = 0x2713; t.a20 = 0x2714; t.a21 = 0x2715; t.a22 = 0x2716; t.a23 = 0x2717; t.a24 = 0x2718; t.a25 = 0x2719; t.a26 = 0x271a; t.a27 = 0x271b; t.a28 = 0x271c; t.a6 = 0x271d; t.a7 = 0x271e; t.a8 = 0x271f; t.a9 = 0x2720; t.a10 = 0x2721; t.a29 = 0x2722; t.a30 = 0x2723; t.a31 = 0x2724; t.a32 = 0x2725; t.a33 = 0x2726; t.a34 = 0x2727; t.a35 = 0x2605; t.a36 = 0x2729; t.a37 = 0x272a; t.a38 = 0x272b; t.a39 = 0x272c; t.a40 = 0x272d; t.a41 = 0x272e; t.a42 = 0x272f; t.a43 = 0x2730; t.a44 = 0x2731; t.a45 = 0x2732; t.a46 = 0x2733; t.a47 = 0x2734; t.a48 = 0x2735; t.a49 = 0x2736; t.a50 = 0x2737; t.a51 = 0x2738; t.a52 = 0x2739; t.a53 = 0x273a; t.a54 = 0x273b; t.a55 = 0x273c; t.a56 = 0x273d; t.a57 = 0x273e; t.a58 = 0x273f; t.a59 = 0x2740; t.a60 = 0x2741; t.a61 = 0x2742; t.a62 = 0x2743; t.a63 = 0x2744; t.a64 = 0x2745; t.a65 = 0x2746; t.a66 = 0x2747; t.a67 = 0x2748; t.a68 = 0x2749; t.a69 = 0x274a; t.a70 = 0x274b; t.a71 = 0x25cf; t.a72 = 0x274d; t.a73 = 0x25a0; t.a74 = 0x274f; t.a203 = 0x2750; t.a75 = 0x2751; t.a204 = 0x2752; t.a76 = 0x25b2; t.a77 = 0x25bc; t.a78 = 0x25c6; t.a79 = 0x2756; t.a81 = 0x25d7; t.a82 = 0x2758; t.a83 = 0x2759; t.a84 = 0x275a; t.a97 = 0x275b; t.a98 = 0x275c; t.a99 = 0x275d; t.a100 = 0x275e; t.a101 = 0x2761; t.a102 = 0x2762; t.a103 = 0x2763; t.a104 = 0x2764; t.a106 = 0x2765; t.a107 = 0x2766; t.a108 = 0x2767; t.a112 = 0x2663; t.a111 = 0x2666; t.a110 = 0x2665; t.a109 = 0x2660; t.a120 = 0x2460; t.a121 = 0x2461; t.a122 = 0x2462; t.a123 = 0x2463; t.a124 = 0x2464; t.a125 = 0x2465; t.a126 = 0x2466; t.a127 = 0x2467; t.a128 = 0x2468; t.a129 = 0x2469; t.a130 = 0x2776; t.a131 = 0x2777; t.a132 = 0x2778; t.a133 = 0x2779; t.a134 = 0x277a; t.a135 = 0x277b; t.a136 = 0x277c; t.a137 = 0x277d; t.a138 = 0x277e; t.a139 = 0x277f; t.a140 = 0x2780; t.a141 = 0x2781; t.a142 = 0x2782; t.a143 = 0x2783; t.a144 = 0x2784; t.a145 = 0x2785; t.a146 = 0x2786; t.a147 = 0x2787; t.a148 = 0x2788; t.a149 = 0x2789; t.a150 = 0x278a; t.a151 = 0x278b; t.a152 = 0x278c; t.a153 = 0x278d; t.a154 = 0x278e; t.a155 = 0x278f; t.a156 = 0x2790; t.a157 = 0x2791; t.a158 = 0x2792; t.a159 = 0x2793; t.a160 = 0x2794; t.a161 = 0x2192; t.a163 = 0x2194; t.a164 = 0x2195; t.a196 = 0x2798; t.a165 = 0x2799; t.a192 = 0x279a; t.a166 = 0x279b; t.a167 = 0x279c; t.a168 = 0x279d; t.a169 = 0x279e; t.a170 = 0x279f; t.a171 = 0x27a0; t.a172 = 0x27a1; t.a173 = 0x27a2; t.a162 = 0x27a3; t.a174 = 0x27a4; t.a175 = 0x27a5; t.a176 = 0x27a6; t.a177 = 0x27a7; t.a178 = 0x27a8; t.a179 = 0x27a9; t.a193 = 0x27aa; t.a180 = 0x27ab; t.a199 = 0x27ac; t.a181 = 0x27ad; t.a200 = 0x27ae; t.a182 = 0x27af; t.a201 = 0x27b1; t.a183 = 0x27b2; t.a184 = 0x27b3; t.a197 = 0x27b4; t.a185 = 0x27b5; t.a194 = 0x27b6; t.a198 = 0x27b7; t.a186 = 0x27b8; t.a195 = 0x27b9; t.a187 = 0x27ba; t.a188 = 0x27bb; t.a189 = 0x27bc; t.a190 = 0x27bd; t.a191 = 0x27be; t.a89 = 0x2768; t.a90 = 0x2769; t.a93 = 0x276a; t.a94 = 0x276b; t.a91 = 0x276c; t.a92 = 0x276d; t.a205 = 0x276e; t.a85 = 0x276f; t.a206 = 0x2770; t.a86 = 0x2771; t.a87 = 0x2772; t.a88 = 0x2773; t.a95 = 0x2774; t.a96 = 0x2775; t[".notdef"] = 0x0000; }); exports.getGlyphsUnicode = getGlyphsUnicode; exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode; /***/ }), /* 35 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0; var _core_utils = __w_pdfjs_require__(8); const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.ArialNarrow = "Helvetica"; t["ArialNarrow-Bold"] = "Helvetica-Bold"; t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialNarrow-Italic"] = "Helvetica-Oblique"; t.ArialBlack = "Helvetica"; t["ArialBlack-Bold"] = "Helvetica-Bold"; t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialBlack-Italic"] = "Helvetica-Oblique"; t["Arial-Black"] = "Helvetica"; t["Arial-Black-Bold"] = "Helvetica-Bold"; t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Black-Italic"] = "Helvetica-Oblique"; t.Arial = "Helvetica"; t["Arial-Bold"] = "Helvetica-Bold"; t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Italic"] = "Helvetica-Oblique"; t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; t["Arial-BoldMT"] = "Helvetica-Bold"; t["Arial-ItalicMT"] = "Helvetica-Oblique"; t.ArialMT = "Helvetica"; t["Courier-Bold"] = "Courier-Bold"; t["Courier-BoldItalic"] = "Courier-BoldOblique"; t["Courier-Italic"] = "Courier-Oblique"; t.CourierNew = "Courier"; t["CourierNew-Bold"] = "Courier-Bold"; t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; t["CourierNew-Italic"] = "Courier-Oblique"; t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; t["CourierNewPS-BoldMT"] = "Courier-Bold"; t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; t.CourierNewPSMT = "Courier"; t.Helvetica = "Helvetica"; t["Helvetica-Bold"] = "Helvetica-Bold"; t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; t["Helvetica-Italic"] = "Helvetica-Oblique"; t["Helvetica-Oblique"] = "Helvetica-Oblique"; t["Symbol-Bold"] = "Symbol"; t["Symbol-BoldItalic"] = "Symbol"; t["Symbol-Italic"] = "Symbol"; t.TimesNewRoman = "Times-Roman"; t["TimesNewRoman-Bold"] = "Times-Bold"; t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRoman-Italic"] = "Times-Italic"; t.TimesNewRomanPS = "Times-Roman"; t["TimesNewRomanPS-Bold"] = "Times-Bold"; t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; t["TimesNewRomanPS-Italic"] = "Times-Italic"; t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; t.TimesNewRomanPSMT = "Times-Roman"; t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; }); exports.getStdFontMap = getStdFontMap; const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.Calibri = "Helvetica"; t["Calibri-Bold"] = "Helvetica-Bold"; t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; t["Calibri-Italic"] = "Helvetica-Oblique"; t.CenturyGothic = "Helvetica"; t["CenturyGothic-Bold"] = "Helvetica-Bold"; t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; t["CenturyGothic-Italic"] = "Helvetica-Oblique"; t.ComicSansMS = "Comic Sans MS"; t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; t.LucidaConsole = "Courier"; t["LucidaConsole-Bold"] = "Courier-Bold"; t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; t["LucidaConsole-Italic"] = "Courier-Oblique"; t["LucidaSans-Demi"] = "Helvetica-Bold"; t["MS-Gothic"] = "MS Gothic"; t["MS-Gothic-Bold"] = "MS Gothic-Bold"; t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; t["MS-Gothic-Italic"] = "MS Gothic-Italic"; t["MS-Mincho"] = "MS Mincho"; t["MS-Mincho-Bold"] = "MS Mincho-Bold"; t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; t["MS-Mincho-Italic"] = "MS Mincho-Italic"; t["MS-PGothic"] = "MS PGothic"; t["MS-PGothic-Bold"] = "MS PGothic-Bold"; t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; t["MS-PGothic-Italic"] = "MS PGothic-Italic"; t["MS-PMincho"] = "MS PMincho"; t["MS-PMincho-Bold"] = "MS PMincho-Bold"; t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; t["MS-PMincho-Italic"] = "MS PMincho-Italic"; t.NuptialScript = "Times-Italic"; t.SegoeUISymbol = "Helvetica"; t.Wingdings = "ZapfDingbats"; t["Wingdings-Regular"] = "ZapfDingbats"; }); exports.getNonStdFontMap = getNonStdFontMap; const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t["Adobe Jenson"] = true; t["Adobe Text"] = true; t.Albertus = true; t.Aldus = true; t.Alexandria = true; t.Algerian = true; t["American Typewriter"] = true; t.Antiqua = true; t.Apex = true; t.Arno = true; t.Aster = true; t.Aurora = true; t.Baskerville = true; t.Bell = true; t.Bembo = true; t["Bembo Schoolbook"] = true; t.Benguiat = true; t["Berkeley Old Style"] = true; t["Bernhard Modern"] = true; t["Berthold City"] = true; t.Bodoni = true; t["Bauer Bodoni"] = true; t["Book Antiqua"] = true; t.Bookman = true; t["Bordeaux Roman"] = true; t["Californian FB"] = true; t.Calisto = true; t.Calvert = true; t.Capitals = true; t.Cambria = true; t.Cartier = true; t.Caslon = true; t.Catull = true; t.Centaur = true; t["Century Old Style"] = true; t["Century Schoolbook"] = true; t.Chaparral = true; t["Charis SIL"] = true; t.Cheltenham = true; t["Cholla Slab"] = true; t.Clarendon = true; t.Clearface = true; t.Cochin = true; t.Colonna = true; t["Computer Modern"] = true; t["Concrete Roman"] = true; t.Constantia = true; t["Cooper Black"] = true; t.Corona = true; t.Ecotype = true; t.Egyptienne = true; t.Elephant = true; t.Excelsior = true; t.Fairfield = true; t["FF Scala"] = true; t.Folkard = true; t.Footlight = true; t.FreeSerif = true; t["Friz Quadrata"] = true; t.Garamond = true; t.Gentium = true; t.Georgia = true; t.Gloucester = true; t["Goudy Old Style"] = true; t["Goudy Schoolbook"] = true; t["Goudy Pro Font"] = true; t.Granjon = true; t["Guardian Egyptian"] = true; t.Heather = true; t.Hercules = true; t["High Tower Text"] = true; t.Hiroshige = true; t["Hoefler Text"] = true; t["Humana Serif"] = true; t.Imprint = true; t["Ionic No. 5"] = true; t.Janson = true; t.Joanna = true; t.Korinna = true; t.Lexicon = true; t["Liberation Serif"] = true; t["Linux Libertine"] = true; t.Literaturnaya = true; t.Lucida = true; t["Lucida Bright"] = true; t.Melior = true; t.Memphis = true; t.Miller = true; t.Minion = true; t.Modern = true; t["Mona Lisa"] = true; t["Mrs Eaves"] = true; t["MS Serif"] = true; t["Museo Slab"] = true; t["New York"] = true; t["Nimbus Roman"] = true; t["NPS Rawlinson Roadway"] = true; t.NuptialScript = true; t.Palatino = true; t.Perpetua = true; t.Plantin = true; t["Plantin Schoolbook"] = true; t.Playbill = true; t["Poor Richard"] = true; t["Rawlinson Roadway"] = true; t.Renault = true; t.Requiem = true; t.Rockwell = true; t.Roman = true; t["Rotis Serif"] = true; t.Sabon = true; t.Scala = true; t.Seagull = true; t.Sistina = true; t.Souvenir = true; t.STIX = true; t["Stone Informal"] = true; t["Stone Serif"] = true; t.Sylfaen = true; t.Times = true; t.Trajan = true; t["Trinité"] = true; t["Trump Mediaeval"] = true; t.Utopia = true; t["Vale Type"] = true; t["Bitstream Vera"] = true; t["Vera Serif"] = true; t.Versailles = true; t.Wanted = true; t.Weiss = true; t["Wide Latin"] = true; t.Windsor = true; t.XITS = true; }); exports.getSerifFonts = getSerifFonts; const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t.Dingbats = true; t.Symbol = true; t.ZapfDingbats = true; }); exports.getSymbolsFonts = getSymbolsFonts; const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t[2] = 10; t[3] = 32; t[4] = 33; t[5] = 34; t[6] = 35; t[7] = 36; t[8] = 37; t[9] = 38; t[10] = 39; t[11] = 40; t[12] = 41; t[13] = 42; t[14] = 43; t[15] = 44; t[16] = 45; t[17] = 46; t[18] = 47; t[19] = 48; t[20] = 49; t[21] = 50; t[22] = 51; t[23] = 52; t[24] = 53; t[25] = 54; t[26] = 55; t[27] = 56; t[28] = 57; t[29] = 58; t[30] = 894; t[31] = 60; t[32] = 61; t[33] = 62; t[34] = 63; t[35] = 64; t[36] = 65; t[37] = 66; t[38] = 67; t[39] = 68; t[40] = 69; t[41] = 70; t[42] = 71; t[43] = 72; t[44] = 73; t[45] = 74; t[46] = 75; t[47] = 76; t[48] = 77; t[49] = 78; t[50] = 79; t[51] = 80; t[52] = 81; t[53] = 82; t[54] = 83; t[55] = 84; t[56] = 85; t[57] = 86; t[58] = 87; t[59] = 88; t[60] = 89; t[61] = 90; t[62] = 91; t[63] = 92; t[64] = 93; t[65] = 94; t[66] = 95; t[67] = 96; t[68] = 97; t[69] = 98; t[70] = 99; t[71] = 100; t[72] = 101; t[73] = 102; t[74] = 103; t[75] = 104; t[76] = 105; t[77] = 106; t[78] = 107; t[79] = 108; t[80] = 109; t[81] = 110; t[82] = 111; t[83] = 112; t[84] = 113; t[85] = 114; t[86] = 115; t[87] = 116; t[88] = 117; t[89] = 118; t[90] = 119; t[91] = 120; t[92] = 121; t[93] = 122; t[94] = 123; t[95] = 124; t[96] = 125; t[97] = 126; t[98] = 196; t[99] = 197; t[100] = 199; t[101] = 201; t[102] = 209; t[103] = 214; t[104] = 220; t[105] = 225; t[106] = 224; t[107] = 226; t[108] = 228; t[109] = 227; t[110] = 229; t[111] = 231; t[112] = 233; t[113] = 232; t[114] = 234; t[115] = 235; t[116] = 237; t[117] = 236; t[118] = 238; t[119] = 239; t[120] = 241; t[121] = 243; t[122] = 242; t[123] = 244; t[124] = 246; t[125] = 245; t[126] = 250; t[127] = 249; t[128] = 251; t[129] = 252; t[130] = 8224; t[131] = 176; t[132] = 162; t[133] = 163; t[134] = 167; t[135] = 8226; t[136] = 182; t[137] = 223; t[138] = 174; t[139] = 169; t[140] = 8482; t[141] = 180; t[142] = 168; t[143] = 8800; t[144] = 198; t[145] = 216; t[146] = 8734; t[147] = 177; t[148] = 8804; t[149] = 8805; t[150] = 165; t[151] = 181; t[152] = 8706; t[153] = 8721; t[154] = 8719; t[156] = 8747; t[157] = 170; t[158] = 186; t[159] = 8486; t[160] = 230; t[161] = 248; t[162] = 191; t[163] = 161; t[164] = 172; t[165] = 8730; t[166] = 402; t[167] = 8776; t[168] = 8710; t[169] = 171; t[170] = 187; t[171] = 8230; t[210] = 218; t[223] = 711; t[224] = 321; t[225] = 322; t[227] = 353; t[229] = 382; t[234] = 253; t[252] = 263; t[253] = 268; t[254] = 269; t[258] = 258; t[260] = 260; t[261] = 261; t[265] = 280; t[266] = 281; t[268] = 283; t[269] = 313; t[275] = 323; t[276] = 324; t[278] = 328; t[284] = 345; t[285] = 346; t[286] = 347; t[292] = 367; t[295] = 377; t[296] = 378; t[298] = 380; t[305] = 963; t[306] = 964; t[307] = 966; t[308] = 8215; t[309] = 8252; t[310] = 8319; t[311] = 8359; t[312] = 8592; t[313] = 8593; t[337] = 9552; t[493] = 1039; t[494] = 1040; t[705] = 1524; t[706] = 8362; t[710] = 64288; t[711] = 64298; t[759] = 1617; t[761] = 1776; t[763] = 1778; t[775] = 1652; t[777] = 1764; t[778] = 1780; t[779] = 1781; t[780] = 1782; t[782] = 771; t[783] = 64726; t[786] = 8363; t[788] = 8532; t[790] = 768; t[791] = 769; t[792] = 768; t[795] = 803; t[797] = 64336; t[798] = 64337; t[799] = 64342; t[800] = 64343; t[801] = 64344; t[802] = 64345; t[803] = 64362; t[804] = 64363; t[805] = 64364; t[2424] = 7821; t[2425] = 7822; t[2426] = 7823; t[2427] = 7824; t[2428] = 7825; t[2429] = 7826; t[2430] = 7827; t[2433] = 7682; t[2678] = 8045; t[2679] = 8046; t[2830] = 1552; t[2838] = 686; t[2840] = 751; t[2842] = 753; t[2843] = 754; t[2844] = 755; t[2846] = 757; t[2856] = 767; t[2857] = 848; t[2858] = 849; t[2862] = 853; t[2863] = 854; t[2864] = 855; t[2865] = 861; t[2866] = 862; t[2906] = 7460; t[2908] = 7462; t[2909] = 7463; t[2910] = 7464; t[2912] = 7466; t[2913] = 7467; t[2914] = 7468; t[2916] = 7470; t[2917] = 7471; t[2918] = 7472; t[2920] = 7474; t[2921] = 7475; t[2922] = 7476; t[2924] = 7478; t[2925] = 7479; t[2926] = 7480; t[2928] = 7482; t[2929] = 7483; t[2930] = 7484; t[2932] = 7486; t[2933] = 7487; t[2934] = 7488; t[2936] = 7490; t[2937] = 7491; t[2938] = 7492; t[2940] = 7494; t[2941] = 7495; t[2942] = 7496; t[2944] = 7498; t[2946] = 7500; t[2948] = 7502; t[2950] = 7504; t[2951] = 7505; t[2952] = 7506; t[2954] = 7508; t[2955] = 7509; t[2956] = 7510; t[2958] = 7512; t[2959] = 7513; t[2960] = 7514; t[2962] = 7516; t[2963] = 7517; t[2964] = 7518; t[2966] = 7520; t[2967] = 7521; t[2968] = 7522; t[2970] = 7524; t[2971] = 7525; t[2972] = 7526; t[2974] = 7528; t[2975] = 7529; t[2976] = 7530; t[2978] = 1537; t[2979] = 1538; t[2980] = 1539; t[2982] = 1549; t[2983] = 1551; t[2984] = 1552; t[2986] = 1554; t[2987] = 1555; t[2988] = 1556; t[2990] = 1623; t[2991] = 1624; t[2995] = 1775; t[2999] = 1791; t[3002] = 64290; t[3003] = 64291; t[3004] = 64292; t[3006] = 64294; t[3007] = 64295; t[3008] = 64296; t[3011] = 1900; t[3014] = 8223; t[3015] = 8244; t[3017] = 7532; t[3018] = 7533; t[3019] = 7534; t[3075] = 7590; t[3076] = 7591; t[3079] = 7594; t[3080] = 7595; t[3083] = 7598; t[3084] = 7599; t[3087] = 7602; t[3088] = 7603; t[3091] = 7606; t[3092] = 7607; t[3095] = 7610; t[3096] = 7611; t[3099] = 7614; t[3100] = 7615; t[3103] = 7618; t[3104] = 7619; t[3107] = 8337; t[3108] = 8338; t[3116] = 1884; t[3119] = 1885; t[3120] = 1885; t[3123] = 1886; t[3124] = 1886; t[3127] = 1887; t[3128] = 1887; t[3131] = 1888; t[3132] = 1888; t[3135] = 1889; t[3136] = 1889; t[3139] = 1890; t[3140] = 1890; t[3143] = 1891; t[3144] = 1891; t[3147] = 1892; t[3148] = 1892; t[3153] = 580; t[3154] = 581; t[3157] = 584; t[3158] = 585; t[3161] = 588; t[3162] = 589; t[3165] = 891; t[3166] = 892; t[3169] = 1274; t[3170] = 1275; t[3173] = 1278; t[3174] = 1279; t[3181] = 7622; t[3182] = 7623; t[3282] = 11799; t[3316] = 578; t[3379] = 42785; t[3393] = 1159; t[3416] = 8377; }); exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { t[227] = 322; t[264] = 261; t[291] = 346; }); exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { t[1] = 32; t[4] = 65; t[17] = 66; t[18] = 67; t[24] = 68; t[28] = 69; t[38] = 70; t[39] = 71; t[44] = 72; t[47] = 73; t[58] = 74; t[60] = 75; t[62] = 76; t[68] = 77; t[69] = 78; t[75] = 79; t[87] = 80; t[89] = 81; t[90] = 82; t[94] = 83; t[100] = 84; t[104] = 85; t[115] = 86; t[116] = 87; t[121] = 88; t[122] = 89; t[127] = 90; t[258] = 97; t[268] = 261; t[271] = 98; t[272] = 99; t[273] = 263; t[282] = 100; t[286] = 101; t[295] = 281; t[296] = 102; t[336] = 103; t[346] = 104; t[349] = 105; t[361] = 106; t[364] = 107; t[367] = 108; t[371] = 322; t[373] = 109; t[374] = 110; t[381] = 111; t[383] = 243; t[393] = 112; t[395] = 113; t[396] = 114; t[400] = 115; t[401] = 347; t[410] = 116; t[437] = 117; t[448] = 118; t[449] = 119; t[454] = 120; t[455] = 121; t[460] = 122; t[463] = 380; t[853] = 44; t[855] = 58; t[856] = 46; t[876] = 47; t[878] = 45; t[882] = 45; t[894] = 40; t[895] = 41; t[896] = 91; t[897] = 93; t[923] = 64; t[1004] = 48; t[1005] = 49; t[1006] = 50; t[1007] = 51; t[1008] = 52; t[1009] = 53; t[1010] = 54; t[1011] = 55; t[1012] = 56; t[1013] = 57; t[1081] = 37; t[1085] = 43; t[1086] = 45; }); exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; /***/ }), /* 36 */ /***/ (function(module, exports, __w_pdfjs_require__) { var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory; var getSpecialPUASymbols = getLookupTableFactory(function (t) { t[63721] = 0x00a9; t[63193] = 0x00a9; t[63720] = 0x00ae; t[63194] = 0x00ae; t[63722] = 0x2122; t[63195] = 0x2122; t[63729] = 0x23a7; t[63730] = 0x23a8; t[63731] = 0x23a9; t[63740] = 0x23ab; t[63741] = 0x23ac; t[63742] = 0x23ad; t[63726] = 0x23a1; t[63727] = 0x23a2; t[63728] = 0x23a3; t[63737] = 0x23a4; t[63738] = 0x23a5; t[63739] = 0x23a6; t[63723] = 0x239b; t[63724] = 0x239c; t[63725] = 0x239d; t[63734] = 0x239e; t[63735] = 0x239f; t[63736] = 0x23a0; }); function mapSpecialUnicodeValues(code) { if (code >= 0xfff0 && code <= 0xffff) { return 0; } else if (code >= 0xf600 && code <= 0xf8ff) { return getSpecialPUASymbols()[code] || code; } else if (code === 0x00ad) { return 0x002d; } return code; } function getUnicodeForGlyph(name, glyphsUnicodeMap) { var unicode = glyphsUnicodeMap[name]; if (unicode !== undefined) { return unicode; } if (!name) { return -1; } if (name[0] === "u") { var nameLen = name.length, hexStr; if (nameLen === 7 && name[1] === "n" && name[2] === "i") { hexStr = name.substring(3); } else if (nameLen >= 5 && nameLen <= 7) { hexStr = name.substring(1); } else { return -1; } if (hexStr === hexStr.toUpperCase()) { unicode = parseInt(hexStr, 16); if (unicode >= 0) { return unicode; } } } return -1; } var UnicodeRanges = [ { begin: 0x0000, end: 0x007f }, { begin: 0x0080, end: 0x00ff }, { begin: 0x0100, end: 0x017f }, { begin: 0x0180, end: 0x024f }, { begin: 0x0250, end: 0x02af }, { begin: 0x02b0, end: 0x02ff }, { begin: 0x0300, end: 0x036f }, { begin: 0x0370, end: 0x03ff }, { begin: 0x2c80, end: 0x2cff }, { begin: 0x0400, end: 0x04ff }, { begin: 0x0530, end: 0x058f }, { begin: 0x0590, end: 0x05ff }, { begin: 0xa500, end: 0xa63f }, { begin: 0x0600, end: 0x06ff }, { begin: 0x07c0, end: 0x07ff }, { begin: 0x0900, end: 0x097f }, { begin: 0x0980, end: 0x09ff }, { begin: 0x0a00, end: 0x0a7f }, { begin: 0x0a80, end: 0x0aff }, { begin: 0x0b00, end: 0x0b7f }, { begin: 0x0b80, end: 0x0bff }, { begin: 0x0c00, end: 0x0c7f }, { begin: 0x0c80, end: 0x0cff }, { begin: 0x0d00, end: 0x0d7f }, { begin: 0x0e00, end: 0x0e7f }, { begin: 0x0e80, end: 0x0eff }, { begin: 0x10a0, end: 0x10ff }, { begin: 0x1b00, end: 0x1b7f }, { begin: 0x1100, end: 0x11ff }, { begin: 0x1e00, end: 0x1eff }, { begin: 0x1f00, end: 0x1fff }, { begin: 0x2000, end: 0x206f }, { begin: 0x2070, end: 0x209f }, { begin: 0x20a0, end: 0x20cf }, { begin: 0x20d0, end: 0x20ff }, { begin: 0x2100, end: 0x214f }, { begin: 0x2150, end: 0x218f }, { begin: 0x2190, end: 0x21ff }, { begin: 0x2200, end: 0x22ff }, { begin: 0x2300, end: 0x23ff }, { begin: 0x2400, end: 0x243f }, { begin: 0x2440, end: 0x245f }, { begin: 0x2460, end: 0x24ff }, { begin: 0x2500, end: 0x257f }, { begin: 0x2580, end: 0x259f }, { begin: 0x25a0, end: 0x25ff }, { begin: 0x2600, end: 0x26ff }, { begin: 0x2700, end: 0x27bf }, { begin: 0x3000, end: 0x303f }, { begin: 0x3040, end: 0x309f }, { begin: 0x30a0, end: 0x30ff }, { begin: 0x3100, end: 0x312f }, { begin: 0x3130, end: 0x318f }, { begin: 0xa840, end: 0xa87f }, { begin: 0x3200, end: 0x32ff }, { begin: 0x3300, end: 0x33ff }, { begin: 0xac00, end: 0xd7af }, { begin: 0xd800, end: 0xdfff }, { begin: 0x10900, end: 0x1091f }, { begin: 0x4e00, end: 0x9fff }, { begin: 0xe000, end: 0xf8ff }, { begin: 0x31c0, end: 0x31ef }, { begin: 0xfb00, end: 0xfb4f }, { begin: 0xfb50, end: 0xfdff }, { begin: 0xfe20, end: 0xfe2f }, { begin: 0xfe10, end: 0xfe1f }, { begin: 0xfe50, end: 0xfe6f }, { begin: 0xfe70, end: 0xfeff }, { begin: 0xff00, end: 0xffef }, { begin: 0xfff0, end: 0xffff }, { begin: 0x0f00, end: 0x0fff }, { begin: 0x0700, end: 0x074f }, { begin: 0x0780, end: 0x07bf }, { begin: 0x0d80, end: 0x0dff }, { begin: 0x1000, end: 0x109f }, { begin: 0x1200, end: 0x137f }, { begin: 0x13a0, end: 0x13ff }, { begin: 0x1400, end: 0x167f }, { begin: 0x1680, end: 0x169f }, { begin: 0x16a0, end: 0x16ff }, { begin: 0x1780, end: 0x17ff }, { begin: 0x1800, end: 0x18af }, { begin: 0x2800, end: 0x28ff }, { begin: 0xa000, end: 0xa48f }, { begin: 0x1700, end: 0x171f }, { begin: 0x10300, end: 0x1032f }, { begin: 0x10330, end: 0x1034f }, { begin: 0x10400, end: 0x1044f }, { begin: 0x1d000, end: 0x1d0ff }, { begin: 0x1d400, end: 0x1d7ff }, { begin: 0xff000, end: 0xffffd }, { begin: 0xfe00, end: 0xfe0f }, { begin: 0xe0000, end: 0xe007f }, { begin: 0x1900, end: 0x194f }, { begin: 0x1950, end: 0x197f }, { begin: 0x1980, end: 0x19df }, { begin: 0x1a00, end: 0x1a1f }, { begin: 0x2c00, end: 0x2c5f }, { begin: 0x2d30, end: 0x2d7f }, { begin: 0x4dc0, end: 0x4dff }, { begin: 0xa800, end: 0xa82f }, { begin: 0x10000, end: 0x1007f }, { begin: 0x10140, end: 0x1018f }, { begin: 0x10380, end: 0x1039f }, { begin: 0x103a0, end: 0x103df }, { begin: 0x10450, end: 0x1047f }, { begin: 0x10480, end: 0x104af }, { begin: 0x10800, end: 0x1083f }, { begin: 0x10a00, end: 0x10a5f }, { begin: 0x1d300, end: 0x1d35f }, { begin: 0x12000, end: 0x123ff }, { begin: 0x1d360, end: 0x1d37f }, { begin: 0x1b80, end: 0x1bbf }, { begin: 0x1c00, end: 0x1c4f }, { begin: 0x1c50, end: 0x1c7f }, { begin: 0xa880, end: 0xa8df }, { begin: 0xa900, end: 0xa92f }, { begin: 0xa930, end: 0xa95f }, { begin: 0xaa00, end: 0xaa5f }, { begin: 0x10190, end: 0x101cf }, { begin: 0x101d0, end: 0x101ff }, { begin: 0x102a0, end: 0x102df }, { begin: 0x1f030, end: 0x1f09f } ]; function getUnicodeRangeFor(value) { for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { var range = UnicodeRanges[i]; if (value >= range.begin && value < range.end) { return i; } } return -1; } function isRTLRangeFor(value) { var range = UnicodeRanges[13]; if (value >= range.begin && value < range.end) { return true; } range = UnicodeRanges[11]; if (value >= range.begin && value < range.end) { return true; } return false; } var getNormalizedUnicodes = getLookupTableFactory(function (t) { t["\u00A8"] = "\u0020\u0308"; t["\u00AF"] = "\u0020\u0304"; t["\u00B4"] = "\u0020\u0301"; t["\u00B5"] = "\u03BC"; t["\u00B8"] = "\u0020\u0327"; t["\u0132"] = "\u0049\u004A"; t["\u0133"] = "\u0069\u006A"; t["\u013F"] = "\u004C\u00B7"; t["\u0140"] = "\u006C\u00B7"; t["\u0149"] = "\u02BC\u006E"; t["\u017F"] = "\u0073"; t["\u01C4"] = "\u0044\u017D"; t["\u01C5"] = "\u0044\u017E"; t["\u01C6"] = "\u0064\u017E"; t["\u01C7"] = "\u004C\u004A"; t["\u01C8"] = "\u004C\u006A"; t["\u01C9"] = "\u006C\u006A"; t["\u01CA"] = "\u004E\u004A"; t["\u01CB"] = "\u004E\u006A"; t["\u01CC"] = "\u006E\u006A"; t["\u01F1"] = "\u0044\u005A"; t["\u01F2"] = "\u0044\u007A"; t["\u01F3"] = "\u0064\u007A"; t["\u02D8"] = "\u0020\u0306"; t["\u02D9"] = "\u0020\u0307"; t["\u02DA"] = "\u0020\u030A"; t["\u02DB"] = "\u0020\u0328"; t["\u02DC"] = "\u0020\u0303"; t["\u02DD"] = "\u0020\u030B"; t["\u037A"] = "\u0020\u0345"; t["\u0384"] = "\u0020\u0301"; t["\u03D0"] = "\u03B2"; t["\u03D1"] = "\u03B8"; t["\u03D2"] = "\u03A5"; t["\u03D5"] = "\u03C6"; t["\u03D6"] = "\u03C0"; t["\u03F0"] = "\u03BA"; t["\u03F1"] = "\u03C1"; t["\u03F2"] = "\u03C2"; t["\u03F4"] = "\u0398"; t["\u03F5"] = "\u03B5"; t["\u03F9"] = "\u03A3"; t["\u0587"] = "\u0565\u0582"; t["\u0675"] = "\u0627\u0674"; t["\u0676"] = "\u0648\u0674"; t["\u0677"] = "\u06C7\u0674"; t["\u0678"] = "\u064A\u0674"; t["\u0E33"] = "\u0E4D\u0E32"; t["\u0EB3"] = "\u0ECD\u0EB2"; t["\u0EDC"] = "\u0EAB\u0E99"; t["\u0EDD"] = "\u0EAB\u0EA1"; t["\u0F77"] = "\u0FB2\u0F81"; t["\u0F79"] = "\u0FB3\u0F81"; t["\u1E9A"] = "\u0061\u02BE"; t["\u1FBD"] = "\u0020\u0313"; t["\u1FBF"] = "\u0020\u0313"; t["\u1FC0"] = "\u0020\u0342"; t["\u1FFE"] = "\u0020\u0314"; t["\u2002"] = "\u0020"; t["\u2003"] = "\u0020"; t["\u2004"] = "\u0020"; t["\u2005"] = "\u0020"; t["\u2006"] = "\u0020"; t["\u2008"] = "\u0020"; t["\u2009"] = "\u0020"; t["\u200A"] = "\u0020"; t["\u2017"] = "\u0020\u0333"; t["\u2024"] = "\u002E"; t["\u2025"] = "\u002E\u002E"; t["\u2026"] = "\u002E\u002E\u002E"; t["\u2033"] = "\u2032\u2032"; t["\u2034"] = "\u2032\u2032\u2032"; t["\u2036"] = "\u2035\u2035"; t["\u2037"] = "\u2035\u2035\u2035"; t["\u203C"] = "\u0021\u0021"; t["\u203E"] = "\u0020\u0305"; t["\u2047"] = "\u003F\u003F"; t["\u2048"] = "\u003F\u0021"; t["\u2049"] = "\u0021\u003F"; t["\u2057"] = "\u2032\u2032\u2032\u2032"; t["\u205F"] = "\u0020"; t["\u20A8"] = "\u0052\u0073"; t["\u2100"] = "\u0061\u002F\u0063"; t["\u2101"] = "\u0061\u002F\u0073"; t["\u2103"] = "\u00B0\u0043"; t["\u2105"] = "\u0063\u002F\u006F"; t["\u2106"] = "\u0063\u002F\u0075"; t["\u2107"] = "\u0190"; t["\u2109"] = "\u00B0\u0046"; t["\u2116"] = "\u004E\u006F"; t["\u2121"] = "\u0054\u0045\u004C"; t["\u2135"] = "\u05D0"; t["\u2136"] = "\u05D1"; t["\u2137"] = "\u05D2"; t["\u2138"] = "\u05D3"; t["\u213B"] = "\u0046\u0041\u0058"; t["\u2160"] = "\u0049"; t["\u2161"] = "\u0049\u0049"; t["\u2162"] = "\u0049\u0049\u0049"; t["\u2163"] = "\u0049\u0056"; t["\u2164"] = "\u0056"; t["\u2165"] = "\u0056\u0049"; t["\u2166"] = "\u0056\u0049\u0049"; t["\u2167"] = "\u0056\u0049\u0049\u0049"; t["\u2168"] = "\u0049\u0058"; t["\u2169"] = "\u0058"; t["\u216A"] = "\u0058\u0049"; t["\u216B"] = "\u0058\u0049\u0049"; t["\u216C"] = "\u004C"; t["\u216D"] = "\u0043"; t["\u216E"] = "\u0044"; t["\u216F"] = "\u004D"; t["\u2170"] = "\u0069"; t["\u2171"] = "\u0069\u0069"; t["\u2172"] = "\u0069\u0069\u0069"; t["\u2173"] = "\u0069\u0076"; t["\u2174"] = "\u0076"; t["\u2175"] = "\u0076\u0069"; t["\u2176"] = "\u0076\u0069\u0069"; t["\u2177"] = "\u0076\u0069\u0069\u0069"; t["\u2178"] = "\u0069\u0078"; t["\u2179"] = "\u0078"; t["\u217A"] = "\u0078\u0069"; t["\u217B"] = "\u0078\u0069\u0069"; t["\u217C"] = "\u006C"; t["\u217D"] = "\u0063"; t["\u217E"] = "\u0064"; t["\u217F"] = "\u006D"; t["\u222C"] = "\u222B\u222B"; t["\u222D"] = "\u222B\u222B\u222B"; t["\u222F"] = "\u222E\u222E"; t["\u2230"] = "\u222E\u222E\u222E"; t["\u2474"] = "\u0028\u0031\u0029"; t["\u2475"] = "\u0028\u0032\u0029"; t["\u2476"] = "\u0028\u0033\u0029"; t["\u2477"] = "\u0028\u0034\u0029"; t["\u2478"] = "\u0028\u0035\u0029"; t["\u2479"] = "\u0028\u0036\u0029"; t["\u247A"] = "\u0028\u0037\u0029"; t["\u247B"] = "\u0028\u0038\u0029"; t["\u247C"] = "\u0028\u0039\u0029"; t["\u247D"] = "\u0028\u0031\u0030\u0029"; t["\u247E"] = "\u0028\u0031\u0031\u0029"; t["\u247F"] = "\u0028\u0031\u0032\u0029"; t["\u2480"] = "\u0028\u0031\u0033\u0029"; t["\u2481"] = "\u0028\u0031\u0034\u0029"; t["\u2482"] = "\u0028\u0031\u0035\u0029"; t["\u2483"] = "\u0028\u0031\u0036\u0029"; t["\u2484"] = "\u0028\u0031\u0037\u0029"; t["\u2485"] = "\u0028\u0031\u0038\u0029"; t["\u2486"] = "\u0028\u0031\u0039\u0029"; t["\u2487"] = "\u0028\u0032\u0030\u0029"; t["\u2488"] = "\u0031\u002E"; t["\u2489"] = "\u0032\u002E"; t["\u248A"] = "\u0033\u002E"; t["\u248B"] = "\u0034\u002E"; t["\u248C"] = "\u0035\u002E"; t["\u248D"] = "\u0036\u002E"; t["\u248E"] = "\u0037\u002E"; t["\u248F"] = "\u0038\u002E"; t["\u2490"] = "\u0039\u002E"; t["\u2491"] = "\u0031\u0030\u002E"; t["\u2492"] = "\u0031\u0031\u002E"; t["\u2493"] = "\u0031\u0032\u002E"; t["\u2494"] = "\u0031\u0033\u002E"; t["\u2495"] = "\u0031\u0034\u002E"; t["\u2496"] = "\u0031\u0035\u002E"; t["\u2497"] = "\u0031\u0036\u002E"; t["\u2498"] = "\u0031\u0037\u002E"; t["\u2499"] = "\u0031\u0038\u002E"; t["\u249A"] = "\u0031\u0039\u002E"; t["\u249B"] = "\u0032\u0030\u002E"; t["\u249C"] = "\u0028\u0061\u0029"; t["\u249D"] = "\u0028\u0062\u0029"; t["\u249E"] = "\u0028\u0063\u0029"; t["\u249F"] = "\u0028\u0064\u0029"; t["\u24A0"] = "\u0028\u0065\u0029"; t["\u24A1"] = "\u0028\u0066\u0029"; t["\u24A2"] = "\u0028\u0067\u0029"; t["\u24A3"] = "\u0028\u0068\u0029"; t["\u24A4"] = "\u0028\u0069\u0029"; t["\u24A5"] = "\u0028\u006A\u0029"; t["\u24A6"] = "\u0028\u006B\u0029"; t["\u24A7"] = "\u0028\u006C\u0029"; t["\u24A8"] = "\u0028\u006D\u0029"; t["\u24A9"] = "\u0028\u006E\u0029"; t["\u24AA"] = "\u0028\u006F\u0029"; t["\u24AB"] = "\u0028\u0070\u0029"; t["\u24AC"] = "\u0028\u0071\u0029"; t["\u24AD"] = "\u0028\u0072\u0029"; t["\u24AE"] = "\u0028\u0073\u0029"; t["\u24AF"] = "\u0028\u0074\u0029"; t["\u24B0"] = "\u0028\u0075\u0029"; t["\u24B1"] = "\u0028\u0076\u0029"; t["\u24B2"] = "\u0028\u0077\u0029"; t["\u24B3"] = "\u0028\u0078\u0029"; t["\u24B4"] = "\u0028\u0079\u0029"; t["\u24B5"] = "\u0028\u007A\u0029"; t["\u2A0C"] = "\u222B\u222B\u222B\u222B"; t["\u2A74"] = "\u003A\u003A\u003D"; t["\u2A75"] = "\u003D\u003D"; t["\u2A76"] = "\u003D\u003D\u003D"; t["\u2E9F"] = "\u6BCD"; t["\u2EF3"] = "\u9F9F"; t["\u2F00"] = "\u4E00"; t["\u2F01"] = "\u4E28"; t["\u2F02"] = "\u4E36"; t["\u2F03"] = "\u4E3F"; t["\u2F04"] = "\u4E59"; t["\u2F05"] = "\u4E85"; t["\u2F06"] = "\u4E8C"; t["\u2F07"] = "\u4EA0"; t["\u2F08"] = "\u4EBA"; t["\u2F09"] = "\u513F"; t["\u2F0A"] = "\u5165"; t["\u2F0B"] = "\u516B"; t["\u2F0C"] = "\u5182"; t["\u2F0D"] = "\u5196"; t["\u2F0E"] = "\u51AB"; t["\u2F0F"] = "\u51E0"; t["\u2F10"] = "\u51F5"; t["\u2F11"] = "\u5200"; t["\u2F12"] = "\u529B"; t["\u2F13"] = "\u52F9"; t["\u2F14"] = "\u5315"; t["\u2F15"] = "\u531A"; t["\u2F16"] = "\u5338"; t["\u2F17"] = "\u5341"; t["\u2F18"] = "\u535C"; t["\u2F19"] = "\u5369"; t["\u2F1A"] = "\u5382"; t["\u2F1B"] = "\u53B6"; t["\u2F1C"] = "\u53C8"; t["\u2F1D"] = "\u53E3"; t["\u2F1E"] = "\u56D7"; t["\u2F1F"] = "\u571F"; t["\u2F20"] = "\u58EB"; t["\u2F21"] = "\u5902"; t["\u2F22"] = "\u590A"; t["\u2F23"] = "\u5915"; t["\u2F24"] = "\u5927"; t["\u2F25"] = "\u5973"; t["\u2F26"] = "\u5B50"; t["\u2F27"] = "\u5B80"; t["\u2F28"] = "\u5BF8"; t["\u2F29"] = "\u5C0F"; t["\u2F2A"] = "\u5C22"; t["\u2F2B"] = "\u5C38"; t["\u2F2C"] = "\u5C6E"; t["\u2F2D"] = "\u5C71"; t["\u2F2E"] = "\u5DDB"; t["\u2F2F"] = "\u5DE5"; t["\u2F30"] = "\u5DF1"; t["\u2F31"] = "\u5DFE"; t["\u2F32"] = "\u5E72"; t["\u2F33"] = "\u5E7A"; t["\u2F34"] = "\u5E7F"; t["\u2F35"] = "\u5EF4"; t["\u2F36"] = "\u5EFE"; t["\u2F37"] = "\u5F0B"; t["\u2F38"] = "\u5F13"; t["\u2F39"] = "\u5F50"; t["\u2F3A"] = "\u5F61"; t["\u2F3B"] = "\u5F73"; t["\u2F3C"] = "\u5FC3"; t["\u2F3D"] = "\u6208"; t["\u2F3E"] = "\u6236"; t["\u2F3F"] = "\u624B"; t["\u2F40"] = "\u652F"; t["\u2F41"] = "\u6534"; t["\u2F42"] = "\u6587"; t["\u2F43"] = "\u6597"; t["\u2F44"] = "\u65A4"; t["\u2F45"] = "\u65B9"; t["\u2F46"] = "\u65E0"; t["\u2F47"] = "\u65E5"; t["\u2F48"] = "\u66F0"; t["\u2F49"] = "\u6708"; t["\u2F4A"] = "\u6728"; t["\u2F4B"] = "\u6B20"; t["\u2F4C"] = "\u6B62"; t["\u2F4D"] = "\u6B79"; t["\u2F4E"] = "\u6BB3"; t["\u2F4F"] = "\u6BCB"; t["\u2F50"] = "\u6BD4"; t["\u2F51"] = "\u6BDB"; t["\u2F52"] = "\u6C0F"; t["\u2F53"] = "\u6C14"; t["\u2F54"] = "\u6C34"; t["\u2F55"] = "\u706B"; t["\u2F56"] = "\u722A"; t["\u2F57"] = "\u7236"; t["\u2F58"] = "\u723B"; t["\u2F59"] = "\u723F"; t["\u2F5A"] = "\u7247"; t["\u2F5B"] = "\u7259"; t["\u2F5C"] = "\u725B"; t["\u2F5D"] = "\u72AC"; t["\u2F5E"] = "\u7384"; t["\u2F5F"] = "\u7389"; t["\u2F60"] = "\u74DC"; t["\u2F61"] = "\u74E6"; t["\u2F62"] = "\u7518"; t["\u2F63"] = "\u751F"; t["\u2F64"] = "\u7528"; t["\u2F65"] = "\u7530"; t["\u2F66"] = "\u758B"; t["\u2F67"] = "\u7592"; t["\u2F68"] = "\u7676"; t["\u2F69"] = "\u767D"; t["\u2F6A"] = "\u76AE"; t["\u2F6B"] = "\u76BF"; t["\u2F6C"] = "\u76EE"; t["\u2F6D"] = "\u77DB"; t["\u2F6E"] = "\u77E2"; t["\u2F6F"] = "\u77F3"; t["\u2F70"] = "\u793A"; t["\u2F71"] = "\u79B8"; t["\u2F72"] = "\u79BE"; t["\u2F73"] = "\u7A74"; t["\u2F74"] = "\u7ACB"; t["\u2F75"] = "\u7AF9"; t["\u2F76"] = "\u7C73"; t["\u2F77"] = "\u7CF8"; t["\u2F78"] = "\u7F36"; t["\u2F79"] = "\u7F51"; t["\u2F7A"] = "\u7F8A"; t["\u2F7B"] = "\u7FBD"; t["\u2F7C"] = "\u8001"; t["\u2F7D"] = "\u800C"; t["\u2F7E"] = "\u8012"; t["\u2F7F"] = "\u8033"; t["\u2F80"] = "\u807F"; t["\u2F81"] = "\u8089"; t["\u2F82"] = "\u81E3"; t["\u2F83"] = "\u81EA"; t["\u2F84"] = "\u81F3"; t["\u2F85"] = "\u81FC"; t["\u2F86"] = "\u820C"; t["\u2F87"] = "\u821B"; t["\u2F88"] = "\u821F"; t["\u2F89"] = "\u826E"; t["\u2F8A"] = "\u8272"; t["\u2F8B"] = "\u8278"; t["\u2F8C"] = "\u864D"; t["\u2F8D"] = "\u866B"; t["\u2F8E"] = "\u8840"; t["\u2F8F"] = "\u884C"; t["\u2F90"] = "\u8863"; t["\u2F91"] = "\u897E"; t["\u2F92"] = "\u898B"; t["\u2F93"] = "\u89D2"; t["\u2F94"] = "\u8A00"; t["\u2F95"] = "\u8C37"; t["\u2F96"] = "\u8C46"; t["\u2F97"] = "\u8C55"; t["\u2F98"] = "\u8C78"; t["\u2F99"] = "\u8C9D"; t["\u2F9A"] = "\u8D64"; t["\u2F9B"] = "\u8D70"; t["\u2F9C"] = "\u8DB3"; t["\u2F9D"] = "\u8EAB"; t["\u2F9E"] = "\u8ECA"; t["\u2F9F"] = "\u8F9B"; t["\u2FA0"] = "\u8FB0"; t["\u2FA1"] = "\u8FB5"; t["\u2FA2"] = "\u9091"; t["\u2FA3"] = "\u9149"; t["\u2FA4"] = "\u91C6"; t["\u2FA5"] = "\u91CC"; t["\u2FA6"] = "\u91D1"; t["\u2FA7"] = "\u9577"; t["\u2FA8"] = "\u9580"; t["\u2FA9"] = "\u961C"; t["\u2FAA"] = "\u96B6"; t["\u2FAB"] = "\u96B9"; t["\u2FAC"] = "\u96E8"; t["\u2FAD"] = "\u9751"; t["\u2FAE"] = "\u975E"; t["\u2FAF"] = "\u9762"; t["\u2FB0"] = "\u9769"; t["\u2FB1"] = "\u97CB"; t["\u2FB2"] = "\u97ED"; t["\u2FB3"] = "\u97F3"; t["\u2FB4"] = "\u9801"; t["\u2FB5"] = "\u98A8"; t["\u2FB6"] = "\u98DB"; t["\u2FB7"] = "\u98DF"; t["\u2FB8"] = "\u9996"; t["\u2FB9"] = "\u9999"; t["\u2FBA"] = "\u99AC"; t["\u2FBB"] = "\u9AA8"; t["\u2FBC"] = "\u9AD8"; t["\u2FBD"] = "\u9ADF"; t["\u2FBE"] = "\u9B25"; t["\u2FBF"] = "\u9B2F"; t["\u2FC0"] = "\u9B32"; t["\u2FC1"] = "\u9B3C"; t["\u2FC2"] = "\u9B5A"; t["\u2FC3"] = "\u9CE5"; t["\u2FC4"] = "\u9E75"; t["\u2FC5"] = "\u9E7F"; t["\u2FC6"] = "\u9EA5"; t["\u2FC7"] = "\u9EBB"; t["\u2FC8"] = "\u9EC3"; t["\u2FC9"] = "\u9ECD"; t["\u2FCA"] = "\u9ED1"; t["\u2FCB"] = "\u9EF9"; t["\u2FCC"] = "\u9EFD"; t["\u2FCD"] = "\u9F0E"; t["\u2FCE"] = "\u9F13"; t["\u2FCF"] = "\u9F20"; t["\u2FD0"] = "\u9F3B"; t["\u2FD1"] = "\u9F4A"; t["\u2FD2"] = "\u9F52"; t["\u2FD3"] = "\u9F8D"; t["\u2FD4"] = "\u9F9C"; t["\u2FD5"] = "\u9FA0"; t["\u3036"] = "\u3012"; t["\u3038"] = "\u5341"; t["\u3039"] = "\u5344"; t["\u303A"] = "\u5345"; t["\u309B"] = "\u0020\u3099"; t["\u309C"] = "\u0020\u309A"; t["\u3131"] = "\u1100"; t["\u3132"] = "\u1101"; t["\u3133"] = "\u11AA"; t["\u3134"] = "\u1102"; t["\u3135"] = "\u11AC"; t["\u3136"] = "\u11AD"; t["\u3137"] = "\u1103"; t["\u3138"] = "\u1104"; t["\u3139"] = "\u1105"; t["\u313A"] = "\u11B0"; t["\u313B"] = "\u11B1"; t["\u313C"] = "\u11B2"; t["\u313D"] = "\u11B3"; t["\u313E"] = "\u11B4"; t["\u313F"] = "\u11B5"; t["\u3140"] = "\u111A"; t["\u3141"] = "\u1106"; t["\u3142"] = "\u1107"; t["\u3143"] = "\u1108"; t["\u3144"] = "\u1121"; t["\u3145"] = "\u1109"; t["\u3146"] = "\u110A"; t["\u3147"] = "\u110B"; t["\u3148"] = "\u110C"; t["\u3149"] = "\u110D"; t["\u314A"] = "\u110E"; t["\u314B"] = "\u110F"; t["\u314C"] = "\u1110"; t["\u314D"] = "\u1111"; t["\u314E"] = "\u1112"; t["\u314F"] = "\u1161"; t["\u3150"] = "\u1162"; t["\u3151"] = "\u1163"; t["\u3152"] = "\u1164"; t["\u3153"] = "\u1165"; t["\u3154"] = "\u1166"; t["\u3155"] = "\u1167"; t["\u3156"] = "\u1168"; t["\u3157"] = "\u1169"; t["\u3158"] = "\u116A"; t["\u3159"] = "\u116B"; t["\u315A"] = "\u116C"; t["\u315B"] = "\u116D"; t["\u315C"] = "\u116E"; t["\u315D"] = "\u116F"; t["\u315E"] = "\u1170"; t["\u315F"] = "\u1171"; t["\u3160"] = "\u1172"; t["\u3161"] = "\u1173"; t["\u3162"] = "\u1174"; t["\u3163"] = "\u1175"; t["\u3164"] = "\u1160"; t["\u3165"] = "\u1114"; t["\u3166"] = "\u1115"; t["\u3167"] = "\u11C7"; t["\u3168"] = "\u11C8"; t["\u3169"] = "\u11CC"; t["\u316A"] = "\u11CE"; t["\u316B"] = "\u11D3"; t["\u316C"] = "\u11D7"; t["\u316D"] = "\u11D9"; t["\u316E"] = "\u111C"; t["\u316F"] = "\u11DD"; t["\u3170"] = "\u11DF"; t["\u3171"] = "\u111D"; t["\u3172"] = "\u111E"; t["\u3173"] = "\u1120"; t["\u3174"] = "\u1122"; t["\u3175"] = "\u1123"; t["\u3176"] = "\u1127"; t["\u3177"] = "\u1129"; t["\u3178"] = "\u112B"; t["\u3179"] = "\u112C"; t["\u317A"] = "\u112D"; t["\u317B"] = "\u112E"; t["\u317C"] = "\u112F"; t["\u317D"] = "\u1132"; t["\u317E"] = "\u1136"; t["\u317F"] = "\u1140"; t["\u3180"] = "\u1147"; t["\u3181"] = "\u114C"; t["\u3182"] = "\u11F1"; t["\u3183"] = "\u11F2"; t["\u3184"] = "\u1157"; t["\u3185"] = "\u1158"; t["\u3186"] = "\u1159"; t["\u3187"] = "\u1184"; t["\u3188"] = "\u1185"; t["\u3189"] = "\u1188"; t["\u318A"] = "\u1191"; t["\u318B"] = "\u1192"; t["\u318C"] = "\u1194"; t["\u318D"] = "\u119E"; t["\u318E"] = "\u11A1"; t["\u3200"] = "\u0028\u1100\u0029"; t["\u3201"] = "\u0028\u1102\u0029"; t["\u3202"] = "\u0028\u1103\u0029"; t["\u3203"] = "\u0028\u1105\u0029"; t["\u3204"] = "\u0028\u1106\u0029"; t["\u3205"] = "\u0028\u1107\u0029"; t["\u3206"] = "\u0028\u1109\u0029"; t["\u3207"] = "\u0028\u110B\u0029"; t["\u3208"] = "\u0028\u110C\u0029"; t["\u3209"] = "\u0028\u110E\u0029"; t["\u320A"] = "\u0028\u110F\u0029"; t["\u320B"] = "\u0028\u1110\u0029"; t["\u320C"] = "\u0028\u1111\u0029"; t["\u320D"] = "\u0028\u1112\u0029"; t["\u320E"] = "\u0028\u1100\u1161\u0029"; t["\u320F"] = "\u0028\u1102\u1161\u0029"; t["\u3210"] = "\u0028\u1103\u1161\u0029"; t["\u3211"] = "\u0028\u1105\u1161\u0029"; t["\u3212"] = "\u0028\u1106\u1161\u0029"; t["\u3213"] = "\u0028\u1107\u1161\u0029"; t["\u3214"] = "\u0028\u1109\u1161\u0029"; t["\u3215"] = "\u0028\u110B\u1161\u0029"; t["\u3216"] = "\u0028\u110C\u1161\u0029"; t["\u3217"] = "\u0028\u110E\u1161\u0029"; t["\u3218"] = "\u0028\u110F\u1161\u0029"; t["\u3219"] = "\u0028\u1110\u1161\u0029"; t["\u321A"] = "\u0028\u1111\u1161\u0029"; t["\u321B"] = "\u0028\u1112\u1161\u0029"; t["\u321C"] = "\u0028\u110C\u116E\u0029"; t["\u321D"] = "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029"; t["\u321E"] = "\u0028\u110B\u1169\u1112\u116E\u0029"; t["\u3220"] = "\u0028\u4E00\u0029"; t["\u3221"] = "\u0028\u4E8C\u0029"; t["\u3222"] = "\u0028\u4E09\u0029"; t["\u3223"] = "\u0028\u56DB\u0029"; t["\u3224"] = "\u0028\u4E94\u0029"; t["\u3225"] = "\u0028\u516D\u0029"; t["\u3226"] = "\u0028\u4E03\u0029"; t["\u3227"] = "\u0028\u516B\u0029"; t["\u3228"] = "\u0028\u4E5D\u0029"; t["\u3229"] = "\u0028\u5341\u0029"; t["\u322A"] = "\u0028\u6708\u0029"; t["\u322B"] = "\u0028\u706B\u0029"; t["\u322C"] = "\u0028\u6C34\u0029"; t["\u322D"] = "\u0028\u6728\u0029"; t["\u322E"] = "\u0028\u91D1\u0029"; t["\u322F"] = "\u0028\u571F\u0029"; t["\u3230"] = "\u0028\u65E5\u0029"; t["\u3231"] = "\u0028\u682A\u0029"; t["\u3232"] = "\u0028\u6709\u0029"; t["\u3233"] = "\u0028\u793E\u0029"; t["\u3234"] = "\u0028\u540D\u0029"; t["\u3235"] = "\u0028\u7279\u0029"; t["\u3236"] = "\u0028\u8CA1\u0029"; t["\u3237"] = "\u0028\u795D\u0029"; t["\u3238"] = "\u0028\u52B4\u0029"; t["\u3239"] = "\u0028\u4EE3\u0029"; t["\u323A"] = "\u0028\u547C\u0029"; t["\u323B"] = "\u0028\u5B66\u0029"; t["\u323C"] = "\u0028\u76E3\u0029"; t["\u323D"] = "\u0028\u4F01\u0029"; t["\u323E"] = "\u0028\u8CC7\u0029"; t["\u323F"] = "\u0028\u5354\u0029"; t["\u3240"] = "\u0028\u796D\u0029"; t["\u3241"] = "\u0028\u4F11\u0029"; t["\u3242"] = "\u0028\u81EA\u0029"; t["\u3243"] = "\u0028\u81F3\u0029"; t["\u32C0"] = "\u0031\u6708"; t["\u32C1"] = "\u0032\u6708"; t["\u32C2"] = "\u0033\u6708"; t["\u32C3"] = "\u0034\u6708"; t["\u32C4"] = "\u0035\u6708"; t["\u32C5"] = "\u0036\u6708"; t["\u32C6"] = "\u0037\u6708"; t["\u32C7"] = "\u0038\u6708"; t["\u32C8"] = "\u0039\u6708"; t["\u32C9"] = "\u0031\u0030\u6708"; t["\u32CA"] = "\u0031\u0031\u6708"; t["\u32CB"] = "\u0031\u0032\u6708"; t["\u3358"] = "\u0030\u70B9"; t["\u3359"] = "\u0031\u70B9"; t["\u335A"] = "\u0032\u70B9"; t["\u335B"] = "\u0033\u70B9"; t["\u335C"] = "\u0034\u70B9"; t["\u335D"] = "\u0035\u70B9"; t["\u335E"] = "\u0036\u70B9"; t["\u335F"] = "\u0037\u70B9"; t["\u3360"] = "\u0038\u70B9"; t["\u3361"] = "\u0039\u70B9"; t["\u3362"] = "\u0031\u0030\u70B9"; t["\u3363"] = "\u0031\u0031\u70B9"; t["\u3364"] = "\u0031\u0032\u70B9"; t["\u3365"] = "\u0031\u0033\u70B9"; t["\u3366"] = "\u0031\u0034\u70B9"; t["\u3367"] = "\u0031\u0035\u70B9"; t["\u3368"] = "\u0031\u0036\u70B9"; t["\u3369"] = "\u0031\u0037\u70B9"; t["\u336A"] = "\u0031\u0038\u70B9"; t["\u336B"] = "\u0031\u0039\u70B9"; t["\u336C"] = "\u0032\u0030\u70B9"; t["\u336D"] = "\u0032\u0031\u70B9"; t["\u336E"] = "\u0032\u0032\u70B9"; t["\u336F"] = "\u0032\u0033\u70B9"; t["\u3370"] = "\u0032\u0034\u70B9"; t["\u33E0"] = "\u0031\u65E5"; t["\u33E1"] = "\u0032\u65E5"; t["\u33E2"] = "\u0033\u65E5"; t["\u33E3"] = "\u0034\u65E5"; t["\u33E4"] = "\u0035\u65E5"; t["\u33E5"] = "\u0036\u65E5"; t["\u33E6"] = "\u0037\u65E5"; t["\u33E7"] = "\u0038\u65E5"; t["\u33E8"] = "\u0039\u65E5"; t["\u33E9"] = "\u0031\u0030\u65E5"; t["\u33EA"] = "\u0031\u0031\u65E5"; t["\u33EB"] = "\u0031\u0032\u65E5"; t["\u33EC"] = "\u0031\u0033\u65E5"; t["\u33ED"] = "\u0031\u0034\u65E5"; t["\u33EE"] = "\u0031\u0035\u65E5"; t["\u33EF"] = "\u0031\u0036\u65E5"; t["\u33F0"] = "\u0031\u0037\u65E5"; t["\u33F1"] = "\u0031\u0038\u65E5"; t["\u33F2"] = "\u0031\u0039\u65E5"; t["\u33F3"] = "\u0032\u0030\u65E5"; t["\u33F4"] = "\u0032\u0031\u65E5"; t["\u33F5"] = "\u0032\u0032\u65E5"; t["\u33F6"] = "\u0032\u0033\u65E5"; t["\u33F7"] = "\u0032\u0034\u65E5"; t["\u33F8"] = "\u0032\u0035\u65E5"; t["\u33F9"] = "\u0032\u0036\u65E5"; t["\u33FA"] = "\u0032\u0037\u65E5"; t["\u33FB"] = "\u0032\u0038\u65E5"; t["\u33FC"] = "\u0032\u0039\u65E5"; t["\u33FD"] = "\u0033\u0030\u65E5"; t["\u33FE"] = "\u0033\u0031\u65E5"; t["\uFB00"] = "\u0066\u0066"; t["\uFB01"] = "\u0066\u0069"; t["\uFB02"] = "\u0066\u006C"; t["\uFB03"] = "\u0066\u0066\u0069"; t["\uFB04"] = "\u0066\u0066\u006C"; t["\uFB05"] = "\u017F\u0074"; t["\uFB06"] = "\u0073\u0074"; t["\uFB13"] = "\u0574\u0576"; t["\uFB14"] = "\u0574\u0565"; t["\uFB15"] = "\u0574\u056B"; t["\uFB16"] = "\u057E\u0576"; t["\uFB17"] = "\u0574\u056D"; t["\uFB4F"] = "\u05D0\u05DC"; t["\uFB50"] = "\u0671"; t["\uFB51"] = "\u0671"; t["\uFB52"] = "\u067B"; t["\uFB53"] = "\u067B"; t["\uFB54"] = "\u067B"; t["\uFB55"] = "\u067B"; t["\uFB56"] = "\u067E"; t["\uFB57"] = "\u067E"; t["\uFB58"] = "\u067E"; t["\uFB59"] = "\u067E"; t["\uFB5A"] = "\u0680"; t["\uFB5B"] = "\u0680"; t["\uFB5C"] = "\u0680"; t["\uFB5D"] = "\u0680"; t["\uFB5E"] = "\u067A"; t["\uFB5F"] = "\u067A"; t["\uFB60"] = "\u067A"; t["\uFB61"] = "\u067A"; t["\uFB62"] = "\u067F"; t["\uFB63"] = "\u067F"; t["\uFB64"] = "\u067F"; t["\uFB65"] = "\u067F"; t["\uFB66"] = "\u0679"; t["\uFB67"] = "\u0679"; t["\uFB68"] = "\u0679"; t["\uFB69"] = "\u0679"; t["\uFB6A"] = "\u06A4"; t["\uFB6B"] = "\u06A4"; t["\uFB6C"] = "\u06A4"; t["\uFB6D"] = "\u06A4"; t["\uFB6E"] = "\u06A6"; t["\uFB6F"] = "\u06A6"; t["\uFB70"] = "\u06A6"; t["\uFB71"] = "\u06A6"; t["\uFB72"] = "\u0684"; t["\uFB73"] = "\u0684"; t["\uFB74"] = "\u0684"; t["\uFB75"] = "\u0684"; t["\uFB76"] = "\u0683"; t["\uFB77"] = "\u0683"; t["\uFB78"] = "\u0683"; t["\uFB79"] = "\u0683"; t["\uFB7A"] = "\u0686"; t["\uFB7B"] = "\u0686"; t["\uFB7C"] = "\u0686"; t["\uFB7D"] = "\u0686"; t["\uFB7E"] = "\u0687"; t["\uFB7F"] = "\u0687"; t["\uFB80"] = "\u0687"; t["\uFB81"] = "\u0687"; t["\uFB82"] = "\u068D"; t["\uFB83"] = "\u068D"; t["\uFB84"] = "\u068C"; t["\uFB85"] = "\u068C"; t["\uFB86"] = "\u068E"; t["\uFB87"] = "\u068E"; t["\uFB88"] = "\u0688"; t["\uFB89"] = "\u0688"; t["\uFB8A"] = "\u0698"; t["\uFB8B"] = "\u0698"; t["\uFB8C"] = "\u0691"; t["\uFB8D"] = "\u0691"; t["\uFB8E"] = "\u06A9"; t["\uFB8F"] = "\u06A9"; t["\uFB90"] = "\u06A9"; t["\uFB91"] = "\u06A9"; t["\uFB92"] = "\u06AF"; t["\uFB93"] = "\u06AF"; t["\uFB94"] = "\u06AF"; t["\uFB95"] = "\u06AF"; t["\uFB96"] = "\u06B3"; t["\uFB97"] = "\u06B3"; t["\uFB98"] = "\u06B3"; t["\uFB99"] = "\u06B3"; t["\uFB9A"] = "\u06B1"; t["\uFB9B"] = "\u06B1"; t["\uFB9C"] = "\u06B1"; t["\uFB9D"] = "\u06B1"; t["\uFB9E"] = "\u06BA"; t["\uFB9F"] = "\u06BA"; t["\uFBA0"] = "\u06BB"; t["\uFBA1"] = "\u06BB"; t["\uFBA2"] = "\u06BB"; t["\uFBA3"] = "\u06BB"; t["\uFBA4"] = "\u06C0"; t["\uFBA5"] = "\u06C0"; t["\uFBA6"] = "\u06C1"; t["\uFBA7"] = "\u06C1"; t["\uFBA8"] = "\u06C1"; t["\uFBA9"] = "\u06C1"; t["\uFBAA"] = "\u06BE"; t["\uFBAB"] = "\u06BE"; t["\uFBAC"] = "\u06BE"; t["\uFBAD"] = "\u06BE"; t["\uFBAE"] = "\u06D2"; t["\uFBAF"] = "\u06D2"; t["\uFBB0"] = "\u06D3"; t["\uFBB1"] = "\u06D3"; t["\uFBD3"] = "\u06AD"; t["\uFBD4"] = "\u06AD"; t["\uFBD5"] = "\u06AD"; t["\uFBD6"] = "\u06AD"; t["\uFBD7"] = "\u06C7"; t["\uFBD8"] = "\u06C7"; t["\uFBD9"] = "\u06C6"; t["\uFBDA"] = "\u06C6"; t["\uFBDB"] = "\u06C8"; t["\uFBDC"] = "\u06C8"; t["\uFBDD"] = "\u0677"; t["\uFBDE"] = "\u06CB"; t["\uFBDF"] = "\u06CB"; t["\uFBE0"] = "\u06C5"; t["\uFBE1"] = "\u06C5"; t["\uFBE2"] = "\u06C9"; t["\uFBE3"] = "\u06C9"; t["\uFBE4"] = "\u06D0"; t["\uFBE5"] = "\u06D0"; t["\uFBE6"] = "\u06D0"; t["\uFBE7"] = "\u06D0"; t["\uFBE8"] = "\u0649"; t["\uFBE9"] = "\u0649"; t["\uFBEA"] = "\u0626\u0627"; t["\uFBEB"] = "\u0626\u0627"; t["\uFBEC"] = "\u0626\u06D5"; t["\uFBED"] = "\u0626\u06D5"; t["\uFBEE"] = "\u0626\u0648"; t["\uFBEF"] = "\u0626\u0648"; t["\uFBF0"] = "\u0626\u06C7"; t["\uFBF1"] = "\u0626\u06C7"; t["\uFBF2"] = "\u0626\u06C6"; t["\uFBF3"] = "\u0626\u06C6"; t["\uFBF4"] = "\u0626\u06C8"; t["\uFBF5"] = "\u0626\u06C8"; t["\uFBF6"] = "\u0626\u06D0"; t["\uFBF7"] = "\u0626\u06D0"; t["\uFBF8"] = "\u0626\u06D0"; t["\uFBF9"] = "\u0626\u0649"; t["\uFBFA"] = "\u0626\u0649"; t["\uFBFB"] = "\u0626\u0649"; t["\uFBFC"] = "\u06CC"; t["\uFBFD"] = "\u06CC"; t["\uFBFE"] = "\u06CC"; t["\uFBFF"] = "\u06CC"; t["\uFC00"] = "\u0626\u062C"; t["\uFC01"] = "\u0626\u062D"; t["\uFC02"] = "\u0626\u0645"; t["\uFC03"] = "\u0626\u0649"; t["\uFC04"] = "\u0626\u064A"; t["\uFC05"] = "\u0628\u062C"; t["\uFC06"] = "\u0628\u062D"; t["\uFC07"] = "\u0628\u062E"; t["\uFC08"] = "\u0628\u0645"; t["\uFC09"] = "\u0628\u0649"; t["\uFC0A"] = "\u0628\u064A"; t["\uFC0B"] = "\u062A\u062C"; t["\uFC0C"] = "\u062A\u062D"; t["\uFC0D"] = "\u062A\u062E"; t["\uFC0E"] = "\u062A\u0645"; t["\uFC0F"] = "\u062A\u0649"; t["\uFC10"] = "\u062A\u064A"; t["\uFC11"] = "\u062B\u062C"; t["\uFC12"] = "\u062B\u0645"; t["\uFC13"] = "\u062B\u0649"; t["\uFC14"] = "\u062B\u064A"; t["\uFC15"] = "\u062C\u062D"; t["\uFC16"] = "\u062C\u0645"; t["\uFC17"] = "\u062D\u062C"; t["\uFC18"] = "\u062D\u0645"; t["\uFC19"] = "\u062E\u062C"; t["\uFC1A"] = "\u062E\u062D"; t["\uFC1B"] = "\u062E\u0645"; t["\uFC1C"] = "\u0633\u062C"; t["\uFC1D"] = "\u0633\u062D"; t["\uFC1E"] = "\u0633\u062E"; t["\uFC1F"] = "\u0633\u0645"; t["\uFC20"] = "\u0635\u062D"; t["\uFC21"] = "\u0635\u0645"; t["\uFC22"] = "\u0636\u062C"; t["\uFC23"] = "\u0636\u062D"; t["\uFC24"] = "\u0636\u062E"; t["\uFC25"] = "\u0636\u0645"; t["\uFC26"] = "\u0637\u062D"; t["\uFC27"] = "\u0637\u0645"; t["\uFC28"] = "\u0638\u0645"; t["\uFC29"] = "\u0639\u062C"; t["\uFC2A"] = "\u0639\u0645"; t["\uFC2B"] = "\u063A\u062C"; t["\uFC2C"] = "\u063A\u0645"; t["\uFC2D"] = "\u0641\u062C"; t["\uFC2E"] = "\u0641\u062D"; t["\uFC2F"] = "\u0641\u062E"; t["\uFC30"] = "\u0641\u0645"; t["\uFC31"] = "\u0641\u0649"; t["\uFC32"] = "\u0641\u064A"; t["\uFC33"] = "\u0642\u062D"; t["\uFC34"] = "\u0642\u0645"; t["\uFC35"] = "\u0642\u0649"; t["\uFC36"] = "\u0642\u064A"; t["\uFC37"] = "\u0643\u0627"; t["\uFC38"] = "\u0643\u062C"; t["\uFC39"] = "\u0643\u062D"; t["\uFC3A"] = "\u0643\u062E"; t["\uFC3B"] = "\u0643\u0644"; t["\uFC3C"] = "\u0643\u0645"; t["\uFC3D"] = "\u0643\u0649"; t["\uFC3E"] = "\u0643\u064A"; t["\uFC3F"] = "\u0644\u062C"; t["\uFC40"] = "\u0644\u062D"; t["\uFC41"] = "\u0644\u062E"; t["\uFC42"] = "\u0644\u0645"; t["\uFC43"] = "\u0644\u0649"; t["\uFC44"] = "\u0644\u064A"; t["\uFC45"] = "\u0645\u062C"; t["\uFC46"] = "\u0645\u062D"; t["\uFC47"] = "\u0645\u062E"; t["\uFC48"] = "\u0645\u0645"; t["\uFC49"] = "\u0645\u0649"; t["\uFC4A"] = "\u0645\u064A"; t["\uFC4B"] = "\u0646\u062C"; t["\uFC4C"] = "\u0646\u062D"; t["\uFC4D"] = "\u0646\u062E"; t["\uFC4E"] = "\u0646\u0645"; t["\uFC4F"] = "\u0646\u0649"; t["\uFC50"] = "\u0646\u064A"; t["\uFC51"] = "\u0647\u062C"; t["\uFC52"] = "\u0647\u0645"; t["\uFC53"] = "\u0647\u0649"; t["\uFC54"] = "\u0647\u064A"; t["\uFC55"] = "\u064A\u062C"; t["\uFC56"] = "\u064A\u062D"; t["\uFC57"] = "\u064A\u062E"; t["\uFC58"] = "\u064A\u0645"; t["\uFC59"] = "\u064A\u0649"; t["\uFC5A"] = "\u064A\u064A"; t["\uFC5B"] = "\u0630\u0670"; t["\uFC5C"] = "\u0631\u0670"; t["\uFC5D"] = "\u0649\u0670"; t["\uFC5E"] = "\u0020\u064C\u0651"; t["\uFC5F"] = "\u0020\u064D\u0651"; t["\uFC60"] = "\u0020\u064E\u0651"; t["\uFC61"] = "\u0020\u064F\u0651"; t["\uFC62"] = "\u0020\u0650\u0651"; t["\uFC63"] = "\u0020\u0651\u0670"; t["\uFC64"] = "\u0626\u0631"; t["\uFC65"] = "\u0626\u0632"; t["\uFC66"] = "\u0626\u0645"; t["\uFC67"] = "\u0626\u0646"; t["\uFC68"] = "\u0626\u0649"; t["\uFC69"] = "\u0626\u064A"; t["\uFC6A"] = "\u0628\u0631"; t["\uFC6B"] = "\u0628\u0632"; t["\uFC6C"] = "\u0628\u0645"; t["\uFC6D"] = "\u0628\u0646"; t["\uFC6E"] = "\u0628\u0649"; t["\uFC6F"] = "\u0628\u064A"; t["\uFC70"] = "\u062A\u0631"; t["\uFC71"] = "\u062A\u0632"; t["\uFC72"] = "\u062A\u0645"; t["\uFC73"] = "\u062A\u0646"; t["\uFC74"] = "\u062A\u0649"; t["\uFC75"] = "\u062A\u064A"; t["\uFC76"] = "\u062B\u0631"; t["\uFC77"] = "\u062B\u0632"; t["\uFC78"] = "\u062B\u0645"; t["\uFC79"] = "\u062B\u0646"; t["\uFC7A"] = "\u062B\u0649"; t["\uFC7B"] = "\u062B\u064A"; t["\uFC7C"] = "\u0641\u0649"; t["\uFC7D"] = "\u0641\u064A"; t["\uFC7E"] = "\u0642\u0649"; t["\uFC7F"] = "\u0642\u064A"; t["\uFC80"] = "\u0643\u0627"; t["\uFC81"] = "\u0643\u0644"; t["\uFC82"] = "\u0643\u0645"; t["\uFC83"] = "\u0643\u0649"; t["\uFC84"] = "\u0643\u064A"; t["\uFC85"] = "\u0644\u0645"; t["\uFC86"] = "\u0644\u0649"; t["\uFC87"] = "\u0644\u064A"; t["\uFC88"] = "\u0645\u0627"; t["\uFC89"] = "\u0645\u0645"; t["\uFC8A"] = "\u0646\u0631"; t["\uFC8B"] = "\u0646\u0632"; t["\uFC8C"] = "\u0646\u0645"; t["\uFC8D"] = "\u0646\u0646"; t["\uFC8E"] = "\u0646\u0649"; t["\uFC8F"] = "\u0646\u064A"; t["\uFC90"] = "\u0649\u0670"; t["\uFC91"] = "\u064A\u0631"; t["\uFC92"] = "\u064A\u0632"; t["\uFC93"] = "\u064A\u0645"; t["\uFC94"] = "\u064A\u0646"; t["\uFC95"] = "\u064A\u0649"; t["\uFC96"] = "\u064A\u064A"; t["\uFC97"] = "\u0626\u062C"; t["\uFC98"] = "\u0626\u062D"; t["\uFC99"] = "\u0626\u062E"; t["\uFC9A"] = "\u0626\u0645"; t["\uFC9B"] = "\u0626\u0647"; t["\uFC9C"] = "\u0628\u062C"; t["\uFC9D"] = "\u0628\u062D"; t["\uFC9E"] = "\u0628\u062E"; t["\uFC9F"] = "\u0628\u0645"; t["\uFCA0"] = "\u0628\u0647"; t["\uFCA1"] = "\u062A\u062C"; t["\uFCA2"] = "\u062A\u062D"; t["\uFCA3"] = "\u062A\u062E"; t["\uFCA4"] = "\u062A\u0645"; t["\uFCA5"] = "\u062A\u0647"; t["\uFCA6"] = "\u062B\u0645"; t["\uFCA7"] = "\u062C\u062D"; t["\uFCA8"] = "\u062C\u0645"; t["\uFCA9"] = "\u062D\u062C"; t["\uFCAA"] = "\u062D\u0645"; t["\uFCAB"] = "\u062E\u062C"; t["\uFCAC"] = "\u062E\u0645"; t["\uFCAD"] = "\u0633\u062C"; t["\uFCAE"] = "\u0633\u062D"; t["\uFCAF"] = "\u0633\u062E"; t["\uFCB0"] = "\u0633\u0645"; t["\uFCB1"] = "\u0635\u062D"; t["\uFCB2"] = "\u0635\u062E"; t["\uFCB3"] = "\u0635\u0645"; t["\uFCB4"] = "\u0636\u062C"; t["\uFCB5"] = "\u0636\u062D"; t["\uFCB6"] = "\u0636\u062E"; t["\uFCB7"] = "\u0636\u0645"; t["\uFCB8"] = "\u0637\u062D"; t["\uFCB9"] = "\u0638\u0645"; t["\uFCBA"] = "\u0639\u062C"; t["\uFCBB"] = "\u0639\u0645"; t["\uFCBC"] = "\u063A\u062C"; t["\uFCBD"] = "\u063A\u0645"; t["\uFCBE"] = "\u0641\u062C"; t["\uFCBF"] = "\u0641\u062D"; t["\uFCC0"] = "\u0641\u062E"; t["\uFCC1"] = "\u0641\u0645"; t["\uFCC2"] = "\u0642\u062D"; t["\uFCC3"] = "\u0642\u0645"; t["\uFCC4"] = "\u0643\u062C"; t["\uFCC5"] = "\u0643\u062D"; t["\uFCC6"] = "\u0643\u062E"; t["\uFCC7"] = "\u0643\u0644"; t["\uFCC8"] = "\u0643\u0645"; t["\uFCC9"] = "\u0644\u062C"; t["\uFCCA"] = "\u0644\u062D"; t["\uFCCB"] = "\u0644\u062E"; t["\uFCCC"] = "\u0644\u0645"; t["\uFCCD"] = "\u0644\u0647"; t["\uFCCE"] = "\u0645\u062C"; t["\uFCCF"] = "\u0645\u062D"; t["\uFCD0"] = "\u0645\u062E"; t["\uFCD1"] = "\u0645\u0645"; t["\uFCD2"] = "\u0646\u062C"; t["\uFCD3"] = "\u0646\u062D"; t["\uFCD4"] = "\u0646\u062E"; t["\uFCD5"] = "\u0646\u0645"; t["\uFCD6"] = "\u0646\u0647"; t["\uFCD7"] = "\u0647\u062C"; t["\uFCD8"] = "\u0647\u0645"; t["\uFCD9"] = "\u0647\u0670"; t["\uFCDA"] = "\u064A\u062C"; t["\uFCDB"] = "\u064A\u062D"; t["\uFCDC"] = "\u064A\u062E"; t["\uFCDD"] = "\u064A\u0645"; t["\uFCDE"] = "\u064A\u0647"; t["\uFCDF"] = "\u0626\u0645"; t["\uFCE0"] = "\u0626\u0647"; t["\uFCE1"] = "\u0628\u0645"; t["\uFCE2"] = "\u0628\u0647"; t["\uFCE3"] = "\u062A\u0645"; t["\uFCE4"] = "\u062A\u0647"; t["\uFCE5"] = "\u062B\u0645"; t["\uFCE6"] = "\u062B\u0647"; t["\uFCE7"] = "\u0633\u0645"; t["\uFCE8"] = "\u0633\u0647"; t["\uFCE9"] = "\u0634\u0645"; t["\uFCEA"] = "\u0634\u0647"; t["\uFCEB"] = "\u0643\u0644"; t["\uFCEC"] = "\u0643\u0645"; t["\uFCED"] = "\u0644\u0645"; t["\uFCEE"] = "\u0646\u0645"; t["\uFCEF"] = "\u0646\u0647"; t["\uFCF0"] = "\u064A\u0645"; t["\uFCF1"] = "\u064A\u0647"; t["\uFCF2"] = "\u0640\u064E\u0651"; t["\uFCF3"] = "\u0640\u064F\u0651"; t["\uFCF4"] = "\u0640\u0650\u0651"; t["\uFCF5"] = "\u0637\u0649"; t["\uFCF6"] = "\u0637\u064A"; t["\uFCF7"] = "\u0639\u0649"; t["\uFCF8"] = "\u0639\u064A"; t["\uFCF9"] = "\u063A\u0649"; t["\uFCFA"] = "\u063A\u064A"; t["\uFCFB"] = "\u0633\u0649"; t["\uFCFC"] = "\u0633\u064A"; t["\uFCFD"] = "\u0634\u0649"; t["\uFCFE"] = "\u0634\u064A"; t["\uFCFF"] = "\u062D\u0649"; t["\uFD00"] = "\u062D\u064A"; t["\uFD01"] = "\u062C\u0649"; t["\uFD02"] = "\u062C\u064A"; t["\uFD03"] = "\u062E\u0649"; t["\uFD04"] = "\u062E\u064A"; t["\uFD05"] = "\u0635\u0649"; t["\uFD06"] = "\u0635\u064A"; t["\uFD07"] = "\u0636\u0649"; t["\uFD08"] = "\u0636\u064A"; t["\uFD09"] = "\u0634\u062C"; t["\uFD0A"] = "\u0634\u062D"; t["\uFD0B"] = "\u0634\u062E"; t["\uFD0C"] = "\u0634\u0645"; t["\uFD0D"] = "\u0634\u0631"; t["\uFD0E"] = "\u0633\u0631"; t["\uFD0F"] = "\u0635\u0631"; t["\uFD10"] = "\u0636\u0631"; t["\uFD11"] = "\u0637\u0649"; t["\uFD12"] = "\u0637\u064A"; t["\uFD13"] = "\u0639\u0649"; t["\uFD14"] = "\u0639\u064A"; t["\uFD15"] = "\u063A\u0649"; t["\uFD16"] = "\u063A\u064A"; t["\uFD17"] = "\u0633\u0649"; t["\uFD18"] = "\u0633\u064A"; t["\uFD19"] = "\u0634\u0649"; t["\uFD1A"] = "\u0634\u064A"; t["\uFD1B"] = "\u062D\u0649"; t["\uFD1C"] = "\u062D\u064A"; t["\uFD1D"] = "\u062C\u0649"; t["\uFD1E"] = "\u062C\u064A"; t["\uFD1F"] = "\u062E\u0649"; t["\uFD20"] = "\u062E\u064A"; t["\uFD21"] = "\u0635\u0649"; t["\uFD22"] = "\u0635\u064A"; t["\uFD23"] = "\u0636\u0649"; t["\uFD24"] = "\u0636\u064A"; t["\uFD25"] = "\u0634\u062C"; t["\uFD26"] = "\u0634\u062D"; t["\uFD27"] = "\u0634\u062E"; t["\uFD28"] = "\u0634\u0645"; t["\uFD29"] = "\u0634\u0631"; t["\uFD2A"] = "\u0633\u0631"; t["\uFD2B"] = "\u0635\u0631"; t["\uFD2C"] = "\u0636\u0631"; t["\uFD2D"] = "\u0634\u062C"; t["\uFD2E"] = "\u0634\u062D"; t["\uFD2F"] = "\u0634\u062E"; t["\uFD30"] = "\u0634\u0645"; t["\uFD31"] = "\u0633\u0647"; t["\uFD32"] = "\u0634\u0647"; t["\uFD33"] = "\u0637\u0645"; t["\uFD34"] = "\u0633\u062C"; t["\uFD35"] = "\u0633\u062D"; t["\uFD36"] = "\u0633\u062E"; t["\uFD37"] = "\u0634\u062C"; t["\uFD38"] = "\u0634\u062D"; t["\uFD39"] = "\u0634\u062E"; t["\uFD3A"] = "\u0637\u0645"; t["\uFD3B"] = "\u0638\u0645"; t["\uFD3C"] = "\u0627\u064B"; t["\uFD3D"] = "\u0627\u064B"; t["\uFD50"] = "\u062A\u062C\u0645"; t["\uFD51"] = "\u062A\u062D\u062C"; t["\uFD52"] = "\u062A\u062D\u062C"; t["\uFD53"] = "\u062A\u062D\u0645"; t["\uFD54"] = "\u062A\u062E\u0645"; t["\uFD55"] = "\u062A\u0645\u062C"; t["\uFD56"] = "\u062A\u0645\u062D"; t["\uFD57"] = "\u062A\u0645\u062E"; t["\uFD58"] = "\u062C\u0645\u062D"; t["\uFD59"] = "\u062C\u0645\u062D"; t["\uFD5A"] = "\u062D\u0645\u064A"; t["\uFD5B"] = "\u062D\u0645\u0649"; t["\uFD5C"] = "\u0633\u062D\u062C"; t["\uFD5D"] = "\u0633\u062C\u062D"; t["\uFD5E"] = "\u0633\u062C\u0649"; t["\uFD5F"] = "\u0633\u0645\u062D"; t["\uFD60"] = "\u0633\u0645\u062D"; t["\uFD61"] = "\u0633\u0645\u062C"; t["\uFD62"] = "\u0633\u0645\u0645"; t["\uFD63"] = "\u0633\u0645\u0645"; t["\uFD64"] = "\u0635\u062D\u062D"; t["\uFD65"] = "\u0635\u062D\u062D"; t["\uFD66"] = "\u0635\u0645\u0645"; t["\uFD67"] = "\u0634\u062D\u0645"; t["\uFD68"] = "\u0634\u062D\u0645"; t["\uFD69"] = "\u0634\u062C\u064A"; t["\uFD6A"] = "\u0634\u0645\u062E"; t["\uFD6B"] = "\u0634\u0645\u062E"; t["\uFD6C"] = "\u0634\u0645\u0645"; t["\uFD6D"] = "\u0634\u0645\u0645"; t["\uFD6E"] = "\u0636\u062D\u0649"; t["\uFD6F"] = "\u0636\u062E\u0645"; t["\uFD70"] = "\u0636\u062E\u0645"; t["\uFD71"] = "\u0637\u0645\u062D"; t["\uFD72"] = "\u0637\u0645\u062D"; t["\uFD73"] = "\u0637\u0645\u0645"; t["\uFD74"] = "\u0637\u0645\u064A"; t["\uFD75"] = "\u0639\u062C\u0645"; t["\uFD76"] = "\u0639\u0645\u0645"; t["\uFD77"] = "\u0639\u0645\u0645"; t["\uFD78"] = "\u0639\u0645\u0649"; t["\uFD79"] = "\u063A\u0645\u0645"; t["\uFD7A"] = "\u063A\u0645\u064A"; t["\uFD7B"] = "\u063A\u0645\u0649"; t["\uFD7C"] = "\u0641\u062E\u0645"; t["\uFD7D"] = "\u0641\u062E\u0645"; t["\uFD7E"] = "\u0642\u0645\u062D"; t["\uFD7F"] = "\u0642\u0645\u0645"; t["\uFD80"] = "\u0644\u062D\u0645"; t["\uFD81"] = "\u0644\u062D\u064A"; t["\uFD82"] = "\u0644\u062D\u0649"; t["\uFD83"] = "\u0644\u062C\u062C"; t["\uFD84"] = "\u0644\u062C\u062C"; t["\uFD85"] = "\u0644\u062E\u0645"; t["\uFD86"] = "\u0644\u062E\u0645"; t["\uFD87"] = "\u0644\u0645\u062D"; t["\uFD88"] = "\u0644\u0645\u062D"; t["\uFD89"] = "\u0645\u062D\u062C"; t["\uFD8A"] = "\u0645\u062D\u0645"; t["\uFD8B"] = "\u0645\u062D\u064A"; t["\uFD8C"] = "\u0645\u062C\u062D"; t["\uFD8D"] = "\u0645\u062C\u0645"; t["\uFD8E"] = "\u0645\u062E\u062C"; t["\uFD8F"] = "\u0645\u062E\u0645"; t["\uFD92"] = "\u0645\u062C\u062E"; t["\uFD93"] = "\u0647\u0645\u062C"; t["\uFD94"] = "\u0647\u0645\u0645"; t["\uFD95"] = "\u0646\u062D\u0645"; t["\uFD96"] = "\u0646\u062D\u0649"; t["\uFD97"] = "\u0646\u062C\u0645"; t["\uFD98"] = "\u0646\u062C\u0645"; t["\uFD99"] = "\u0646\u062C\u0649"; t["\uFD9A"] = "\u0646\u0645\u064A"; t["\uFD9B"] = "\u0646\u0645\u0649"; t["\uFD9C"] = "\u064A\u0645\u0645"; t["\uFD9D"] = "\u064A\u0645\u0645"; t["\uFD9E"] = "\u0628\u062E\u064A"; t["\uFD9F"] = "\u062A\u062C\u064A"; t["\uFDA0"] = "\u062A\u062C\u0649"; t["\uFDA1"] = "\u062A\u062E\u064A"; t["\uFDA2"] = "\u062A\u062E\u0649"; t["\uFDA3"] = "\u062A\u0645\u064A"; t["\uFDA4"] = "\u062A\u0645\u0649"; t["\uFDA5"] = "\u062C\u0645\u064A"; t["\uFDA6"] = "\u062C\u062D\u0649"; t["\uFDA7"] = "\u062C\u0645\u0649"; t["\uFDA8"] = "\u0633\u062E\u0649"; t["\uFDA9"] = "\u0635\u062D\u064A"; t["\uFDAA"] = "\u0634\u062D\u064A"; t["\uFDAB"] = "\u0636\u062D\u064A"; t["\uFDAC"] = "\u0644\u062C\u064A"; t["\uFDAD"] = "\u0644\u0645\u064A"; t["\uFDAE"] = "\u064A\u062D\u064A"; t["\uFDAF"] = "\u064A\u062C\u064A"; t["\uFDB0"] = "\u064A\u0645\u064A"; t["\uFDB1"] = "\u0645\u0645\u064A"; t["\uFDB2"] = "\u0642\u0645\u064A"; t["\uFDB3"] = "\u0646\u062D\u064A"; t["\uFDB4"] = "\u0642\u0645\u062D"; t["\uFDB5"] = "\u0644\u062D\u0645"; t["\uFDB6"] = "\u0639\u0645\u064A"; t["\uFDB7"] = "\u0643\u0645\u064A"; t["\uFDB8"] = "\u0646\u062C\u062D"; t["\uFDB9"] = "\u0645\u062E\u064A"; t["\uFDBA"] = "\u0644\u062C\u0645"; t["\uFDBB"] = "\u0643\u0645\u0645"; t["\uFDBC"] = "\u0644\u062C\u0645"; t["\uFDBD"] = "\u0646\u062C\u062D"; t["\uFDBE"] = "\u062C\u062D\u064A"; t["\uFDBF"] = "\u062D\u062C\u064A"; t["\uFDC0"] = "\u0645\u062C\u064A"; t["\uFDC1"] = "\u0641\u0645\u064A"; t["\uFDC2"] = "\u0628\u062D\u064A"; t["\uFDC3"] = "\u0643\u0645\u0645"; t["\uFDC4"] = "\u0639\u062C\u0645"; t["\uFDC5"] = "\u0635\u0645\u0645"; t["\uFDC6"] = "\u0633\u062E\u064A"; t["\uFDC7"] = "\u0646\u062C\u064A"; t["\uFE49"] = "\u203E"; t["\uFE4A"] = "\u203E"; t["\uFE4B"] = "\u203E"; t["\uFE4C"] = "\u203E"; t["\uFE4D"] = "\u005F"; t["\uFE4E"] = "\u005F"; t["\uFE4F"] = "\u005F"; t["\uFE80"] = "\u0621"; t["\uFE81"] = "\u0622"; t["\uFE82"] = "\u0622"; t["\uFE83"] = "\u0623"; t["\uFE84"] = "\u0623"; t["\uFE85"] = "\u0624"; t["\uFE86"] = "\u0624"; t["\uFE87"] = "\u0625"; t["\uFE88"] = "\u0625"; t["\uFE89"] = "\u0626"; t["\uFE8A"] = "\u0626"; t["\uFE8B"] = "\u0626"; t["\uFE8C"] = "\u0626"; t["\uFE8D"] = "\u0627"; t["\uFE8E"] = "\u0627"; t["\uFE8F"] = "\u0628"; t["\uFE90"] = "\u0628"; t["\uFE91"] = "\u0628"; t["\uFE92"] = "\u0628"; t["\uFE93"] = "\u0629"; t["\uFE94"] = "\u0629"; t["\uFE95"] = "\u062A"; t["\uFE96"] = "\u062A"; t["\uFE97"] = "\u062A"; t["\uFE98"] = "\u062A"; t["\uFE99"] = "\u062B"; t["\uFE9A"] = "\u062B"; t["\uFE9B"] = "\u062B"; t["\uFE9C"] = "\u062B"; t["\uFE9D"] = "\u062C"; t["\uFE9E"] = "\u062C"; t["\uFE9F"] = "\u062C"; t["\uFEA0"] = "\u062C"; t["\uFEA1"] = "\u062D"; t["\uFEA2"] = "\u062D"; t["\uFEA3"] = "\u062D"; t["\uFEA4"] = "\u062D"; t["\uFEA5"] = "\u062E"; t["\uFEA6"] = "\u062E"; t["\uFEA7"] = "\u062E"; t["\uFEA8"] = "\u062E"; t["\uFEA9"] = "\u062F"; t["\uFEAA"] = "\u062F"; t["\uFEAB"] = "\u0630"; t["\uFEAC"] = "\u0630"; t["\uFEAD"] = "\u0631"; t["\uFEAE"] = "\u0631"; t["\uFEAF"] = "\u0632"; t["\uFEB0"] = "\u0632"; t["\uFEB1"] = "\u0633"; t["\uFEB2"] = "\u0633"; t["\uFEB3"] = "\u0633"; t["\uFEB4"] = "\u0633"; t["\uFEB5"] = "\u0634"; t["\uFEB6"] = "\u0634"; t["\uFEB7"] = "\u0634"; t["\uFEB8"] = "\u0634"; t["\uFEB9"] = "\u0635"; t["\uFEBA"] = "\u0635"; t["\uFEBB"] = "\u0635"; t["\uFEBC"] = "\u0635"; t["\uFEBD"] = "\u0636"; t["\uFEBE"] = "\u0636"; t["\uFEBF"] = "\u0636"; t["\uFEC0"] = "\u0636"; t["\uFEC1"] = "\u0637"; t["\uFEC2"] = "\u0637"; t["\uFEC3"] = "\u0637"; t["\uFEC4"] = "\u0637"; t["\uFEC5"] = "\u0638"; t["\uFEC6"] = "\u0638"; t["\uFEC7"] = "\u0638"; t["\uFEC8"] = "\u0638"; t["\uFEC9"] = "\u0639"; t["\uFECA"] = "\u0639"; t["\uFECB"] = "\u0639"; t["\uFECC"] = "\u0639"; t["\uFECD"] = "\u063A"; t["\uFECE"] = "\u063A"; t["\uFECF"] = "\u063A"; t["\uFED0"] = "\u063A"; t["\uFED1"] = "\u0641"; t["\uFED2"] = "\u0641"; t["\uFED3"] = "\u0641"; t["\uFED4"] = "\u0641"; t["\uFED5"] = "\u0642"; t["\uFED6"] = "\u0642"; t["\uFED7"] = "\u0642"; t["\uFED8"] = "\u0642"; t["\uFED9"] = "\u0643"; t["\uFEDA"] = "\u0643"; t["\uFEDB"] = "\u0643"; t["\uFEDC"] = "\u0643"; t["\uFEDD"] = "\u0644"; t["\uFEDE"] = "\u0644"; t["\uFEDF"] = "\u0644"; t["\uFEE0"] = "\u0644"; t["\uFEE1"] = "\u0645"; t["\uFEE2"] = "\u0645"; t["\uFEE3"] = "\u0645"; t["\uFEE4"] = "\u0645"; t["\uFEE5"] = "\u0646"; t["\uFEE6"] = "\u0646"; t["\uFEE7"] = "\u0646"; t["\uFEE8"] = "\u0646"; t["\uFEE9"] = "\u0647"; t["\uFEEA"] = "\u0647"; t["\uFEEB"] = "\u0647"; t["\uFEEC"] = "\u0647"; t["\uFEED"] = "\u0648"; t["\uFEEE"] = "\u0648"; t["\uFEEF"] = "\u0649"; t["\uFEF0"] = "\u0649"; t["\uFEF1"] = "\u064A"; t["\uFEF2"] = "\u064A"; t["\uFEF3"] = "\u064A"; t["\uFEF4"] = "\u064A"; t["\uFEF5"] = "\u0644\u0622"; t["\uFEF6"] = "\u0644\u0622"; t["\uFEF7"] = "\u0644\u0623"; t["\uFEF8"] = "\u0644\u0623"; t["\uFEF9"] = "\u0644\u0625"; t["\uFEFA"] = "\u0644\u0625"; t["\uFEFB"] = "\u0644\u0627"; t["\uFEFC"] = "\u0644\u0627"; }); function reverseIfRtl(chars) { var charsLength = chars.length; if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { return chars; } var s = ""; for (var ii = charsLength - 1; ii >= 0; ii--) { s += chars[ii]; } return s; } exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; exports.reverseIfRtl = reverseIfRtl; exports.getUnicodeRangeFor = getUnicodeRangeFor; exports.getNormalizedUnicodes = getNormalizedUnicodes; exports.getUnicodeForGlyph = getUnicodeForGlyph; /***/ }), /* 37 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FontRendererFactory = void 0; var _util = __w_pdfjs_require__(2); var _cff_parser = __w_pdfjs_require__(31); var _glyphlist = __w_pdfjs_require__(34); var _encodings = __w_pdfjs_require__(33); var _stream = __w_pdfjs_require__(12); var FontRendererFactory = function FontRendererFactoryClosure() { function getLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; } function getUshort(data, offset) { return data[offset] << 8 | data[offset + 1]; } function getSubroutineBias(subrs) { const numSubrs = subrs.length; let bias = 32768; if (numSubrs < 1240) { bias = 107; } else if (numSubrs < 33900) { bias = 1131; } return bias; } function parseCmap(data, start, end) { var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); var format = getUshort(data, start + offset); var ranges, p, i; if (format === 4) { getUshort(data, start + offset + 2); var segCount = getUshort(data, start + offset + 6) >> 1; p = start + offset + 14; ranges = []; for (i = 0; i < segCount; i++, p += 2) { ranges[i] = { end: getUshort(data, p) }; } p += 2; for (i = 0; i < segCount; i++, p += 2) { ranges[i].start = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { ranges[i].idDelta = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { var idOffset = getUshort(data, p); if (idOffset === 0) { continue; } ranges[i].ids = []; for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { ranges[i].ids[j] = getUshort(data, p + idOffset); idOffset += 2; } } return ranges; } else if (format === 12) { getLong(data, start + offset + 4); var groups = getLong(data, start + offset + 12); p = start + offset + 16; ranges = []; for (i = 0; i < groups; i++) { ranges.push({ start: getLong(data, p), end: getLong(data, p + 4), idDelta: getLong(data, p + 8) - getLong(data, p) }); p += 12; } return ranges; } throw new _util.FormatError(`unsupported cmap: ${format}`); } function parseCff(data, start, end, seacAnalysisEnabled) { var properties = {}; var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); var cff = parser.parse(); return { glyphs: cff.charStrings.objects, subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, isCFFCIDFont: cff.isCIDFont, fdSelect: cff.fdSelect, fdArray: cff.fdArray }; } function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { var itemSize, itemDecode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; } var glyphs = []; var startOffset = itemDecode(loca, 0); for (var j = itemSize; j < loca.length; j += itemSize) { var endOffset = itemDecode(loca, j); glyphs.push(glyf.subarray(startOffset, endOffset)); startOffset = endOffset; } return glyphs; } function lookupCmap(ranges, unicode) { var code = unicode.codePointAt(0), gid = 0; var l = 0, r = ranges.length - 1; while (l < r) { var c = l + r + 1 >> 1; if (code < ranges[c].start) { r = c - 1; } else { l = c; } } if (ranges[l].start <= code && code <= ranges[l].end) { gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; } return { charCode: code, glyphId: gid }; } function compileGlyf(code, cmds, font) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function quadraticCurveTo(xa, ya, x, y) { cmds.push({ cmd: "quadraticCurveTo", args: [xa, ya, x, y] }); } var i = 0; var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; var flags; var x = 0, y = 0; i += 10; if (numberOfContours < 0) { do { flags = code[i] << 8 | code[i + 1]; var glyphIndex = code[i + 2] << 8 | code[i + 3]; i += 4; var arg1, arg2; if (flags & 0x01) { arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; i += 4; } else { arg1 = code[i++]; arg2 = code[i++]; } if (flags & 0x02) { x = arg1; y = arg2; } else { x = 0; y = 0; } var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0; if (flags & 0x08) { scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; i += 2; } else if (flags & 0x40) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; i += 4; } else if (flags & 0x80) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; i += 8; } var subglyph = font.glyphs[glyphIndex]; if (subglyph) { cmds.push({ cmd: "save" }); cmds.push({ cmd: "transform", args: [scaleX, scale01, scale10, scaleY, x, y] }); compileGlyf(subglyph, cmds, font); cmds.push({ cmd: "restore" }); } } while (flags & 0x20); } else { var endPtsOfContours = []; var j, jj; for (j = 0; j < numberOfContours; j++) { endPtsOfContours.push(code[i] << 8 | code[i + 1]); i += 2; } var instructionLength = code[i] << 8 | code[i + 1]; i += 2 + instructionLength; var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; var points = []; while (points.length < numberOfPoints) { flags = code[i++]; var repeat = 1; if (flags & 0x08) { repeat += code[i++]; } while (repeat-- > 0) { points.push({ flags }); } } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x12) { case 0x00: x += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x02: x -= code[i++]; break; case 0x12: x += code[i++]; break; } points[j].x = x; } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x24) { case 0x00: y += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x04: y -= code[i++]; break; case 0x24: y += code[i++]; break; } points[j].y = y; } var startPoint = 0; for (i = 0; i < numberOfContours; i++) { var endPoint = endPtsOfContours[i]; var contour = points.slice(startPoint, endPoint + 1); if (contour[0].flags & 1) { contour.push(contour[0]); } else if (contour[contour.length - 1].flags & 1) { contour.unshift(contour[contour.length - 1]); } else { var p = { flags: 1, x: (contour[0].x + contour[contour.length - 1].x) / 2, y: (contour[0].y + contour[contour.length - 1].y) / 2 }; contour.unshift(p); contour.push(p); } moveTo(contour[0].x, contour[0].y); for (j = 1, jj = contour.length; j < jj; j++) { if (contour[j].flags & 1) { lineTo(contour[j].x, contour[j].y); } else if (contour[j + 1].flags & 1) { quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); j++; } else { quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); } } startPoint = endPoint + 1; } } } function compileCharString(charStringCode, cmds, font, glyphId) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function bezierCurveTo(x1, y1, x2, y2, x, y) { cmds.push({ cmd: "bezierCurveTo", args: [x1, y1, x2, y2, x, y] }); } var stack = []; var x = 0, y = 0; var stems = 0; function parse(code) { var i = 0; while (i < code.length) { var stackClean = false; var v = code[i++]; var xa, xb, ya, yb, y1, y2, y3, n, subrCode; switch (v) { case 1: stems += stack.length >> 1; stackClean = true; break; case 3: stems += stack.length >> 1; stackClean = true; break; case 4: y += stack.pop(); moveTo(x, y); stackClean = true; break; case 5: while (stack.length > 0) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } break; case 6: while (stack.length > 0) { x += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } y += stack.shift(); lineTo(x, y); } break; case 7: while (stack.length > 0) { y += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } x += stack.shift(); lineTo(x, y); } break; case 8: while (stack.length > 0) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 10: n = stack.pop(); subrCode = null; if (font.isCFFCIDFont) { const fdIndex = font.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < font.fdArray.length) { const fontDict = font.fdArray[fdIndex]; let subrs; if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { subrs = fontDict.privateDict.subrsIndex.objects; } if (subrs) { n += getSubroutineBias(subrs); subrCode = subrs[n]; } } else { (0, _util.warn)("Invalid fd index for glyph index."); } } else { subrCode = font.subrs[n + font.subrsBias]; } if (subrCode) { parse(subrCode); } break; case 11: return; case 12: v = code[i++]; switch (v) { case 34: xa = x + stack.shift(); xb = xa + stack.shift(); y1 = y + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y, xb, y1, x, y1); xa = x + stack.shift(); xb = xa + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y, x, y); break; case 35: xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); stack.pop(); break; case 36: xa = x + stack.shift(); y1 = y + stack.shift(); xb = xa + stack.shift(); y2 = y1 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y2, x, y2); xa = x + stack.shift(); xb = xa + stack.shift(); y3 = y2 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y2, xb, y3, x, y); break; case 37: var x0 = x, y0 = y; xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb; if (Math.abs(x - x0) > Math.abs(y - y0)) { x += stack.shift(); } else { y += stack.shift(); } bezierCurveTo(xa, ya, xb, yb, x, y); break; default: throw new _util.FormatError(`unknown operator: 12 ${v}`); } break; case 14: if (stack.length >= 4) { var achar = stack.pop(); var bchar = stack.pop(); y = stack.pop(); x = stack.pop(); cmds.push({ cmd: "save" }); cmds.push({ cmd: "translate", args: [x, y] }); var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); cmds.push({ cmd: "restore" }); cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); } return; case 18: stems += stack.length >> 1; stackClean = true; break; case 19: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 20: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 21: y += stack.pop(); x += stack.pop(); moveTo(x, y); stackClean = true; break; case 22: x += stack.pop(); moveTo(x, y); stackClean = true; break; case 23: stems += stack.length >> 1; stackClean = true; break; case 24: while (stack.length > 2) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } x += stack.shift(); y += stack.shift(); lineTo(x, y); break; case 25: while (stack.length > 6) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); break; case 26: if (stack.length % 2) { x += stack.shift(); } while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 27: if (stack.length % 2) { y += stack.shift(); } while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb; bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 28: stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); i += 2; break; case 29: n = stack.pop() + font.gsubrsBias; subrCode = font.gsubrs[n]; if (subrCode) { parse(subrCode); } break; case 30: while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 31: while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; default: if (v < 32) { throw new _util.FormatError(`unknown operator: ${v}`); } if (v < 247) { stack.push(v - 139); } else if (v < 251) { stack.push((v - 247) * 256 + code[i++] + 108); } else if (v < 255) { stack.push(-(v - 251) * 256 - code[i++] - 108); } else { stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); i += 4; } break; } if (stackClean) { stack.length = 0; } } } parse(charStringCode); } const NOOP = []; class CompiledFont { constructor(fontMatrix) { if (this.constructor === CompiledFont) { (0, _util.unreachable)("Cannot initialize CompiledFont."); } this.fontMatrix = fontMatrix; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null); } getPathJs(unicode) { const cmap = lookupCmap(this.cmap, unicode); let fn = this.compiledGlyphs[cmap.glyphId]; if (!fn) { fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId); this.compiledGlyphs[cmap.glyphId] = fn; } if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) { this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId; } return fn; } compileGlyph(code, glyphId) { if (!code || code.length === 0 || code[0] === 14) { return NOOP; } let fontMatrix = this.fontMatrix; if (this.isCFFCIDFont) { const fdIndex = this.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < this.fdArray.length) { const fontDict = this.fdArray[fdIndex]; fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; } else { (0, _util.warn)("Invalid fd index for glyph index."); } } const cmds = []; cmds.push({ cmd: "save" }); cmds.push({ cmd: "transform", args: fontMatrix.slice() }); cmds.push({ cmd: "scale", args: ["size", "-size"] }); this.compileGlyphImpl(code, cmds, glyphId); cmds.push({ cmd: "restore" }); return cmds; } compileGlyphImpl() { (0, _util.unreachable)("Children classes should implement this."); } hasBuiltPath(unicode) { const cmap = lookupCmap(this.cmap, unicode); return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined; } } class TrueTypeCompiled extends CompiledFont { constructor(glyphs, cmap, fontMatrix) { super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); this.glyphs = glyphs; this.cmap = cmap; } compileGlyphImpl(code, cmds) { compileGlyf(code, cmds, this); } } class Type2Compiled extends CompiledFont { constructor(cffInfo, cmap, fontMatrix, glyphNameMap) { super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); this.glyphs = cffInfo.glyphs; this.gsubrs = cffInfo.gsubrs || []; this.subrs = cffInfo.subrs || []; this.cmap = cmap; this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); this.gsubrsBias = getSubroutineBias(this.gsubrs); this.subrsBias = getSubroutineBias(this.subrs); this.isCFFCIDFont = cffInfo.isCFFCIDFont; this.fdSelect = cffInfo.fdSelect; this.fdArray = cffInfo.fdArray; } compileGlyphImpl(code, cmds, glyphId) { compileCharString(code, cmds, this, glyphId); } } return { create: function FontRendererFactory_create(font, seacAnalysisEnabled) { var data = new Uint8Array(font.data); var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; var numTables = getUshort(data, 4); for (var i = 0, p = 12; i < numTables; i++, p += 16) { var tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); var offset = getLong(data, p + 8); var length = getLong(data, p + 12); switch (tag) { case "cmap": cmap = parseCmap(data, offset); break; case "glyf": glyf = data.subarray(offset, offset + length); break; case "loca": loca = data.subarray(offset, offset + length); break; case "head": unitsPerEm = getUshort(data, offset + 18); indexToLocFormat = getUshort(data, offset + 50); break; case "CFF ": cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); break; } } if (glyf) { var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); } return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); } }; }(); exports.FontRendererFactory = FontRendererFactory; /***/ }), /* 38 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Type1Parser = void 0; var _encodings = __w_pdfjs_require__(33); var _core_utils = __w_pdfjs_require__(8); var _stream = __w_pdfjs_require__(12); var _util = __w_pdfjs_require__(2); var HINTING_ENABLED = false; var Type1CharString = function Type1CharStringClosure() { var COMMAND_MAP = { hstem: [1], vstem: [3], vmoveto: [4], rlineto: [5], hlineto: [6], vlineto: [7], rrcurveto: [8], callsubr: [10], flex: [12, 35], drop: [12, 18], endchar: [14], rmoveto: [21], hmoveto: [22], vhcurveto: [30], hvcurveto: [31] }; function Type1CharString() { this.width = 0; this.lsb = 0; this.flexing = false; this.output = []; this.stack = []; } Type1CharString.prototype = { convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) { var count = encoded.length; var error = false; var wx, sbx, subrNumber; for (var i = 0; i < count; i++) { var value = encoded[i]; if (value < 32) { if (value === 12) { value = (value << 8) + encoded[++i]; } switch (value) { case 1: { this.stack = []; break; } case 3: { this.stack = []; break; } case 4: if (this.flexing) { if (this.stack.length < 1) { error = true; break; } var dy = this.stack.pop(); this.stack.push(0, dy); break; } error = this.executeCommand(1, COMMAND_MAP.vmoveto); break; case 5: error = this.executeCommand(2, COMMAND_MAP.rlineto); break; case 6: error = this.executeCommand(1, COMMAND_MAP.hlineto); break; case 7: error = this.executeCommand(1, COMMAND_MAP.vlineto); break; case 8: error = this.executeCommand(6, COMMAND_MAP.rrcurveto); break; case 9: this.stack = []; break; case 10: if (this.stack.length < 1) { error = true; break; } subrNumber = this.stack.pop(); if (!subrs[subrNumber]) { error = true; break; } error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); break; case 11: return error; case 13: if (this.stack.length < 2) { error = true; break; } wx = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx); error = this.executeCommand(2, COMMAND_MAP.hmoveto); break; case 14: this.output.push(COMMAND_MAP.endchar[0]); break; case 21: if (this.flexing) { break; } error = this.executeCommand(2, COMMAND_MAP.rmoveto); break; case 22: if (this.flexing) { this.stack.push(0); break; } error = this.executeCommand(1, COMMAND_MAP.hmoveto); break; case 30: error = this.executeCommand(4, COMMAND_MAP.vhcurveto); break; case 31: error = this.executeCommand(4, COMMAND_MAP.hvcurveto); break; case (12 << 8) + 0: this.stack = []; break; case (12 << 8) + 1: { this.stack = []; break; } case (12 << 8) + 2: { this.stack = []; break; } case (12 << 8) + 6: if (seacAnalysisEnabled) { const asb = this.stack[this.stack.length - 5]; this.seac = this.stack.splice(-4, 4); this.seac[0] += this.lsb - asb; error = this.executeCommand(0, COMMAND_MAP.endchar); } else { error = this.executeCommand(4, COMMAND_MAP.endchar); } break; case (12 << 8) + 7: if (this.stack.length < 4) { error = true; break; } this.stack.pop(); wx = this.stack.pop(); var sby = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx, sby); error = this.executeCommand(3, COMMAND_MAP.rmoveto); break; case (12 << 8) + 12: if (this.stack.length < 2) { error = true; break; } var num2 = this.stack.pop(); var num1 = this.stack.pop(); this.stack.push(num1 / num2); break; case (12 << 8) + 16: if (this.stack.length < 2) { error = true; break; } subrNumber = this.stack.pop(); var numArgs = this.stack.pop(); if (subrNumber === 0 && numArgs === 3) { var flexArgs = this.stack.splice(this.stack.length - 17, 17); this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); error = this.executeCommand(13, COMMAND_MAP.flex, true); this.flexing = false; this.stack.push(flexArgs[15], flexArgs[16]); } else if (subrNumber === 1 && numArgs === 0) { this.flexing = true; } break; case (12 << 8) + 17: break; case (12 << 8) + 33: this.stack = []; break; default: (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); break; } if (error) { break; } continue; } else if (value <= 246) { value = value - 139; } else if (value <= 250) { value = (value - 247) * 256 + encoded[++i] + 108; } else if (value <= 254) { value = -((value - 251) * 256) - encoded[++i] - 108; } else { value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; } this.stack.push(value); } return error; }, executeCommand(howManyArgs, command, keepStack) { var stackLength = this.stack.length; if (howManyArgs > stackLength) { return true; } var start = stackLength - howManyArgs; for (var i = start; i < stackLength; i++) { var value = this.stack[i]; if (Number.isInteger(value)) { this.output.push(28, value >> 8 & 0xff, value & 0xff); } else { value = 65536 * value | 0; this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } } this.output.push.apply(this.output, command); if (keepStack) { this.stack.splice(start, howManyArgs); } else { this.stack.length = 0; } return false; } }; return Type1CharString; }(); var Type1Parser = function Type1ParserClosure() { var EEXEC_ENCRYPT_KEY = 55665; var CHAR_STRS_ENCRYPT_KEY = 4330; function isHexDigit(code) { return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; } function decrypt(data, key, discardNumber) { if (discardNumber >= data.length) { return new Uint8Array(0); } var r = key | 0, c1 = 52845, c2 = 22719, i, j; for (i = 0; i < discardNumber; i++) { r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; } var count = data.length - discardNumber; var decrypted = new Uint8Array(count); for (i = discardNumber, j = 0; j < count; i++, j++) { var value = data[i]; decrypted[j] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } return decrypted; } function decryptAscii(data, key, discardNumber) { var r = key | 0, c1 = 52845, c2 = 22719; var count = data.length, maybeLength = count >>> 1; var decrypted = new Uint8Array(maybeLength); var i, j; for (i = 0, j = 0; i < count; i++) { var digit1 = data[i]; if (!isHexDigit(digit1)) { continue; } i++; var digit2; while (i < count && !isHexDigit(digit2 = data[i])) { i++; } if (i < count) { var value = parseInt(String.fromCharCode(digit1, digit2), 16); decrypted[j++] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } } return decrypted.slice(discardNumber, j); } function isSpecial(c) { return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; } function Type1Parser(stream, encrypted, seacAnalysisEnabled) { if (encrypted) { var data = stream.getBytes(); var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); } this.seacAnalysisEnabled = !!seacAnalysisEnabled; this.stream = stream; this.nextChar(); } Type1Parser.prototype = { readNumberArray: function Type1Parser_readNumberArray() { this.getToken(); var array = []; while (true) { var token = this.getToken(); if (token === null || token === "]" || token === "}") { break; } array.push(parseFloat(token || 0)); } return array; }, readNumber: function Type1Parser_readNumber() { var token = this.getToken(); return parseFloat(token || 0); }, readInt: function Type1Parser_readInt() { var token = this.getToken(); return parseInt(token || 0, 10) | 0; }, readBoolean: function Type1Parser_readBoolean() { var token = this.getToken(); return token === "true" ? 1 : 0; }, nextChar: function Type1_nextChar() { return this.currentChar = this.stream.getByte(); }, getToken: function Type1Parser_getToken() { var comment = false; var ch = this.currentChar; while (true) { if (ch === -1) { return null; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } if (isSpecial(ch)) { this.nextChar(); return String.fromCharCode(ch); } var token = ""; do { token += String.fromCharCode(ch); ch = this.nextChar(); } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); return token; }, readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) { if (lenIV === -1) { return bytes; } return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); }, extractFontProgram: function Type1Parser_extractFontProgram(properties) { var stream = this.stream; var subrs = [], charstrings = []; var privateData = Object.create(null); privateData.lenIV = 4; var program = { subrs: [], charstrings: [], properties: { privateData } }; var token, length, data, lenIV, encoded; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "CharStrings": this.getToken(); this.getToken(); this.getToken(); this.getToken(); while (true) { token = this.getToken(); if (token === null || token === "end") { break; } if (token !== "/") { continue; } var glyph = this.getToken(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } charstrings.push({ glyph, encoded }); } break; case "Subrs": this.readInt(); this.getToken(); while (this.getToken() === "dup") { const index = this.readInt(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } subrs[index] = encoded; } break; case "BlueValues": case "OtherBlues": case "FamilyBlues": case "FamilyOtherBlues": var blueArray = this.readNumberArray(); if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { program.properties.privateData[token] = blueArray; } break; case "StemSnapH": case "StemSnapV": program.properties.privateData[token] = this.readNumberArray(); break; case "StdHW": case "StdVW": program.properties.privateData[token] = this.readNumberArray()[0]; break; case "BlueShift": case "lenIV": case "BlueFuzz": case "BlueScale": case "LanguageGroup": case "ExpansionFactor": program.properties.privateData[token] = this.readNumber(); break; case "ForceBold": program.properties.privateData[token] = this.readBoolean(); break; } } for (var i = 0; i < charstrings.length; i++) { glyph = charstrings[i].glyph; encoded = charstrings[i].encoded; var charString = new Type1CharString(); var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); var output = charString.output; if (error) { output = [14]; } const charStringObject = { glyphName: glyph, charstring: output, width: charString.width, lsb: charString.lsb, seac: charString.seac }; if (glyph === ".notdef") { program.charstrings.unshift(charStringObject); } else { program.charstrings.push(charStringObject); } if (properties.builtInEncoding) { const index = properties.builtInEncoding.indexOf(glyph); if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) { properties.widths[index] = charString.width; } } } return program; }, extractFontHeader: function Type1Parser_extractFontHeader(properties) { var token; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "FontMatrix": var matrix = this.readNumberArray(); properties.fontMatrix = matrix; break; case "Encoding": var encodingArg = this.getToken(); var encoding; if (!/^\d+$/.test(encodingArg)) { encoding = (0, _encodings.getEncoding)(encodingArg); } else { encoding = []; var size = parseInt(encodingArg, 10) | 0; this.getToken(); for (var j = 0; j < size; j++) { token = this.getToken(); while (token !== "dup" && token !== "def") { token = this.getToken(); if (token === null) { return; } } if (token === "def") { break; } var index = this.readInt(); this.getToken(); var glyph = this.getToken(); encoding[index] = glyph; this.getToken(); } } properties.builtInEncoding = encoding; break; case "FontBBox": var fontBBox = this.readNumberArray(); properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; break; } } } }; return Type1Parser; }(); exports.Type1Parser = Type1Parser; /***/ }), /* 39 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getTilingPatternIR = getTilingPatternIR; exports.Pattern = void 0; var _util = __w_pdfjs_require__(2); var _colorspace = __w_pdfjs_require__(23); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); var ShadingType = { FUNCTION_BASED: 1, AXIAL: 2, RADIAL: 3, FREE_FORM_MESH: 4, LATTICE_FORM_MESH: 5, COONS_PATCH_MESH: 6, TENSOR_PATCH_MESH: 7 }; var Pattern = function PatternClosure() { function Pattern() { (0, _util.unreachable)("should not call Pattern constructor"); } Pattern.prototype = { getPattern: function Pattern_getPattern(ctx) { (0, _util.unreachable)(`Should not call Pattern.getStyle: ${ctx}`); } }; Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) { var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; var type = dict.get("ShadingType"); try { switch (type) { case ShadingType.AXIAL: case ShadingType.RADIAL: return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache); case ShadingType.FREE_FORM_MESH: case ShadingType.LATTICE_FORM_MESH: case ShadingType.COONS_PATCH_MESH: case ShadingType.TENSOR_PATCH_MESH: return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache); default: throw new _util.FormatError("Unsupported ShadingType: " + type); } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.shadingPattern }); (0, _util.warn)(ex); return new Shadings.Dummy(); } }; return Pattern; }(); exports.Pattern = Pattern; var Shadings = {}; Shadings.SMALL_NUMBER = 1e-6; Shadings.RadialAxial = function RadialAxialClosure() { function RadialAxial(dict, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) { this.matrix = matrix; this.coordsArr = dict.getArray("Coords"); this.shadingType = dict.get("ShadingType"); this.type = "Pattern"; const cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"), xref, resources, pdfFunctionFactory, localColorSpaceCache }); this.cs = cs; const bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } var t0 = 0.0, t1 = 1.0; if (dict.has("Domain")) { var domainArr = dict.getArray("Domain"); t0 = domainArr[0]; t1 = domainArr[1]; } var extendStart = false, extendEnd = false; if (dict.has("Extend")) { var extendArr = dict.getArray("Extend"); extendStart = extendArr[0]; extendEnd = extendArr[1]; } if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { var x1 = this.coordsArr[0]; var y1 = this.coordsArr[1]; var r1 = this.coordsArr[2]; var x2 = this.coordsArr[3]; var y2 = this.coordsArr[4]; var r2 = this.coordsArr[5]; var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); if (r1 <= r2 + distance && r2 <= r1 + distance) { (0, _util.warn)("Unsupported radial gradient."); } } this.extendStart = extendStart; this.extendEnd = extendEnd; var fnObj = dict.getRaw("Function"); var fn = pdfFunctionFactory.createFromArray(fnObj); const NUMBER_OF_SAMPLES = 10; const step = (t1 - t0) / NUMBER_OF_SAMPLES; var colorStops = this.colorStops = []; if (t0 >= t1 || step <= 0) { (0, _util.info)("Bad shading domain."); return; } var color = new Float32Array(cs.numComps), ratio = new Float32Array(1); var rgbColor; for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) { ratio[0] = t0 + i * step; fn(ratio, 0, color, 0); rgbColor = cs.getRgb(color, 0); var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]); } var background = "transparent"; if (dict.has("Background")) { rgbColor = cs.getRgb(dict.get("Background"), 0); background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); } if (!extendStart) { colorStops.unshift([0, background]); colorStops[1][0] += Shadings.SMALL_NUMBER; } if (!extendEnd) { colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; colorStops.push([1, background]); } this.colorStops = colorStops; } RadialAxial.prototype = { getIR: function RadialAxial_getIR() { var coordsArr = this.coordsArr; var shadingType = this.shadingType; var type, p0, p1, r0, r1; if (shadingType === ShadingType.AXIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[2], coordsArr[3]]; r0 = null; r1 = null; type = "axial"; } else if (shadingType === ShadingType.RADIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[3], coordsArr[4]]; r0 = coordsArr[2]; r1 = coordsArr[5]; type = "radial"; } else { (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`); } var matrix = this.matrix; if (matrix) { p0 = _util.Util.applyTransform(p0, matrix); p1 = _util.Util.applyTransform(p1, matrix); if (shadingType === ShadingType.RADIAL) { var scale = _util.Util.singularValueDecompose2dScale(matrix); r0 *= scale[0]; r1 *= scale[1]; } } return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; } }; return RadialAxial; }(); Shadings.Mesh = function MeshClosure() { function MeshStreamReader(stream, context) { this.stream = stream; this.context = context; this.buffer = 0; this.bufferLength = 0; var numComps = context.numComps; this.tmpCompsBuf = new Float32Array(numComps); var csNumComps = context.colorSpace.numComps; this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; } MeshStreamReader.prototype = { get hasData() { if (this.stream.end) { return this.stream.pos < this.stream.end; } if (this.bufferLength > 0) { return true; } var nextByte = this.stream.getByte(); if (nextByte < 0) { return false; } this.buffer = nextByte; this.bufferLength = 8; return true; }, readBits: function MeshStreamReader_readBits(n) { var buffer = this.buffer; var bufferLength = this.bufferLength; if (n === 32) { if (bufferLength === 0) { return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; } buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); var nextByte = this.stream.getByte(); this.buffer = nextByte & (1 << bufferLength) - 1; return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; } if (n === 8 && bufferLength === 0) { return this.stream.getByte(); } while (bufferLength < n) { buffer = buffer << 8 | this.stream.getByte(); bufferLength += 8; } bufferLength -= n; this.bufferLength = bufferLength; this.buffer = buffer & (1 << bufferLength) - 1; return buffer >> bufferLength; }, align: function MeshStreamReader_align() { this.buffer = 0; this.bufferLength = 0; }, readFlag: function MeshStreamReader_readFlag() { return this.readBits(this.context.bitsPerFlag); }, readCoordinate: function MeshStreamReader_readCoordinate() { var bitsPerCoordinate = this.context.bitsPerCoordinate; var xi = this.readBits(bitsPerCoordinate); var yi = this.readBits(bitsPerCoordinate); var decode = this.context.decode; var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; }, readComponents: function MeshStreamReader_readComponents() { var numComps = this.context.numComps; var bitsPerComponent = this.context.bitsPerComponent; var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; var decode = this.context.decode; var components = this.tmpCompsBuf; for (var i = 0, j = 4; i < numComps; i++, j += 2) { var ci = this.readBits(bitsPerComponent); components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; } var color = this.tmpCsCompsBuf; if (this.context.colorFn) { this.context.colorFn(components, 0, color, 0); } return this.context.colorSpace.getRgb(color, 0); } }; function decodeType4Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = []; var verticesLeft = 0; while (reader.hasData) { var f = reader.readFlag(); var coord = reader.readCoordinate(); var color = reader.readComponents(); if (verticesLeft === 0) { if (!(0 <= f && f <= 2)) { throw new _util.FormatError("Unknown type4 flag"); } switch (f) { case 0: verticesLeft = 3; break; case 1: ps.push(ps[ps.length - 2], ps[ps.length - 1]); verticesLeft = 1; break; case 2: ps.push(ps[ps.length - 3], ps[ps.length - 1]); verticesLeft = 1; break; } } ps.push(coords.length); coords.push(coord); colors.push(color); verticesLeft--; reader.align(); } mesh.figures.push({ type: "triangles", coords: new Int32Array(ps), colors: new Int32Array(ps) }); } function decodeType5Shading(mesh, reader, verticesPerRow) { var coords = mesh.coords; var colors = mesh.colors; var ps = []; while (reader.hasData) { var coord = reader.readCoordinate(); var color = reader.readComponents(); ps.push(coords.length); coords.push(coord); colors.push(color); } mesh.figures.push({ type: "lattice", coords: new Int32Array(ps), colors: new Int32Array(ps), verticesPerRow }); } var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; var TRIANGLE_DENSITY = 20; var getB = function getBClosure() { function buildB(count) { var lut = []; for (var i = 0; i <= count; i++) { var t = i / count, t_ = 1 - t; lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); } return lut; } var cache = []; return function getB(count) { if (!cache[count]) { cache[count] = buildB(count); } return cache[count]; }; }(); function buildFigureFromPatch(mesh, index) { var figure = mesh.figures[index]; (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); var coords = mesh.coords, colors = mesh.colors; var pi = figure.coords; var ci = figure.colors; var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0])); splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1])); splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); var verticesPerRow = splitXBy + 1; var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); var k = 0; var cl = new Uint8Array(3), cr = new Uint8Array(3); var c0 = colors[ci[0]], c1 = colors[ci[1]], c2 = colors[ci[2]], c3 = colors[ci[3]]; var bRow = getB(splitYBy), bCol = getB(splitXBy); for (var row = 0; row <= splitYBy; row++) { cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; for (var col = 0; col <= splitXBy; col++, k++) { if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { continue; } var x = 0, y = 0; var q = 0; for (var i = 0; i <= 3; i++) { for (var j = 0; j <= 3; j++, q++) { var m = bRow[row][i] * bCol[col][j]; x += coords[pi[q]][0] * m; y += coords[pi[q]][1] * m; } } figureCoords[k] = coords.length; coords.push([x, y]); figureColors[k] = colors.length; var newColor = new Uint8Array(3); newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; colors.push(newColor); } } figureCoords[0] = pi[0]; figureColors[0] = ci[0]; figureCoords[splitXBy] = pi[3]; figureColors[splitXBy] = ci[1]; figureCoords[verticesPerRow * splitYBy] = pi[12]; figureColors[verticesPerRow * splitYBy] = ci[2]; figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; mesh.figures[index] = { type: "lattice", coords: figureCoords, colors: figureColors, verticesPerRow }; } function decodeType6Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type6 flag"); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[11] = pi + 7; ps[4] = pi + 1; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[11] = pi + 3; ps[4] = ps[2]; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } ps[5] = coords.length; coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); ps[6] = coords.length; coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); ps[9] = coords.length; coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); ps[10] = coords.length; coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); mesh.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function decodeType7Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type7 flag"); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7; ps[4] = pi + 1; ps[5] = pi + 12; ps[6] = pi + 15; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = ps[2]; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } mesh.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function updateBounds(mesh) { var minX = mesh.coords[0][0], minY = mesh.coords[0][1], maxX = minX, maxY = minY; for (var i = 1, ii = mesh.coords.length; i < ii; i++) { var x = mesh.coords[i][0], y = mesh.coords[i][1]; minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } mesh.bounds = [minX, minY, maxX, maxY]; } function packData(mesh) { var i, ii, j, jj; var coords = mesh.coords; var coordsPacked = new Float32Array(coords.length * 2); for (i = 0, j = 0, ii = coords.length; i < ii; i++) { var xy = coords[i]; coordsPacked[j++] = xy[0]; coordsPacked[j++] = xy[1]; } mesh.coords = coordsPacked; var colors = mesh.colors; var colorsPacked = new Uint8Array(colors.length * 3); for (i = 0, j = 0, ii = colors.length; i < ii; i++) { var c = colors[i]; colorsPacked[j++] = c[0]; colorsPacked[j++] = c[1]; colorsPacked[j++] = c[2]; } mesh.colors = colorsPacked; var figures = mesh.figures; for (i = 0, ii = figures.length; i < ii; i++) { var figure = figures[i], ps = figure.coords, cs = figure.colors; for (j = 0, jj = ps.length; j < jj; j++) { ps[j] *= 2; cs[j] *= 3; } } } function Mesh(stream, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) { if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError("Mesh data is not a stream"); } var dict = stream.dict; this.matrix = matrix; this.shadingType = dict.get("ShadingType"); this.type = "Pattern"; const bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } const cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"), xref, resources, pdfFunctionFactory, localColorSpaceCache }); this.cs = cs; this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; var fnObj = dict.getRaw("Function"); var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; this.coords = []; this.colors = []; this.figures = []; var decodeContext = { bitsPerCoordinate: dict.get("BitsPerCoordinate"), bitsPerComponent: dict.get("BitsPerComponent"), bitsPerFlag: dict.get("BitsPerFlag"), decode: dict.getArray("Decode"), colorFn: fn, colorSpace: cs, numComps: fn ? 1 : cs.numComps }; var reader = new MeshStreamReader(stream, decodeContext); var patchMesh = false; switch (this.shadingType) { case ShadingType.FREE_FORM_MESH: decodeType4Shading(this, reader); break; case ShadingType.LATTICE_FORM_MESH: var verticesPerRow = dict.get("VerticesPerRow") | 0; if (verticesPerRow < 2) { throw new _util.FormatError("Invalid VerticesPerRow"); } decodeType5Shading(this, reader, verticesPerRow); break; case ShadingType.COONS_PATCH_MESH: decodeType6Shading(this, reader); patchMesh = true; break; case ShadingType.TENSOR_PATCH_MESH: decodeType7Shading(this, reader); patchMesh = true; break; default: (0, _util.unreachable)("Unsupported mesh type."); break; } if (patchMesh) { updateBounds(this); for (var i = 0, ii = this.figures.length; i < ii; i++) { buildFigureFromPatch(this, i); } } updateBounds(this); packData(this); } Mesh.prototype = { getIR: function Mesh_getIR() { return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background]; } }; return Mesh; }(); Shadings.Dummy = function DummyClosure() { function Dummy() { this.type = "Pattern"; } Dummy.prototype = { getIR: function Dummy_getIR() { return ["Dummy"]; } }; return Dummy; }(); function getTilingPatternIR(operatorList, dict, args) { const matrix = dict.getArray("Matrix"); const bbox = _util.Util.normalizeRect(dict.getArray("BBox")); const xstep = dict.get("XStep"); const ystep = dict.get("YStep"); const paintType = dict.get("PaintType"); const tilingType = dict.get("TilingType"); if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`); } return ["TilingPattern", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; } /***/ }), /* 40 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.isPDFFunction = isPDFFunction; exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0; var _primitives = __w_pdfjs_require__(5); var _util = __w_pdfjs_require__(2); var _ps_parser = __w_pdfjs_require__(41); var _image_utils = __w_pdfjs_require__(24); class PDFFunctionFactory { constructor({ xref, isEvalSupported = true }) { this.xref = xref; this.isEvalSupported = isEvalSupported !== false; this._localFunctionCache = null; } create(fn) { const cachedFunction = this.getCached(fn); if (cachedFunction) { return cachedFunction; } const parsedFunction = PDFFunction.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn }); this._cache(fn, parsedFunction); return parsedFunction; } createFromArray(fnObj) { const cachedFunction = this.getCached(fnObj); if (cachedFunction) { return cachedFunction; } const parsedFunction = PDFFunction.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj }); this._cache(fnObj, parsedFunction); return parsedFunction; } getCached(cacheKey) { let fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { if (!this._localFunctionCache) { this._localFunctionCache = new _image_utils.LocalFunctionCache(); } const localFunction = this._localFunctionCache.getByRef(fnRef); if (localFunction) { return localFunction; } } return null; } _cache(cacheKey, parsedFunction) { if (!parsedFunction) { throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); } let fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { if (!this._localFunctionCache) { this._localFunctionCache = new _image_utils.LocalFunctionCache(); } this._localFunctionCache.set(null, fnRef, parsedFunction); } } } exports.PDFFunctionFactory = PDFFunctionFactory; function toNumberArray(arr) { if (!Array.isArray(arr)) { return null; } const length = arr.length; for (let i = 0; i < length; i++) { if (typeof arr[i] !== "number") { const result = new Array(length); for (let j = 0; j < length; j++) { result[j] = +arr[j]; } return result; } } return arr; } var PDFFunction = function PDFFunctionClosure() { const CONSTRUCT_SAMPLED = 0; const CONSTRUCT_INTERPOLATED = 2; const CONSTRUCT_STICHED = 3; const CONSTRUCT_POSTSCRIPT = 4; return { getSampleArray(size, outputSize, bps, stream) { var i, ii; var length = 1; for (i = 0, ii = size.length; i < ii; i++) { length *= size[i]; } length *= outputSize; var array = new Array(length); var codeSize = 0; var codeBuf = 0; var sampleMul = 1.0 / (2.0 ** bps - 1); var strBytes = stream.getBytes((length * bps + 7) / 8); var strIdx = 0; for (i = 0; i < length; i++) { while (codeSize < bps) { codeBuf <<= 8; codeBuf |= strBytes[strIdx++]; codeSize += 8; } codeSize -= bps; array[i] = (codeBuf >> codeSize) * sampleMul; codeBuf &= (1 << codeSize) - 1; } return array; }, getIR({ xref, isEvalSupported, fn }) { var dict = fn.dict; if (!dict) { dict = fn; } var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript]; var typeNum = dict.get("FunctionType"); var typeFn = types[typeNum]; if (!typeFn) { throw new _util.FormatError("Unknown type of function"); } return typeFn.call(this, { xref, isEvalSupported, fn, dict }); }, fromIR({ xref, isEvalSupported, IR }) { var type = IR[0]; switch (type) { case CONSTRUCT_SAMPLED: return this.constructSampledFromIR({ xref, isEvalSupported, IR }); case CONSTRUCT_INTERPOLATED: return this.constructInterpolatedFromIR({ xref, isEvalSupported, IR }); case CONSTRUCT_STICHED: return this.constructStichedFromIR({ xref, isEvalSupported, IR }); default: return this.constructPostScriptFromIR({ xref, isEvalSupported, IR }); } }, parse({ xref, isEvalSupported, fn }) { const IR = this.getIR({ xref, isEvalSupported, fn }); return this.fromIR({ xref, isEvalSupported, IR }); }, parseArray({ xref, isEvalSupported, fnObj }) { if (!Array.isArray(fnObj)) { return this.parse({ xref, isEvalSupported, fn: fnObj }); } var fnArray = []; for (var j = 0, jj = fnObj.length; j < jj; j++) { fnArray.push(this.parse({ xref, isEvalSupported, fn: xref.fetchIfRef(fnObj[j]) })); } return function (src, srcOffset, dest, destOffset) { for (var i = 0, ii = fnArray.length; i < ii; i++) { fnArray[i](src, srcOffset, dest, destOffset + i); } }; }, constructSampled({ xref, isEvalSupported, fn, dict }) { function toMultiArray(arr) { var inputLength = arr.length; var out = []; var index = 0; for (var i = 0; i < inputLength; i += 2) { out[index] = [arr[i], arr[i + 1]]; ++index; } return out; } var domain = toNumberArray(dict.getArray("Domain")); var range = toNumberArray(dict.getArray("Range")); if (!domain || !range) { throw new _util.FormatError("No domain or range"); } var inputSize = domain.length / 2; var outputSize = range.length / 2; domain = toMultiArray(domain); range = toMultiArray(range); var size = toNumberArray(dict.getArray("Size")); var bps = dict.get("BitsPerSample"); var order = dict.get("Order") || 1; if (order !== 1) { (0, _util.info)("No support for cubic spline interpolation: " + order); } var encode = toNumberArray(dict.getArray("Encode")); if (!encode) { encode = []; for (var i = 0; i < inputSize; ++i) { encode.push([0, size[i] - 1]); } } else { encode = toMultiArray(encode); } var decode = toNumberArray(dict.getArray("Decode")); if (!decode) { decode = range; } else { decode = toMultiArray(decode); } var samples = this.getSampleArray(size, outputSize, bps, fn); return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, 2 ** bps - 1, range]; }, constructSampledFromIR({ xref, isEvalSupported, IR }) { function interpolate(x, xmin, xmax, ymin, ymax) { return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); } return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) { var m = IR[1]; var domain = IR[2]; var encode = IR[3]; var decode = IR[4]; var samples = IR[5]; var size = IR[6]; var n = IR[7]; var range = IR[9]; var cubeVertices = 1 << m; var cubeN = new Float64Array(cubeVertices); var cubeVertex = new Uint32Array(cubeVertices); var i, j; for (j = 0; j < cubeVertices; j++) { cubeN[j] = 1; } var k = n, pos = 1; for (i = 0; i < m; ++i) { var domain_2i = domain[i][0]; var domain_2i_1 = domain[i][1]; var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); var size_i = size[i]; e = Math.min(Math.max(e, 0), size_i - 1); var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; var n0 = e0 + 1 - e; var n1 = e - e0; var offset0 = e0 * k; var offset1 = offset0 + k; for (j = 0; j < cubeVertices; j++) { if (j & pos) { cubeN[j] *= n1; cubeVertex[j] += offset1; } else { cubeN[j] *= n0; cubeVertex[j] += offset0; } } k *= size_i; pos <<= 1; } for (j = 0; j < n; ++j) { var rj = 0; for (i = 0; i < cubeVertices; i++) { rj += samples[cubeVertex[i] + j] * cubeN[i]; } rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); } }; }, constructInterpolated({ xref, isEvalSupported, fn, dict }) { var c0 = toNumberArray(dict.getArray("C0")) || [0]; var c1 = toNumberArray(dict.getArray("C1")) || [1]; var n = dict.get("N"); var length = c0.length; var diff = []; for (var i = 0; i < length; ++i) { diff.push(c1[i] - c0[i]); } return [CONSTRUCT_INTERPOLATED, c0, diff, n]; }, constructInterpolatedFromIR({ xref, isEvalSupported, IR }) { var c0 = IR[1]; var diff = IR[2]; var n = IR[3]; var length = diff.length; return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) { var x = n === 1 ? src[srcOffset] : src[srcOffset] ** n; for (var j = 0; j < length; ++j) { dest[destOffset + j] = c0[j] + x * diff[j]; } }; }, constructStiched({ xref, isEvalSupported, fn, dict }) { var domain = toNumberArray(dict.getArray("Domain")); if (!domain) { throw new _util.FormatError("No domain"); } var inputSize = domain.length / 2; if (inputSize !== 1) { throw new _util.FormatError("Bad domain for stiched function"); } var fnRefs = dict.get("Functions"); var fns = []; for (var i = 0, ii = fnRefs.length; i < ii; ++i) { fns.push(this.parse({ xref, isEvalSupported, fn: xref.fetchIfRef(fnRefs[i]) })); } var bounds = toNumberArray(dict.getArray("Bounds")); var encode = toNumberArray(dict.getArray("Encode")); return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; }, constructStichedFromIR({ xref, isEvalSupported, IR }) { var domain = IR[1]; var bounds = IR[2]; var encode = IR[3]; var fns = IR[4]; var tmpBuf = new Float32Array(1); return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { var clip = function constructStichedFromIRClip(v, min, max) { if (v > max) { v = max; } else if (v < min) { v = min; } return v; }; var v = clip(src[srcOffset], domain[0], domain[1]); for (var i = 0, ii = bounds.length; i < ii; ++i) { if (v < bounds[i]) { break; } } var dmin = domain[0]; if (i > 0) { dmin = bounds[i - 1]; } var dmax = domain[1]; if (i < bounds.length) { dmax = bounds[i]; } var rmin = encode[2 * i]; var rmax = encode[2 * i + 1]; tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); fns[i](tmpBuf, 0, dest, destOffset); }; }, constructPostScript({ xref, isEvalSupported, fn, dict }) { var domain = toNumberArray(dict.getArray("Domain")); var range = toNumberArray(dict.getArray("Range")); if (!domain) { throw new _util.FormatError("No domain."); } if (!range) { throw new _util.FormatError("No range."); } var lexer = new _ps_parser.PostScriptLexer(fn); var parser = new _ps_parser.PostScriptParser(lexer); var code = parser.parse(); return [CONSTRUCT_POSTSCRIPT, domain, range, code]; }, constructPostScriptFromIR({ xref, isEvalSupported, IR }) { var domain = IR[1]; var range = IR[2]; var code = IR[3]; if (isEvalSupported && _util.IsEvalSupportedCached.value) { const compiled = new PostScriptCompiler().compile(code, domain, range); if (compiled) { return new Function("src", "srcOffset", "dest", "destOffset", compiled); } } (0, _util.info)("Unable to compile PS function"); var numOutputs = range.length >> 1; var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); var cache = Object.create(null); var MAX_CACHE_SIZE = 2048 * 4; var cache_available = MAX_CACHE_SIZE; var tmpBuf = new Float32Array(numInputs); return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) { var i, value; var key = ""; var input = tmpBuf; for (i = 0; i < numInputs; i++) { value = src[srcOffset + i]; input[i] = value; key += value + "_"; } var cachedValue = cache[key]; if (cachedValue !== undefined) { dest.set(cachedValue, destOffset); return; } var output = new Float32Array(numOutputs); var stack = evaluator.execute(input); var stackIndex = stack.length - numOutputs; for (i = 0; i < numOutputs; i++) { value = stack[stackIndex + i]; var bound = range[i * 2]; if (value < bound) { value = bound; } else { bound = range[i * 2 + 1]; if (value > bound) { value = bound; } } output[i] = value; } if (cache_available > 0) { cache_available--; cache[key] = output; } dest.set(output, destOffset); }; } }; }(); function isPDFFunction(v) { var fnDict; if (typeof v !== "object") { return false; } else if ((0, _primitives.isDict)(v)) { fnDict = v; } else if ((0, _primitives.isStream)(v)) { fnDict = v.dict; } else { return false; } return fnDict.has("FunctionType"); } var PostScriptStack = function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); } PostScriptStack.prototype = { push: function PostScriptStack_push(value) { if (this.stack.length >= MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } this.stack.push(value); }, pop: function PostScriptStack_pop() { if (this.stack.length <= 0) { throw new Error("PostScript function stack underflow."); } return this.stack.pop(); }, copy: function PostScriptStack_copy(n) { if (this.stack.length + n >= MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } var stack = this.stack; for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { stack.push(stack[i]); } }, index: function PostScriptStack_index(n) { this.push(this.stack[this.stack.length - n - 1]); }, roll: function PostScriptStack_roll(n, p) { var stack = this.stack; var l = stack.length - n; var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t; for (i = l, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = l, j = c - 1; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = c, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } } }; return PostScriptStack; }(); var PostScriptEvaluator = function PostScriptEvaluatorClosure() { function PostScriptEvaluator(operators) { this.operators = operators; } PostScriptEvaluator.prototype = { execute: function PostScriptEvaluator_execute(initialStack) { var stack = new PostScriptStack(initialStack); var counter = 0; var operators = this.operators; var length = operators.length; var operator, a, b; while (counter < length) { operator = operators[counter++]; if (typeof operator === "number") { stack.push(operator); continue; } switch (operator) { case "jz": b = stack.pop(); a = stack.pop(); if (!a) { counter = b; } break; case "j": a = stack.pop(); counter = a; break; case "abs": a = stack.pop(); stack.push(Math.abs(a)); break; case "add": b = stack.pop(); a = stack.pop(); stack.push(a + b); break; case "and": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a && b); } else { stack.push(a & b); } break; case "atan": a = stack.pop(); stack.push(Math.atan(a)); break; case "bitshift": b = stack.pop(); a = stack.pop(); if (a > 0) { stack.push(a << b); } else { stack.push(a >> b); } break; case "ceiling": a = stack.pop(); stack.push(Math.ceil(a)); break; case "copy": a = stack.pop(); stack.copy(a); break; case "cos": a = stack.pop(); stack.push(Math.cos(a)); break; case "cvi": a = stack.pop() | 0; stack.push(a); break; case "cvr": break; case "div": b = stack.pop(); a = stack.pop(); stack.push(a / b); break; case "dup": stack.copy(1); break; case "eq": b = stack.pop(); a = stack.pop(); stack.push(a === b); break; case "exch": stack.roll(2, 1); break; case "exp": b = stack.pop(); a = stack.pop(); stack.push(a ** b); break; case "false": stack.push(false); break; case "floor": a = stack.pop(); stack.push(Math.floor(a)); break; case "ge": b = stack.pop(); a = stack.pop(); stack.push(a >= b); break; case "gt": b = stack.pop(); a = stack.pop(); stack.push(a > b); break; case "idiv": b = stack.pop(); a = stack.pop(); stack.push(a / b | 0); break; case "index": a = stack.pop(); stack.index(a); break; case "le": b = stack.pop(); a = stack.pop(); stack.push(a <= b); break; case "ln": a = stack.pop(); stack.push(Math.log(a)); break; case "log": a = stack.pop(); stack.push(Math.log(a) / Math.LN10); break; case "lt": b = stack.pop(); a = stack.pop(); stack.push(a < b); break; case "mod": b = stack.pop(); a = stack.pop(); stack.push(a % b); break; case "mul": b = stack.pop(); a = stack.pop(); stack.push(a * b); break; case "ne": b = stack.pop(); a = stack.pop(); stack.push(a !== b); break; case "neg": a = stack.pop(); stack.push(-a); break; case "not": a = stack.pop(); if ((0, _util.isBool)(a)) { stack.push(!a); } else { stack.push(~a); } break; case "or": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a || b); } else { stack.push(a | b); } break; case "pop": stack.pop(); break; case "roll": b = stack.pop(); a = stack.pop(); stack.roll(a, b); break; case "round": a = stack.pop(); stack.push(Math.round(a)); break; case "sin": a = stack.pop(); stack.push(Math.sin(a)); break; case "sqrt": a = stack.pop(); stack.push(Math.sqrt(a)); break; case "sub": b = stack.pop(); a = stack.pop(); stack.push(a - b); break; case "true": stack.push(true); break; case "truncate": a = stack.pop(); a = a < 0 ? Math.ceil(a) : Math.floor(a); stack.push(a); break; case "xor": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a !== b); } else { stack.push(a ^ b); } break; default: throw new _util.FormatError(`Unknown operator ${operator}`); } } return stack.stack; } }; return PostScriptEvaluator; }(); exports.PostScriptEvaluator = PostScriptEvaluator; var PostScriptCompiler = function PostScriptCompilerClosure() { function AstNode(type) { this.type = type; } AstNode.prototype.visit = function (visitor) { (0, _util.unreachable)("abstract method"); }; function AstArgument(index, min, max) { AstNode.call(this, "args"); this.index = index; this.min = min; this.max = max; } AstArgument.prototype = Object.create(AstNode.prototype); AstArgument.prototype.visit = function (visitor) { visitor.visitArgument(this); }; function AstLiteral(number) { AstNode.call(this, "literal"); this.number = number; this.min = number; this.max = number; } AstLiteral.prototype = Object.create(AstNode.prototype); AstLiteral.prototype.visit = function (visitor) { visitor.visitLiteral(this); }; function AstBinaryOperation(op, arg1, arg2, min, max) { AstNode.call(this, "binary"); this.op = op; this.arg1 = arg1; this.arg2 = arg2; this.min = min; this.max = max; } AstBinaryOperation.prototype = Object.create(AstNode.prototype); AstBinaryOperation.prototype.visit = function (visitor) { visitor.visitBinaryOperation(this); }; function AstMin(arg, max) { AstNode.call(this, "max"); this.arg = arg; this.min = arg.min; this.max = max; } AstMin.prototype = Object.create(AstNode.prototype); AstMin.prototype.visit = function (visitor) { visitor.visitMin(this); }; function AstVariable(index, min, max) { AstNode.call(this, "var"); this.index = index; this.min = min; this.max = max; } AstVariable.prototype = Object.create(AstNode.prototype); AstVariable.prototype.visit = function (visitor) { visitor.visitVariable(this); }; function AstVariableDefinition(variable, arg) { AstNode.call(this, "definition"); this.variable = variable; this.arg = arg; } AstVariableDefinition.prototype = Object.create(AstNode.prototype); AstVariableDefinition.prototype.visit = function (visitor) { visitor.visitVariableDefinition(this); }; function ExpressionBuilderVisitor() { this.parts = []; } ExpressionBuilderVisitor.prototype = { visitArgument(arg) { this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); }, visitVariable(variable) { this.parts.push("v", variable.index); }, visitLiteral(literal) { this.parts.push(literal.number); }, visitBinaryOperation(operation) { this.parts.push("("); operation.arg1.visit(this); this.parts.push(" ", operation.op, " "); operation.arg2.visit(this); this.parts.push(")"); }, visitVariableDefinition(definition) { this.parts.push("var "); definition.variable.visit(this); this.parts.push(" = "); definition.arg.visit(this); this.parts.push(";"); }, visitMin(max) { this.parts.push("Math.min("); max.arg.visit(this); this.parts.push(", ", max.max, ")"); }, toString() { return this.parts.join(""); } }; function buildAddOperation(num1, num2) { if (num2.type === "literal" && num2.number === 0) { return num1; } if (num1.type === "literal" && num1.number === 0) { return num2; } if (num2.type === "literal" && num1.type === "literal") { return new AstLiteral(num1.number + num2.number); } return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); } function buildMulOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return new AstLiteral(0); } else if (num2.number === 1) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number * num2.number); } } if (num1.type === "literal") { if (num1.number === 0) { return new AstLiteral(0); } else if (num1.number === 1) { return num2; } } var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); return new AstBinaryOperation("*", num1, num2, min, max); } function buildSubOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number - num2.number); } } if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { return num2.arg2; } return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); } function buildMinOperation(num1, max) { if (num1.min >= max) { return new AstLiteral(max); } else if (num1.max <= max) { return num1; } return new AstMin(num1, max); } function PostScriptCompiler() {} PostScriptCompiler.prototype = { compile: function PostScriptCompiler_compile(code, domain, range) { var stack = []; var instructions = []; var inputSize = domain.length >> 1, outputSize = range.length >> 1; var lastRegister = 0; var n, j; var num1, num2, ast1, ast2, tmpVar, item; for (let i = 0; i < inputSize; i++) { stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); } for (let i = 0, ii = code.length; i < ii; i++) { item = code[i]; if (typeof item === "number") { stack.push(new AstLiteral(item)); continue; } switch (item) { case "add": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildAddOperation(num1, num2)); break; case "cvr": if (stack.length < 1) { return null; } break; case "mul": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildMulOperation(num1, num2)); break; case "sub": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildSubOperation(num1, num2)); break; case "exch": if (stack.length < 2) { return null; } ast1 = stack.pop(); ast2 = stack.pop(); stack.push(ast1, ast2); break; case "pop": if (stack.length < 1) { return null; } stack.pop(); break; case "index": if (stack.length < 1) { return null; } num1 = stack.pop(); if (num1.type !== "literal") { return null; } n = num1.number; if (n < 0 || !Number.isInteger(n) || stack.length < n) { return null; } ast1 = stack[stack.length - n - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - n - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "dup": if (stack.length < 1) { return null; } if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) { num1 = stack.pop(); stack.push(buildMinOperation(num1, code[i + 1])); i += 6; break; } ast1 = stack[stack.length - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "roll": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); if (num2.type !== "literal" || num1.type !== "literal") { return null; } j = num2.number; n = num1.number; if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { return null; } j = (j % n + n) % n; if (j === 0) { break; } Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); break; default: return null; } } if (stack.length !== outputSize) { return null; } var result = []; instructions.forEach(function (instruction) { var statementBuilder = new ExpressionBuilderVisitor(); instruction.visit(statementBuilder); result.push(statementBuilder.toString()); }); stack.forEach(function (expr, i) { var statementBuilder = new ExpressionBuilderVisitor(); expr.visit(statementBuilder); var min = range[i * 2], max = range[i * 2 + 1]; var out = [statementBuilder.toString()]; if (min > expr.min) { out.unshift("Math.max(", min, ", "); out.push(")"); } if (max < expr.max) { out.unshift("Math.min(", max, ", "); out.push(")"); } out.unshift("dest[destOffset + ", i, "] = "); out.push(";"); result.push(out.join("")); }); return result.join("\n"); } }; return PostScriptCompiler; }(); exports.PostScriptCompiler = PostScriptCompiler; /***/ }), /* 41 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PostScriptParser = exports.PostScriptLexer = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(8); class PostScriptParser { constructor(lexer) { this.lexer = lexer; this.operators = []; this.token = null; this.prev = null; } nextToken() { this.prev = this.token; this.token = this.lexer.getToken(); } accept(type) { if (this.token.type === type) { this.nextToken(); return true; } return false; } expect(type) { if (this.accept(type)) { return true; } throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`); } parse() { this.nextToken(); this.expect(PostScriptTokenTypes.LBRACE); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); return this.operators; } parseBlock() { while (true) { if (this.accept(PostScriptTokenTypes.NUMBER)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.LBRACE)) { this.parseCondition(); } else { return; } } } parseCondition() { const conditionLocation = this.operators.length; this.operators.push(null, null); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); if (this.accept(PostScriptTokenTypes.IF)) { this.operators[conditionLocation] = this.operators.length; this.operators[conditionLocation + 1] = "jz"; } else if (this.accept(PostScriptTokenTypes.LBRACE)) { const jumpLocation = this.operators.length; this.operators.push(null, null); const endOfTrue = this.operators.length; this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); this.expect(PostScriptTokenTypes.IFELSE); this.operators[jumpLocation] = this.operators.length; this.operators[jumpLocation + 1] = "j"; this.operators[conditionLocation] = endOfTrue; this.operators[conditionLocation + 1] = "jz"; } else { throw new _util.FormatError("PS Function: error parsing conditional."); } } } exports.PostScriptParser = PostScriptParser; const PostScriptTokenTypes = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; const PostScriptToken = function PostScriptTokenClosure() { const opCache = Object.create(null); class PostScriptToken { constructor(type, value) { this.type = type; this.value = value; } static getOperator(op) { const opValue = opCache[op]; if (opValue) { return opValue; } return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); } static get LBRACE() { return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); } static get RBRACE() { return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); } static get IF() { return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); } static get IFELSE() { return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); } } return PostScriptToken; }(); class PostScriptLexer { constructor(stream) { this.stream = stream; this.nextChar(); this.strBuf = []; } nextChar() { return this.currentChar = this.stream.getByte(); } getToken() { let comment = false; let ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); case 0x7b: this.nextChar(); return PostScriptToken.LBRACE; case 0x7d: this.nextChar(); return PostScriptToken.RBRACE; } const strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { strBuf.push(String.fromCharCode(ch)); } const str = strBuf.join(""); switch (str.toLowerCase()) { case "if": return PostScriptToken.IF; case "ifelse": return PostScriptToken.IFELSE; default: return PostScriptToken.getOperator(str); } } getNumber() { let ch = this.currentChar; const strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { strBuf.push(String.fromCharCode(ch)); } else { break; } } const value = parseFloat(strBuf.join("")); if (isNaN(value)) { throw new _util.FormatError(`Invalid floating point number: ${value}`); } return value; } } exports.PostScriptLexer = PostScriptLexer; /***/ }), /* 42 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.bidi = bidi; var _util = __w_pdfjs_require__(2); var baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; var arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; function isOdd(i) { return (i & 1) !== 0; } function isEven(i) { return (i & 1) === 0; } function findUnequal(arr, start, value) { for (var j = start, jj = arr.length; j < jj; ++j) { if (arr[j] !== value) { return j; } } return j; } function setValues(arr, start, end, value) { for (var j = start; j < end; ++j) { arr[j] = value; } } function reverseValues(arr, start, end) { for (var i = start, j = end - 1; i < j; ++i, --j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } function createBidiText(str, isLTR, vertical = false) { let dir = "ltr"; if (vertical) { dir = "ttb"; } else if (!isLTR) { dir = "rtl"; } return { str, dir }; } var chars = []; var types = []; function bidi(str, startLevel, vertical) { var isLTR = true; var strLength = str.length; if (strLength === 0 || vertical) { return createBidiText(str, isLTR, vertical); } chars.length = strLength; types.length = strLength; var numBidi = 0; var i, ii; for (i = 0; i < strLength; ++i) { chars[i] = str.charAt(i); var charCode = str.charCodeAt(i); var charType = "L"; if (charCode <= 0x00ff) { charType = baseTypes[charCode]; } else if (0x0590 <= charCode && charCode <= 0x05f4) { charType = "R"; } else if (0x0600 <= charCode && charCode <= 0x06ff) { charType = arabicTypes[charCode & 0xff]; if (!charType) { (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); } } else if (0x0700 <= charCode && charCode <= 0x08ac) { charType = "AL"; } if (charType === "R" || charType === "AL" || charType === "AN") { numBidi++; } types[i] = charType; } if (numBidi === 0) { isLTR = true; return createBidiText(str, isLTR); } if (startLevel === -1) { if (numBidi / strLength < 0.3) { isLTR = true; startLevel = 0; } else { isLTR = false; startLevel = 1; } } var levels = []; for (i = 0; i < strLength; ++i) { levels[i] = startLevel; } var e = isOdd(startLevel) ? "R" : "L"; var sor = e; var eor = sor; var lastType = sor; for (i = 0; i < strLength; ++i) { if (types[i] === "NSM") { types[i] = lastType; } else { lastType = types[i]; } } lastType = sor; var t; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "AL" ? "AN" : "EN"; } else if (t === "R" || t === "L" || t === "AL") { lastType = t; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "AL") { types[i] = "R"; } } for (i = 1; i < strLength - 1; ++i) { if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { types[i] = "EN"; } if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { types[i] = types[i - 1]; } } for (i = 0; i < strLength; ++i) { if (types[i] === "EN") { var j; for (j = i - 1; j >= 0; --j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } for (j = i + 1; j < strLength; ++j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { types[i] = "ON"; } } lastType = sor; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "L" ? "L" : "EN"; } else if (t === "R" || t === "L") { lastType = t; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { var end = findUnequal(types, i + 1, "ON"); var before = sor; if (i > 0) { before = types[i - 1]; } var after = eor; if (end + 1 < strLength) { after = types[end + 1]; } if (before !== "L") { before = "R"; } if (after !== "L") { after = "R"; } if (before === after) { setValues(types, i, end, before); } i = end - 1; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { types[i] = e; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (isEven(levels[i])) { if (t === "R") { levels[i] += 1; } else if (t === "AN" || t === "EN") { levels[i] += 2; } } else { if (t === "L" || t === "AN" || t === "EN") { levels[i] += 1; } } } var highestLevel = -1; var lowestOddLevel = 99; var level; for (i = 0, ii = levels.length; i < ii; ++i) { level = levels[i]; if (highestLevel < level) { highestLevel = level; } if (lowestOddLevel > level && isOdd(level)) { lowestOddLevel = level; } } for (level = highestLevel; level >= lowestOddLevel; --level) { var start = -1; for (i = 0, ii = levels.length; i < ii; ++i) { if (levels[i] < level) { if (start >= 0) { reverseValues(chars, start, i); start = -1; } } else if (start < 0) { start = i; } } if (start >= 0) { reverseValues(chars, start, levels.length); } } for (i = 0, ii = chars.length; i < ii; ++i) { var ch = chars[i]; if (ch === "<" || ch === ">") { chars[i] = ""; } } return createBidiText(chars.join(""), isLTR); } /***/ }), /* 43 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getMetrics = void 0; var _core_utils = __w_pdfjs_require__(8); var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { t.Courier = 600; t["Courier-Bold"] = 600; t["Courier-BoldOblique"] = 600; t["Courier-Oblique"] = 600; t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.universal = 713; t.numbersign = 500; t.existential = 549; t.percent = 833; t.ampersand = 778; t.suchthat = 439; t.parenleft = 333; t.parenright = 333; t.asteriskmath = 500; t.plus = 549; t.comma = 250; t.minus = 549; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 549; t.equal = 549; t.greater = 549; t.question = 444; t.congruent = 549; t.Alpha = 722; t.Beta = 667; t.Chi = 722; t.Delta = 612; t.Epsilon = 611; t.Phi = 763; t.Gamma = 603; t.Eta = 722; t.Iota = 333; t.theta1 = 631; t.Kappa = 722; t.Lambda = 686; t.Mu = 889; t.Nu = 722; t.Omicron = 722; t.Pi = 768; t.Theta = 741; t.Rho = 556; t.Sigma = 592; t.Tau = 611; t.Upsilon = 690; t.sigma1 = 439; t.Omega = 768; t.Xi = 645; t.Psi = 795; t.Zeta = 611; t.bracketleft = 333; t.therefore = 863; t.bracketright = 333; t.perpendicular = 658; t.underscore = 500; t.radicalex = 500; t.alpha = 631; t.beta = 549; t.chi = 549; t.delta = 494; t.epsilon = 439; t.phi = 521; t.gamma = 411; t.eta = 603; t.iota = 329; t.phi1 = 603; t.kappa = 549; t.lambda = 549; t.mu = 576; t.nu = 521; t.omicron = 549; t.pi = 549; t.theta = 521; t.rho = 549; t.sigma = 603; t.tau = 439; t.upsilon = 576; t.omega1 = 713; t.omega = 686; t.xi = 493; t.psi = 686; t.zeta = 494; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.similar = 549; t.Euro = 750; t.Upsilon1 = 620; t.minute = 247; t.lessequal = 549; t.fraction = 167; t.infinity = 713; t.florin = 500; t.club = 753; t.diamond = 753; t.heart = 753; t.spade = 753; t.arrowboth = 1042; t.arrowleft = 987; t.arrowup = 603; t.arrowright = 987; t.arrowdown = 603; t.degree = 400; t.plusminus = 549; t.second = 411; t.greaterequal = 549; t.multiply = 549; t.proportional = 713; t.partialdiff = 494; t.bullet = 460; t.divide = 549; t.notequal = 549; t.equivalence = 549; t.approxequal = 549; t.ellipsis = 1000; t.arrowvertex = 603; t.arrowhorizex = 1000; t.carriagereturn = 658; t.aleph = 823; t.Ifraktur = 686; t.Rfraktur = 795; t.weierstrass = 987; t.circlemultiply = 768; t.circleplus = 768; t.emptyset = 823; t.intersection = 768; t.union = 768; t.propersuperset = 713; t.reflexsuperset = 713; t.notsubset = 713; t.propersubset = 713; t.reflexsubset = 713; t.element = 713; t.notelement = 713; t.angle = 768; t.gradient = 713; t.registerserif = 790; t.copyrightserif = 790; t.trademarkserif = 890; t.product = 823; t.radical = 549; t.dotmath = 250; t.logicalnot = 713; t.logicaland = 603; t.logicalor = 603; t.arrowdblboth = 1042; t.arrowdblleft = 987; t.arrowdblup = 603; t.arrowdblright = 987; t.arrowdbldown = 603; t.lozenge = 494; t.angleleft = 329; t.registersans = 790; t.copyrightsans = 790; t.trademarksans = 786; t.summation = 713; t.parenlefttp = 384; t.parenleftex = 384; t.parenleftbt = 384; t.bracketlefttp = 384; t.bracketleftex = 384; t.bracketleftbt = 384; t.bracelefttp = 494; t.braceleftmid = 494; t.braceleftbt = 494; t.braceex = 494; t.angleright = 329; t.integral = 274; t.integraltp = 686; t.integralex = 686; t.integralbt = 686; t.parenrighttp = 384; t.parenrightex = 384; t.parenrightbt = 384; t.bracketrighttp = 384; t.bracketrightex = 384; t.bracketrightbt = 384; t.bracerighttp = 494; t.bracerightmid = 494; t.bracerightbt = 494; t.apple = 790; }); t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 408; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 564; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 564; t.equal = 564; t.greater = 564; t.question = 444; t.at = 921; t.A = 722; t.B = 667; t.C = 667; t.D = 722; t.E = 611; t.F = 556; t.G = 722; t.H = 722; t.I = 333; t.J = 389; t.K = 722; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 556; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 722; t.W = 944; t.X = 722; t.Y = 722; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 469; t.underscore = 500; t.quoteleft = 333; t.a = 444; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 333; t.s = 389; t.t = 278; t.u = 500; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.asciitilde = 541; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 180; t.quotedblleft = 444; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 453; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 444; t.quotedblright = 444; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 444; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 889; t.ordfeminine = 276; t.Lslash = 611; t.Oslash = 722; t.OE = 889; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 444; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 722; t.divide = 564; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 444; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 444; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 444; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 444; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 444; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 444; t.Amacron = 722; t.rcaron = 333; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 556; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 588; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 722; t.Abreve = 722; t.multiply = 564; t.uacute = 500; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 444; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 722; t.Iacute = 333; t.plusminus = 564; t.brokenbar = 200; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 333; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 326; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 444; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 344; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 722; t.zdotaccent = 444; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 500; t.minus = 564; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 564; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 1000; t.ampersand = 833; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 930; t.A = 722; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 778; t.I = 389; t.J = 500; t.K = 778; t.L = 667; t.M = 944; t.N = 722; t.O = 778; t.P = 611; t.Q = 778; t.R = 722; t.S = 556; t.T = 667; t.U = 722; t.V = 722; t.W = 1000; t.X = 722; t.Y = 722; t.Z = 667; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 581; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 556; t.c = 444; t.d = 556; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 333; t.k = 556; t.l = 278; t.m = 833; t.n = 556; t.o = 500; t.p = 556; t.q = 556; t.r = 444; t.s = 389; t.t = 333; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 394; t.bar = 220; t.braceright = 394; t.asciitilde = 520; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 540; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 300; t.Lslash = 667; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 330; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 556; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 722; t.divide = 570; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 667; t.Cacute = 722; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 722; t.rcaron = 444; t.ccedilla = 444; t.Zdotaccent = 667; t.Thorn = 611; t.Omacron = 778; t.Racute = 722; t.Sacute = 556; t.dcaron = 672; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 570; t.uacute = 556; t.Tcaron = 667; t.partialdiff = 494; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 778; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 444; t.omacron = 500; t.Zacute = 667; t.Zcaron = 667; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 416; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 778; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 300; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 394; t.Kcommaaccent = 778; t.Lacute = 667; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 667; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 500; t.Ccaron = 722; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 444; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 722; t.Lcommaaccent = 667; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 444; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 556; t.minus = 570; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 333; t.logicalnot = 570; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 389; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 832; t.A = 667; t.B = 667; t.C = 667; t.D = 722; t.E = 667; t.F = 667; t.G = 722; t.H = 778; t.I = 389; t.J = 500; t.K = 667; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 611; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 667; t.W = 889; t.X = 667; t.Y = 611; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 570; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 556; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 556; t.v = 444; t.w = 667; t.x = 500; t.y = 444; t.z = 389; t.braceleft = 348; t.bar = 220; t.braceright = 348; t.asciitilde = 570; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 500; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 944; t.ordfeminine = 266; t.Lslash = 611; t.Oslash = 722; t.OE = 944; t.ordmasculine = 300; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 611; t.divide = 570; t.Yacute = 611; t.Acircumflex = 667; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 667; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 611; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 608; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 667; t.Abreve = 667; t.multiply = 570; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 444; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 722; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 366; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 576; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 382; t.Kcommaaccent = 667; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 500; t.minus = 606; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 606; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 420; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 675; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 675; t.equal = 675; t.greater = 675; t.question = 500; t.at = 920; t.A = 611; t.B = 611; t.C = 667; t.D = 722; t.E = 611; t.F = 611; t.G = 722; t.H = 722; t.I = 333; t.J = 444; t.K = 667; t.L = 556; t.M = 833; t.N = 667; t.O = 722; t.P = 611; t.Q = 722; t.R = 611; t.S = 500; t.T = 556; t.U = 722; t.V = 611; t.W = 833; t.X = 611; t.Y = 556; t.Z = 556; t.bracketleft = 389; t.backslash = 278; t.bracketright = 389; t.asciicircum = 422; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 278; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 444; t.l = 278; t.m = 722; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 500; t.v = 444; t.w = 667; t.x = 444; t.y = 444; t.z = 389; t.braceleft = 400; t.bar = 275; t.braceright = 400; t.asciitilde = 541; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 214; t.quotedblleft = 556; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 523; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 556; t.quotedblright = 556; t.guillemotright = 500; t.ellipsis = 889; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 889; t.AE = 889; t.ordfeminine = 276; t.Lslash = 556; t.Oslash = 722; t.OE = 944; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 667; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 556; t.divide = 675; t.Yacute = 556; t.Acircumflex = 611; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 667; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 556; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 611; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 500; t.Amacron = 611; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 556; t.Thorn = 611; t.Omacron = 722; t.Racute = 611; t.Sacute = 500; t.dcaron = 544; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 611; t.Abreve = 611; t.multiply = 675; t.uacute = 500; t.Tcaron = 556; t.partialdiff = 476; t.ydieresis = 444; t.Nacute = 667; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 667; t.Iacute = 333; t.plusminus = 675; t.brokenbar = 275; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 389; t.omacron = 500; t.Zacute = 556; t.Zcaron = 556; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 300; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 611; t.Adieresis = 611; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 500; t.lcaron = 300; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 500; t.Scommaaccent = 500; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 667; t.otilde = 500; t.Rcommaaccent = 611; t.Lcommaaccent = 556; t.Atilde = 611; t.Aogonek = 611; t.Aring = 611; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 444; t.minus = 675; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 675; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.a1 = 974; t.a2 = 961; t.a202 = 974; t.a3 = 980; t.a4 = 719; t.a5 = 789; t.a119 = 790; t.a118 = 791; t.a117 = 690; t.a11 = 960; t.a12 = 939; t.a13 = 549; t.a14 = 855; t.a15 = 911; t.a16 = 933; t.a105 = 911; t.a17 = 945; t.a18 = 974; t.a19 = 755; t.a20 = 846; t.a21 = 762; t.a22 = 761; t.a23 = 571; t.a24 = 677; t.a25 = 763; t.a26 = 760; t.a27 = 759; t.a28 = 754; t.a6 = 494; t.a7 = 552; t.a8 = 537; t.a9 = 577; t.a10 = 692; t.a29 = 786; t.a30 = 788; t.a31 = 788; t.a32 = 790; t.a33 = 793; t.a34 = 794; t.a35 = 816; t.a36 = 823; t.a37 = 789; t.a38 = 841; t.a39 = 823; t.a40 = 833; t.a41 = 816; t.a42 = 831; t.a43 = 923; t.a44 = 744; t.a45 = 723; t.a46 = 749; t.a47 = 790; t.a48 = 792; t.a49 = 695; t.a50 = 776; t.a51 = 768; t.a52 = 792; t.a53 = 759; t.a54 = 707; t.a55 = 708; t.a56 = 682; t.a57 = 701; t.a58 = 826; t.a59 = 815; t.a60 = 789; t.a61 = 789; t.a62 = 707; t.a63 = 687; t.a64 = 696; t.a65 = 689; t.a66 = 786; t.a67 = 787; t.a68 = 713; t.a69 = 791; t.a70 = 785; t.a71 = 791; t.a72 = 873; t.a73 = 761; t.a74 = 762; t.a203 = 762; t.a75 = 759; t.a204 = 759; t.a76 = 892; t.a77 = 892; t.a78 = 788; t.a79 = 784; t.a81 = 438; t.a82 = 138; t.a83 = 277; t.a84 = 415; t.a97 = 392; t.a98 = 392; t.a99 = 668; t.a100 = 668; t.a89 = 390; t.a90 = 390; t.a93 = 317; t.a94 = 317; t.a91 = 276; t.a92 = 276; t.a205 = 509; t.a85 = 509; t.a206 = 410; t.a86 = 410; t.a87 = 234; t.a88 = 234; t.a95 = 334; t.a96 = 334; t.a101 = 732; t.a102 = 544; t.a103 = 544; t.a104 = 910; t.a106 = 667; t.a107 = 760; t.a108 = 760; t.a112 = 776; t.a111 = 595; t.a110 = 694; t.a109 = 626; t.a120 = 788; t.a121 = 788; t.a122 = 788; t.a123 = 788; t.a124 = 788; t.a125 = 788; t.a126 = 788; t.a127 = 788; t.a128 = 788; t.a129 = 788; t.a130 = 788; t.a131 = 788; t.a132 = 788; t.a133 = 788; t.a134 = 788; t.a135 = 788; t.a136 = 788; t.a137 = 788; t.a138 = 788; t.a139 = 788; t.a140 = 788; t.a141 = 788; t.a142 = 788; t.a143 = 788; t.a144 = 788; t.a145 = 788; t.a146 = 788; t.a147 = 788; t.a148 = 788; t.a149 = 788; t.a150 = 788; t.a151 = 788; t.a152 = 788; t.a153 = 788; t.a154 = 788; t.a155 = 788; t.a156 = 788; t.a157 = 788; t.a158 = 788; t.a159 = 788; t.a160 = 894; t.a161 = 838; t.a163 = 1016; t.a164 = 458; t.a196 = 748; t.a165 = 924; t.a192 = 748; t.a166 = 918; t.a167 = 927; t.a168 = 928; t.a169 = 928; t.a170 = 834; t.a171 = 873; t.a172 = 828; t.a173 = 924; t.a162 = 924; t.a174 = 917; t.a175 = 930; t.a176 = 931; t.a177 = 463; t.a178 = 883; t.a179 = 836; t.a193 = 836; t.a180 = 867; t.a199 = 867; t.a181 = 696; t.a200 = 696; t.a182 = 874; t.a201 = 874; t.a183 = 760; t.a184 = 946; t.a197 = 771; t.a185 = 865; t.a194 = 771; t.a198 = 888; t.a186 = 967; t.a195 = 888; t.a187 = 831; t.a188 = 873; t.a189 = 927; t.a190 = 970; t.a191 = 918; }); }); exports.getMetrics = getMetrics; /***/ }), /* 44 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MurmurHash3_64 = void 0; var _util = __w_pdfjs_require__(2); const SEED = 0xc3d2e1f0; const MASK_HIGH = 0xffff0000; const MASK_LOW = 0xffff; class MurmurHash3_64 { constructor(seed) { this.h1 = seed ? seed & 0xffffffff : SEED; this.h2 = seed ? seed & 0xffffffff : SEED; } update(input) { let data, length; if ((0, _util.isString)(input)) { data = new Uint8Array(input.length * 2); length = 0; for (let i = 0, ii = input.length; i < ii; i++) { const code = input.charCodeAt(i); if (code <= 0xff) { data[length++] = code; } else { data[length++] = code >>> 8; data[length++] = code & 0xff; } } } else if ((0, _util.isArrayBuffer)(input)) { data = input; length = data.byteLength; } else { throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); } const blockCounts = length >> 2; const tailLength = length - blockCounts * 4; const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); let k1 = 0, k2 = 0; let h1 = this.h1, h2 = this.h2; const C1 = 0xcc9e2d51, C2 = 0x1b873593; const C1_LOW = C1 & MASK_LOW, C2_LOW = C2 & MASK_LOW; for (let i = 0; i < blockCounts; i++) { if (i & 1) { k1 = dataUint32[i]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; h1 ^= k1; h1 = h1 << 13 | h1 >>> 19; h1 = h1 * 5 + 0xe6546b64; } else { k2 = dataUint32[i]; k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; k2 = k2 << 15 | k2 >>> 17; k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; h2 ^= k2; h2 = h2 << 13 | h2 >>> 19; h2 = h2 * 5 + 0xe6546b64; } } k1 = 0; switch (tailLength) { case 3: k1 ^= data[blockCounts * 4 + 2] << 16; case 2: k1 ^= data[blockCounts * 4 + 1] << 8; case 1: k1 ^= data[blockCounts * 4]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; if (blockCounts & 1) { h1 ^= k1; } else { h2 ^= k1; } } this.h1 = h1; this.h2 = h2; } hexdigest() { let h1 = this.h1, h2 = this.h2; h1 ^= h2 >>> 1; h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; const hex1 = (h1 >>> 0).toString(16), hex2 = (h2 >>> 0).toString(16); return hex1.padStart(8, "0") + hex2.padStart(8, "0"); } } exports.MurmurHash3_64 = MurmurHash3_64; /***/ }), /* 45 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFImage = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _colorspace = __w_pdfjs_require__(23); var _stream = __w_pdfjs_require__(12); var _jpeg_stream = __w_pdfjs_require__(18); var _jpx = __w_pdfjs_require__(21); function decodeAndClamp(value, addend, coefficient, max) { value = addend + value * coefficient; if (value < 0) { value = 0; } else if (value > max) { value = max; } return value; } function resizeImageMask(src, bpc, w1, h1, w2, h2) { var length = w2 * h2; let dest; if (bpc <= 8) { dest = new Uint8Array(length); } else if (bpc <= 16) { dest = new Uint16Array(length); } else { dest = new Uint32Array(length); } var xRatio = w1 / w2; var yRatio = h1 / h2; var i, j, py, newIndex = 0, oldIndex; var xScaled = new Uint16Array(w2); var w1Scanline = w1; for (i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio); } for (i = 0; i < h2; i++) { py = Math.floor(i * yRatio) * w1Scanline; for (j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex]; } } return dest; } class PDFImage { constructor({ xref, res, image, isInline = false, smask = null, mask = null, isMask = false, pdfFunctionFactory, localColorSpaceCache }) { this.image = image; var dict = image.dict; const filter = dict.get("Filter"); if ((0, _primitives.isName)(filter)) { switch (filter.name) { case "JPXDecode": var jpxImage = new _jpx.JpxImage(); jpxImage.parseImageProperties(image.stream); image.stream.reset(); image.width = jpxImage.width; image.height = jpxImage.height; image.bitsPerComponent = jpxImage.bitsPerComponent; image.numComps = jpxImage.componentsCount; break; case "JBIG2Decode": image.bitsPerComponent = 1; image.numComps = 1; break; } } let width = dict.get("Width", "W"); let height = dict.get("Height", "H"); if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); width = image.width; height = image.height; } if (width < 1 || height < 1) { throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`); } this.width = width; this.height = height; this.interpolate = dict.get("Interpolate", "I") || false; this.imageMask = dict.get("ImageMask", "IM") || false; this.matte = dict.get("Matte") || false; var bitsPerComponent = image.bitsPerComponent; if (!bitsPerComponent) { bitsPerComponent = dict.get("BitsPerComponent", "BPC"); if (!bitsPerComponent) { if (this.imageMask) { bitsPerComponent = 1; } else { throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`); } } } this.bpc = bitsPerComponent; if (!this.imageMask) { let colorSpace = dict.getRaw("ColorSpace") || dict.getRaw("CS"); if (!colorSpace) { (0, _util.info)("JPX images (which do not require color spaces)"); switch (image.numComps) { case 1: colorSpace = _primitives.Name.get("DeviceGray"); break; case 3: colorSpace = _primitives.Name.get("DeviceRGB"); break; case 4: colorSpace = _primitives.Name.get("DeviceCMYK"); break; default: throw new Error(`JPX images with ${image.numComps} ` + "color components not supported."); } } this.colorSpace = _colorspace.ColorSpace.parse({ cs: colorSpace, xref, resources: isInline ? res : null, pdfFunctionFactory, localColorSpaceCache }); this.numComps = this.colorSpace.numComps; } this.decode = dict.getArray("Decode", "D"); this.needsDecode = false; if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { this.needsDecode = true; var max = (1 << bitsPerComponent) - 1; this.decodeCoefficients = []; this.decodeAddends = []; const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed"; for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { var dmin = this.decode[i]; var dmax = this.decode[i + 1]; this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; this.decodeAddends[j] = isIndexed ? dmin : max * dmin; } } if (smask) { this.smask = new PDFImage({ xref, res, image: smask, isInline, pdfFunctionFactory, localColorSpaceCache }); } else if (mask) { if ((0, _primitives.isStream)(mask)) { var maskDict = mask.dict, imageMask = maskDict.get("ImageMask", "IM"); if (!imageMask) { (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); } else { this.mask = new PDFImage({ xref, res, image: mask, isInline, isMask: true, pdfFunctionFactory, localColorSpaceCache }); } } else { this.mask = mask; } } } static async buildImage({ xref, res, image, isInline = false, pdfFunctionFactory, localColorSpaceCache }) { const imageData = image; let smaskData = null; let maskData = null; const smask = image.dict.get("SMask"); const mask = image.dict.get("Mask"); if (smask) { smaskData = smask; } else if (mask) { if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) { maskData = mask; } else { (0, _util.warn)("Unsupported mask format."); } } return new PDFImage({ xref, res, image: imageData, isInline, smask: smaskData, mask: maskData, pdfFunctionFactory, localColorSpaceCache }); } static createMask({ imgArray, width, height, imageIsFromDecodeStream, inverseDecode }) { var computedLength = (width + 7 >> 3) * height; var actualLength = imgArray.byteLength; var haveFullData = computedLength === actualLength; var data, i; if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { data = imgArray; } else if (!inverseDecode) { data = new Uint8ClampedArray(actualLength); data.set(imgArray); } else { data = new Uint8ClampedArray(computedLength); data.set(imgArray); for (i = actualLength; i < computedLength; i++) { data[i] = 0xff; } } if (inverseDecode) { for (i = 0; i < actualLength; i++) { data[i] ^= 0xff; } } return { data, width, height }; } get drawWidth() { return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); } get drawHeight() { return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); } decodeBuffer(buffer) { var bpc = this.bpc; var numComps = this.numComps; var decodeAddends = this.decodeAddends; var decodeCoefficients = this.decodeCoefficients; var max = (1 << bpc) - 1; var i, ii; if (bpc === 1) { for (i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = +!buffer[i]; } return; } var index = 0; for (i = 0, ii = this.width * this.height; i < ii; i++) { for (var j = 0; j < numComps; j++) { buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); index++; } } } getComponents(buffer) { var bpc = this.bpc; if (bpc === 8) { return buffer; } var width = this.width; var height = this.height; var numComps = this.numComps; var length = width * height * numComps; var bufferPos = 0; let output; if (bpc <= 8) { output = new Uint8Array(length); } else if (bpc <= 16) { output = new Uint16Array(length); } else { output = new Uint32Array(length); } var rowComps = width * numComps; var max = (1 << bpc) - 1; var i = 0, ii, buf; if (bpc === 1) { var mask, loop1End, loop2End; for (var j = 0; j < height; j++) { loop1End = i + (rowComps & ~7); loop2End = i + rowComps; while (i < loop1End) { buf = buffer[bufferPos++]; output[i] = buf >> 7 & 1; output[i + 1] = buf >> 6 & 1; output[i + 2] = buf >> 5 & 1; output[i + 3] = buf >> 4 & 1; output[i + 4] = buf >> 3 & 1; output[i + 5] = buf >> 2 & 1; output[i + 6] = buf >> 1 & 1; output[i + 7] = buf & 1; i += 8; } if (i < loop2End) { buf = buffer[bufferPos++]; mask = 128; while (i < loop2End) { output[i++] = +!!(buf & mask); mask >>= 1; } } } } else { var bits = 0; buf = 0; for (i = 0, ii = length; i < ii; ++i) { if (i % rowComps === 0) { buf = 0; bits = 0; } while (bits < bpc) { buf = buf << 8 | buffer[bufferPos++]; bits += 8; } var remainingBits = bits - bpc; let value = buf >> remainingBits; if (value < 0) { value = 0; } else if (value > max) { value = max; } output[i] = value; buf = buf & (1 << remainingBits) - 1; bits = remainingBits; } } return output; } fillOpacity(rgbaBuf, width, height, actualHeight, image) { var smask = this.smask; var mask = this.mask; var alphaBuf, sw, sh, i, ii, j; if (smask) { sw = smask.width; sh = smask.height; alphaBuf = new Uint8ClampedArray(sw * sh); smask.fillGrayBuffer(alphaBuf); if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); } } else if (mask) { if (mask instanceof PDFImage) { sw = mask.width; sh = mask.height; alphaBuf = new Uint8ClampedArray(sw * sh); mask.numComps = 1; mask.fillGrayBuffer(alphaBuf); for (i = 0, ii = sw * sh; i < ii; ++i) { alphaBuf[i] = 255 - alphaBuf[i]; } if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); } } else if (Array.isArray(mask)) { alphaBuf = new Uint8ClampedArray(width * height); var numComps = this.numComps; for (i = 0, ii = width * height; i < ii; ++i) { var opacity = 0; var imageOffset = i * numComps; for (j = 0; j < numComps; ++j) { var color = image[imageOffset + j]; var maskOffset = j * 2; if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { opacity = 255; break; } } alphaBuf[i] = opacity; } } else { throw new _util.FormatError("Unknown mask format."); } } if (alphaBuf) { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = alphaBuf[i]; } } else { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = 255; } } } undoPreblend(buffer, width, height) { var matte = this.smask && this.smask.matte; if (!matte) { return; } var matteRgb = this.colorSpace.getRgb(matte, 0); var matteR = matteRgb[0]; var matteG = matteRgb[1]; var matteB = matteRgb[2]; var length = width * height * 4; for (var i = 0; i < length; i += 4) { var alpha = buffer[i + 3]; if (alpha === 0) { buffer[i] = 255; buffer[i + 1] = 255; buffer[i + 2] = 255; continue; } var k = 255 / alpha; buffer[i] = (buffer[i] - matteR) * k + matteR; buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; } } createImageData(forceRGBA = false) { var drawWidth = this.drawWidth; var drawHeight = this.drawHeight; var imgData = { width: drawWidth, height: drawHeight, kind: 0, data: null }; var numComps = this.numComps; var originalWidth = this.width; var originalHeight = this.height; var bpc = this.bpc; var rowBytes = originalWidth * numComps * bpc + 7 >> 3; var imgArray; if (!forceRGBA) { var kind; if (this.colorSpace.name === "DeviceGray" && bpc === 1) { kind = _util.ImageKind.GRAYSCALE_1BPP; } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { kind = _util.ImageKind.RGB_24BPP; } if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { imgData.kind = kind; imgArray = this.getImageBytes(originalHeight * rowBytes); if (this.image instanceof _stream.DecodeStream) { imgData.data = imgArray; } else { var newArray = new Uint8ClampedArray(imgArray.length); newArray.set(imgArray); imgData.data = newArray; } if (this.needsDecode) { (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); var buffer = imgData.data; for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] ^= 0xff; } } return imgData; } if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { let imageLength = originalHeight * rowBytes; switch (this.colorSpace.name) { case "DeviceGray": imageLength *= 3; case "DeviceRGB": case "DeviceCMYK": imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true); return imgData; } } } imgArray = this.getImageBytes(originalHeight * rowBytes); var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; var comps = this.getComponents(imgArray); var alpha01, maybeUndoPreblend; if (!forceRGBA && !this.smask && !this.mask) { imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); alpha01 = 0; maybeUndoPreblend = false; } else { imgData.kind = _util.ImageKind.RGBA_32BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); alpha01 = 1; maybeUndoPreblend = true; this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); } if (this.needsDecode) { this.decodeBuffer(comps); } this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); if (maybeUndoPreblend) { this.undoPreblend(imgData.data, drawWidth, actualHeight); } return imgData; } fillGrayBuffer(buffer) { var numComps = this.numComps; if (numComps !== 1) { throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`); } var width = this.width; var height = this.height; var bpc = this.bpc; var rowBytes = width * numComps * bpc + 7 >> 3; var imgArray = this.getImageBytes(height * rowBytes); var comps = this.getComponents(imgArray); var i, length; if (bpc === 1) { length = width * height; if (this.needsDecode) { for (i = 0; i < length; ++i) { buffer[i] = comps[i] - 1 & 255; } } else { for (i = 0; i < length; ++i) { buffer[i] = -comps[i] & 255; } } return; } if (this.needsDecode) { this.decodeBuffer(comps); } length = width * height; var scale = 255 / ((1 << bpc) - 1); for (i = 0; i < length; ++i) { buffer[i] = scale * comps[i]; } } getImageBytes(length, drawWidth, drawHeight, forceRGB = false) { this.image.reset(); this.image.drawWidth = drawWidth || this.width; this.image.drawHeight = drawHeight || this.height; this.image.forceRGB = !!forceRGB; return this.image.getBytes(length, true); } } exports.PDFImage = PDFImage; /***/ }), /* 46 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHandler = void 0; var _util = __w_pdfjs_require__(2); const CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; const StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (typeof reason !== "object" || reason === null) { return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } class MessageHandler { constructor(sourceName, targetName, comObj) { this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = event => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { this._processStreamMessage(data); return; } if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } delete this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } const action = this.actionHandler[data.action]; if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } on(actionName, handler) { const ah = this.actionHandler; if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } ah[actionName] = handler; } send(actionName, data, transfers) { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; const capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this._postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId, data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } sendWithStream(actionName, data, queueingStrategy, transfers) { const streamId = this.streamId++; const sourceName = this.sourceName; const targetName = this.targetName; const comObj = this.comObj; return new ReadableStream({ start: controller => { const startCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId] = { controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; this._postMessage({ sourceName, targetName, action: actionName, streamId, data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: controller => { const pullCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: reason => { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL, streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } _createStreamSink(data) { const self = this; const action = this.actionHandler[data.action]; const streamId = data.streamId; const sourceName = this.sourceName; const targetName = data.sourceName; const comObj = this.comObj; const streamSink = { enqueue(chunk, size = 1, transfers) { if (this.isCancelled) { return; } const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } self._postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, streamId, chunk }, transfers); }, close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CLOSE, streamId }); delete self.streamSinks[streamId]; }, error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.ERROR, streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, reason: wrapReason(reason) }); }); } _processStreamMessage(data) { const streamId = data.streamId; const sourceName = this.sourceName; const targetName = data.sourceName; const comObj = this.comObj; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { this.streamControllers[streamId].startCall.resolve(); } else { this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { this.streamControllers[streamId].pullCall.resolve(); } else { this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!this.streamSinks[streamId]) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); break; } if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[streamId].sinkCapability.resolve(); } this.streamSinks[streamId].desiredSize = data.desiredSize; const { onPull } = this.streamSinks[data.streamId]; new Promise(function (resolve) { resolve(onPull && onPull()); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); if (this.streamControllers[streamId].isClosed) { break; } this.streamControllers[streamId].isClosed = true; this.streamControllers[streamId].controller.close(); this._deleteStreamController(streamId); break; case StreamKind.ERROR: (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); this.streamControllers[streamId].controller.error(wrapReason(data.reason)); this._deleteStreamController(streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { this.streamControllers[streamId].cancelCall.resolve(); } else { this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamId); break; case StreamKind.CANCEL: if (!this.streamSinks[streamId]) { break; } const { onCancel } = this.streamSinks[data.streamId]; new Promise(function (resolve) { resolve(onCancel && onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, reason: wrapReason(reason) }); }); this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[streamId].isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } async _deleteStreamController(streamId) { await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { return capability && capability.promise; })); delete this.streamControllers[streamId]; } _postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } } exports.MessageHandler = MessageHandler; /***/ }), /* 47 */ /***/ (function(module, exports, __w_pdfjs_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFWorkerStream = void 0; var _util = __w_pdfjs_require__(2); class PDFWorkerStream { constructor(msgHandler) { this._msgHandler = msgHandler; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = []; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } const readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } } exports.PDFWorkerStream = PDFWorkerStream; class PDFWorkerStreamReader { constructor(msgHandler) { this._msgHandler = msgHandler; this.onProgress = null; this._contentLength = null; this._isRangeSupported = false; this._isStreamingSupported = false; const readableStream = this._msgHandler.sendWithStream("GetReader"); this._reader = readableStream.getReader(); this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => { this._isStreamingSupported = data.isStreamingSupported; this._isRangeSupported = data.isRangeSupported; this._contentLength = data.contentLength; }); } get headersReady() { return this._headersReady; } get contentLength() { return this._contentLength; } get isStreamingSupported() { return this._isStreamingSupported; } get isRangeSupported() { return this._isRangeSupported; } async read() { const { value, done } = await this._reader.read(); if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; } cancel(reason) { this._reader.cancel(reason); } } class PDFWorkerStreamRangeReader { constructor(begin, end, msgHandler) { this._msgHandler = msgHandler; this.onProgress = null; const readableStream = this._msgHandler.sendWithStream("GetRangeReader", { begin, end }); this._reader = readableStream.getReader(); } get isStreamingSupported() { return false; } async read() { const { value, done } = await this._reader.read(); if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; } cancel(reason) { this._reader.cancel(reason); } } /***/ }) /******/ ]); }); }); /* Copyright 2020 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (typeof window !== "undefined" ? window : {} ).pdfjsWorker = pdf_worker; var pdf_worker_entry = { }; var worker = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), pdf_worker_entry, { 'default': pdf_worker_entry })); var BetterPDFPlugin = /** @class */ (function (_super) { __extends(BetterPDFPlugin, _super); function BetterPDFPlugin() { return _super !== null && _super.apply(this, arguments) || this; } BetterPDFPlugin.prototype.onload = function () { return __awaiter(this, void 0, void 0, function () { var _this = this; return __generator(this, function (_a) { console.log("Better PDF loading..."); pdf.GlobalWorkerOptions.workerSrc = worker; this.registerMarkdownCodeBlockProcessor("pdf", function (src, el, ctx) { return __awaiter(_this, void 0, void 0, function () { var parameters, buffer, document, _i, _a, pageNumber, page, href, offsetX, offsetY, viewport, canvas, context, renderContext, error_1; return __generator(this, function (_b) { switch (_b.label) { case 0: parameters = null; try { parameters = this.readParameters(src); } catch (e) { el.createEl("h2", { text: "PDF Parameters invalid: " + e.message }); } if (!(parameters !== null)) return [3 /*break*/, 10]; _b.label = 1; case 1: _b.trys.push([1, 9, , 10]); this.app.vault.getName(); return [4 /*yield*/, this.app.vault.adapter.readBinary(parameters.url)]; case 2: buffer = _b.sent(); return [4 /*yield*/, pdf.getDocument(buffer).promise]; case 3: document = _b.sent(); _i = 0, _a = parameters.page; _b.label = 4; case 4: if (!(_i < _a.length)) return [3 /*break*/, 8]; pageNumber = _a[_i]; return [4 /*yield*/, document.getPage(pageNumber)]; case 5: page = _b.sent(); href = el.createEl("a"); href.href = parameters.url + "#page=" + pageNumber; href.className = "internal-link"; offsetX = Math.floor(parameters.rect[0] * -1 * parameters.scale); offsetY = Math.floor(parameters.rect[1] * -1 * parameters.scale); viewport = page.getViewport({ scale: parameters.scale, rotation: parameters.rotation, offsetX: offsetX, offsetY: offsetY, }); canvas = href.createEl("canvas"); context = canvas.getContext("2d"); if (parameters.rect[2] < 1) { canvas.height = viewport.height; canvas.width = viewport.width; } else { canvas.height = Math.floor(parameters.rect[2] * parameters.scale); canvas.width = Math.floor(parameters.rect[3] * parameters.scale); } renderContext = { canvasContext: context, viewport: viewport, }; return [4 /*yield*/, page.render(renderContext)]; case 6: _b.sent(); _b.label = 7; case 7: _i++; return [3 /*break*/, 4]; case 8: return [3 /*break*/, 10]; case 9: error_1 = _b.sent(); el.createEl("h2", { text: error_1 }); return [3 /*break*/, 10]; case 10: return [2 /*return*/]; } }); }); }); return [2 /*return*/]; }); }); }; BetterPDFPlugin.prototype.readParameters = function (jsonString) { // "url" : [[file.pdf]] is an invalid json since it misses quotation marks in value if (jsonString.contains("[[") && !jsonString.contains('"[[')) { jsonString = jsonString.replace("[[", '"[['); jsonString = jsonString.replace("]]", ']]"'); } var parameters = JSON.parse(jsonString); //Transform internal Link to external if (parameters.url.startsWith("[[")) { parameters.url = parameters.url.substr(2, parameters.url.length - 4); parameters.url = this.app.metadataCache.getFirstLinkpathDest(parameters.url, "").path; } //Convert Page to Array if (typeof parameters.page === "number") { parameters.page = [parameters.page]; } if (parameters.page === undefined) { parameters.page = [1]; } if (parameters.scale === undefined || parameters.scale < 0.1 || parameters.scale > 10.0) { parameters.scale = 1.0; } if (parameters.rotation === undefined) { parameters.rotation = 0; } if (parameters.rect === undefined) { parameters.rect = [0, 0, 0, 0]; } return parameters; }; BetterPDFPlugin.prototype.onunload = function () { console.log("unloading Better PDF plugin..."); }; return BetterPDFPlugin; }(obsidian.Plugin)); module.exports = BetterPDFPlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMvbGliL3BhcnNlLWZvbnQuanMiLCJub2RlX21vZHVsZXMvY2FudmFzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJub2RlX21vZHVsZXMvdXJsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvZGVjb2RlLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLmpzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnkuanMiLCJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEZvbnQgUmVnRXhwIGhlbHBlcnMuXG4gKi9cblxuY29uc3Qgd2VpZ2h0cyA9ICdib2xkfGJvbGRlcnxsaWdodGVyfFsxLTldMDAnXG4gICwgc3R5bGVzID0gJ2l0YWxpY3xvYmxpcXVlJ1xuICAsIHZhcmlhbnRzID0gJ3NtYWxsLWNhcHMnXG4gICwgc3RyZXRjaGVzID0gJ3VsdHJhLWNvbmRlbnNlZHxleHRyYS1jb25kZW5zZWR8Y29uZGVuc2VkfHNlbWktY29uZGVuc2VkfHNlbWktZXhwYW5kZWR8ZXhwYW5kZWR8ZXh0cmEtZXhwYW5kZWR8dWx0cmEtZXhwYW5kZWQnXG4gICwgdW5pdHMgPSAncHh8cHR8cGN8aW58Y218bW18JXxlbXxleHxjaHxyZW18cSdcbiAgLCBzdHJpbmcgPSAnXFwnKFteXFwnXSspXFwnfFwiKFteXCJdKylcInxbXFxcXHdcXFxccy1dKydcblxuLy8gWyBbIDzigJhmb250LXN0eWxl4oCZPiB8fCA8Zm9udC12YXJpYW50LWNzczIxPiB8fCA84oCYZm9udC13ZWlnaHTigJk+IHx8IDzigJhmb250LXN0cmV0Y2jigJk+IF0/XG4vLyAgICA84oCYZm9udC1zaXpl4oCZPiBbIC8gPOKAmGxpbmUtaGVpZ2h04oCZPiBdPyA84oCYZm9udC1mYW1pbHnigJk+IF1cbi8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZm9udHMtMy8jZm9udC1wcm9wXG5jb25zdCB3ZWlnaHRSZSA9IG5ldyBSZWdFeHAoJygnICsgd2VpZ2h0cyArICcpICsnLCAnaScpXG5jb25zdCBzdHlsZVJlID0gbmV3IFJlZ0V4cCgnKCcgKyBzdHlsZXMgKyAnKSArJywgJ2knKVxuY29uc3QgdmFyaWFudFJlID0gbmV3IFJlZ0V4cCgnKCcgKyB2YXJpYW50cyArICcpICsnLCAnaScpXG5jb25zdCBzdHJldGNoUmUgPSBuZXcgUmVnRXhwKCcoJyArIHN0cmV0Y2hlcyArICcpICsnLCAnaScpXG5jb25zdCBzaXplRmFtaWx5UmUgPSBuZXcgUmVnRXhwKFxuICAnKFtcXFxcZFxcXFwuXSspKCcgKyB1bml0cyArICcpIConXG4gICsgJygoPzonICsgc3RyaW5nICsgJykoICosICooPzonICsgc3RyaW5nICsgJykpKiknKVxuXG4vKipcbiAqIENhY2hlIGZvbnQgcGFyc2luZy5cbiAqL1xuXG5jb25zdCBjYWNoZSA9IHt9XG5cbmNvbnN0IGRlZmF1bHRIZWlnaHQgPSAxNiAvLyBwdCwgY29tbW9uIGJyb3dzZXIgZGVmYXVsdFxuXG4vKipcbiAqIFBhcnNlIGZvbnQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7T2JqZWN0fSBQYXJzZWQgZm9udC4gYHNpemVgIGlzIGluIGRldmljZSB1bml0cy4gYHVuaXRgIGlzIHRoZSB1bml0XG4gKiAgIGFwcGVhcmluZyBpbiB0aGUgaW5wdXQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIC8vIENhY2hlZFxuICBpZiAoY2FjaGVbc3RyXSkgcmV0dXJuIGNhY2hlW3N0cl1cblxuICAvLyBUcnkgZm9yIHJlcXVpcmVkIHByb3BlcnRpZXMgZmlyc3QuXG4gIGNvbnN0IHNpemVGYW1pbHkgPSBzaXplRmFtaWx5UmUuZXhlYyhzdHIpXG4gIGlmICghc2l6ZUZhbWlseSkgcmV0dXJuIC8vIGludmFsaWRcblxuICAvLyBEZWZhdWx0IHZhbHVlcyBhbmQgcmVxdWlyZWQgcHJvcGVydGllc1xuICBjb25zdCBmb250ID0ge1xuICAgIHdlaWdodDogJ25vcm1hbCcsXG4gICAgc3R5bGU6ICdub3JtYWwnLFxuICAgIHN0cmV0Y2g6ICdub3JtYWwnLFxuICAgIHZhcmlhbnQ6ICdub3JtYWwnLFxuICAgIHNpemU6IHBhcnNlRmxvYXQoc2l6ZUZhbWlseVsxXSksXG4gICAgdW5pdDogc2l6ZUZhbWlseVsyXSxcbiAgICBmYW1pbHk6IHNpemVGYW1pbHlbM10ucmVwbGFjZSgvW1wiJ10vZywgJycpLnJlcGxhY2UoLyAqLCAqL2csICcsJylcbiAgfVxuXG4gIC8vIE9wdGlvbmFsLCB1bm9yZGVyZWQgcHJvcGVydGllcy5cbiAgbGV0IHdlaWdodCwgc3R5bGUsIHZhcmlhbnQsIHN0cmV0Y2hcbiAgLy8gU3RvcCBzZWFyY2ggYXQgYHNpemVGYW1pbHkuaW5kZXhgXG4gIGxldCBzdWJzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHNpemVGYW1pbHkuaW5kZXgpXG4gIGlmICgod2VpZ2h0ID0gd2VpZ2h0UmUuZXhlYyhzdWJzdHIpKSkgZm9udC53ZWlnaHQgPSB3ZWlnaHRbMV1cbiAgaWYgKChzdHlsZSA9IHN0eWxlUmUuZXhlYyhzdWJzdHIpKSkgZm9udC5zdHlsZSA9IHN0eWxlWzFdXG4gIGlmICgodmFyaWFudCA9IHZhcmlhbnRSZS5leGVjKHN1YnN0cikpKSBmb250LnZhcmlhbnQgPSB2YXJpYW50WzFdXG4gIGlmICgoc3RyZXRjaCA9IHN0cmV0Y2hSZS5leGVjKHN1YnN0cikpKSBmb250LnN0cmV0Y2ggPSBzdHJldGNoWzFdXG5cbiAgLy8gQ29udmVydCB0byBkZXZpY2UgdW5pdHMuIChgZm9udC51bml0YCBpcyB0aGUgb3JpZ2luYWwgdW5pdClcbiAgLy8gVE9ETzogY2gsIGV4XG4gIHN3aXRjaCAoZm9udC51bml0KSB7XG4gICAgY2FzZSAncHQnOlxuICAgICAgZm9udC5zaXplIC89IDAuNzVcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncGMnOlxuICAgICAgZm9udC5zaXplICo9IDE2XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2luJzpcbiAgICAgIGZvbnQuc2l6ZSAqPSA5NlxuICAgICAgYnJlYWtcbiAgICBjYXNlICdjbSc6XG4gICAgICBmb250LnNpemUgKj0gOTYuMCAvIDIuNTRcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW0nOlxuICAgICAgZm9udC5zaXplICo9IDk2LjAgLyAyNS40XG4gICAgICBicmVha1xuICAgIGNhc2UgJyUnOlxuICAgICAgLy8gVE9ETyBkaXNhYmxlZCBiZWNhdXNlIGV4aXN0aW5nIHVuaXQgdGVzdHMgYXNzdW1lIDEwMFxuICAgICAgLy8gZm9udC5zaXplICo9IGRlZmF1bHRIZWlnaHQgLyAxMDAgLyAwLjc1XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2VtJzpcbiAgICBjYXNlICdyZW0nOlxuICAgICAgZm9udC5zaXplICo9IGRlZmF1bHRIZWlnaHQgLyAwLjc1XG4gICAgICBicmVha1xuICAgIGNhc2UgJ3EnOlxuICAgICAgZm9udC5zaXplICo9IDk2IC8gMjUuNCAvIDRcbiAgICAgIGJyZWFrXG4gIH1cblxuICByZXR1cm4gKGNhY2hlW3N0cl0gPSBmb250KVxufVxuIiwiLyogZ2xvYmFscyBkb2N1bWVudCwgSW1hZ2VEYXRhICovXG5cbmNvbnN0IHBhcnNlRm9udCA9IHJlcXVpcmUoJy4vbGliL3BhcnNlLWZvbnQnKVxuXG5leHBvcnRzLnBhcnNlRm9udCA9IHBhcnNlRm9udFxuXG5leHBvcnRzLmNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLCB7IHdpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgfSlcbn1cblxuZXhwb3J0cy5jcmVhdGVJbWFnZURhdGEgPSBmdW5jdGlvbiAoYXJyYXksIHdpZHRoLCBoZWlnaHQpIHtcbiAgLy8gQnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBJbWFnZURhdGEgbG9va3MgYXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkXG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIG5ldyBJbWFnZURhdGEoKVxuICAgIGNhc2UgMTogcmV0dXJuIG5ldyBJbWFnZURhdGEoYXJyYXkpXG4gICAgY2FzZSAyOiByZXR1cm4gbmV3IEltYWdlRGF0YShhcnJheSwgd2lkdGgpXG4gICAgZGVmYXVsdDogcmV0dXJuIG5ldyBJbWFnZURhdGEoYXJyYXksIHdpZHRoLCBoZWlnaHQpXG4gIH1cbn1cblxuZXhwb3J0cy5sb2FkSW1hZ2UgPSBmdW5jdGlvbiAoc3JjLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgaW1hZ2UgPSBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpLCBvcHRpb25zKVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cCAoKSB7XG4gICAgICBpbWFnZS5vbmxvYWQgPSBudWxsXG4gICAgICBpbWFnZS5vbmVycm9yID0gbnVsbFxuICAgIH1cblxuICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsgY2xlYW51cCgpOyByZXNvbHZlKGltYWdlKSB9XG4gICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgY2xlYW51cCgpOyByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gbG9hZCB0aGUgaW1hZ2UgXCInICsgc3JjICsgJ1wiJykpIH1cblxuICAgIGltYWdlLnNyYyA9IHNyY1xuICB9KVxufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZSB2MS4zLjIgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJlxuXHRcdCFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHQhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKFxuXHRcdGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLnNlbGYgPT09IGZyZWVHbG9iYWxcblx0KSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXG5cdHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG9ialtrXS5tYXAoZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICB9KS5qb2luKHNlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9ialtrXSkpO1xuICAgICAgfVxuICAgIH0pLmpvaW4oc2VwKTtcblxuICB9XG5cbiAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG5hbWUpKSArIGVxICtcbiAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLmRlY29kZSA9IGV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2RlY29kZScpO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vZW5jb2RlJyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYSBzaW1wbGUgcGF0aCBVUkxcbiAgICBzaW1wbGVQYXRoUGF0dGVybiA9IC9eKFxcL1xcLz8oPyFcXC8pW15cXD9cXHNdKikoXFw/W15cXHNdKik/JC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bK2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIHV0aWwuaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCF1dGlsLmlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgLy8gQ29weSBjaHJvbWUsIElFLCBvcGVyYSBiYWNrc2xhc2gtaGFuZGxpbmcgYmVoYXZpb3IuXG4gIC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuICB2YXIgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/JyksXG4gICAgICBzcGxpdHRlciA9XG4gICAgICAgICAgKHF1ZXJ5SW5kZXggIT09IC0xICYmIHF1ZXJ5SW5kZXggPCB1cmwuaW5kZXhPZignIycpKSA/ICc/JyA6ICcjJyxcbiAgICAgIHVTcGxpdCA9IHVybC5zcGxpdChzcGxpdHRlciksXG4gICAgICBzbGFzaFJlZ2V4ID0gL1xcXFwvZztcbiAgdVNwbGl0WzBdID0gdVNwbGl0WzBdLnJlcGxhY2Uoc2xhc2hSZWdleCwgJy8nKTtcbiAgdXJsID0gdVNwbGl0LmpvaW4oc3BsaXR0ZXIpO1xuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIGlmICghc2xhc2hlc0Rlbm90ZUhvc3QgJiYgdXJsLnNwbGl0KCcjJykubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gVHJ5IGZhc3QgcGF0aCByZWdleHBcbiAgICB2YXIgc2ltcGxlUGF0aCA9IHNpbXBsZVBhdGhQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gICAgaWYgKHNpbXBsZVBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHJlc3Q7XG4gICAgICB0aGlzLmhyZWYgPSByZXN0O1xuICAgICAgdGhpcy5wYXRobmFtZSA9IHNpbXBsZVBhdGhbMV07XG4gICAgICBpZiAoc2ltcGxlUGF0aFsyXSkge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHNpbXBsZVBhdGhbMl07XG4gICAgICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55Y29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIEFTQ0lJLW9ubHkuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICBpZiAocmVzdC5pbmRleE9mKGFlKSA9PT0gLTEpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmICh1dGlsLmlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIHV0aWwuaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIHZhciB0a2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICBmb3IgKHZhciB0ayA9IDA7IHRrIDwgdGtleXMubGVuZ3RoOyB0aysrKSB7XG4gICAgdmFyIHRrZXkgPSB0a2V5c1t0a107XG4gICAgcmVzdWx0W3RrZXldID0gdGhpc1t0a2V5XTtcbiAgfVxuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgdmFyIHJrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgIGZvciAodmFyIHJrID0gMDsgcmsgPCBya2V5cy5sZW5ndGg7IHJrKyspIHtcbiAgICAgIHZhciBya2V5ID0gcmtleXNbcmtdO1xuICAgICAgaWYgKHJrZXkgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtya2V5XSA9IHJlbGF0aXZlW3JrZXldO1xuICAgIH1cblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgICAgICB2YXIgayA9IGtleXNbdl07XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghdXRpbC5pc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgfHwgc3JjUGF0aC5sZW5ndGggPiAxKSAmJlxuICAgICAgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fCBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcbiIsIi8qKlxuICogQGxpY3N0YXJ0IFRoZSBmb2xsb3dpbmcgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKlxuICogQ29weXJpZ2h0IDIwMjAgTW96aWxsYSBGb3VuZGF0aW9uXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIEBsaWNlbmQgVGhlIGFib3ZlIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZVxuICogSmF2YXNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZVxuICovXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwicGRmanMtZGlzdC9idWlsZC9wZGZcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGRmanMtZGlzdC9idWlsZC9wZGZcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGRmanMtZGlzdC9idWlsZC9wZGZcIl0gPSByb290LnBkZmpzTGliID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193X3BkZmpzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dfcGRmanNfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLnAgPSBcIlwiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193X3BkZmpzX3JlcXVpcmVfXyhfX3dfcGRmanNfcmVxdWlyZV9fLnMgPSAwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZExpbmtBdHRyaWJ1dGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmFkZExpbmtBdHRyaWJ1dGVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldEZpbGVuYW1lRnJvbVVybFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5nZXRGaWxlbmFtZUZyb21Vcmw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTGlua1RhcmdldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5MaW5rVGFyZ2V0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvYWRTY3JpcHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQREZEYXRlU3RyaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLlBERkRhdGVTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWlsZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLmJ1aWxkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERvY3VtZW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuZ2V0RG9jdW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTG9vcGJhY2tQb3J0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuTG9vcGJhY2tQb3J0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBERkRhdGFSYW5nZVRyYW5zcG9ydFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQREZXb3JrZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS5QREZXb3JrZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLnZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ01hcENvbXByZXNzaW9uVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9iamVjdFVSTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVPYmplY3RVUkw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmFsaWRBYnNvbHV0ZVVybFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkludmFsaWRQREZFeGNlcHRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT1BTXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLk9QUztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQYXNzd29yZFJlc3BvbnNlc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5QYXNzd29yZFJlc3BvbnNlcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZXJtaXNzaW9uRmxhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5QZXJtaXNzaW9uRmxhZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVOdWxsQ2hhcmFjdGVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5yZW1vdmVOdWxsQ2hhcmFjdGVycztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaGFkb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuc2hhZG93O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVU5TVVBQT1JURURfRkVBVFVSRVNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVXRpbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5VdGlsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZlcmJvc2l0eUxldmVsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlZlcmJvc2l0eUxldmVsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFubm90YXRpb25MYXllclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYW5ub3RhdGlvbl9sYXllci5Bbm5vdGF0aW9uTGF5ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXBpQ29tcGF0aWJpbGl0eVBhcmFtc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpX2NvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJHbG9iYWxXb3JrZXJPcHRpb25zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbmRlclRleHRMYXllclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdGV4dF9sYXllci5yZW5kZXJUZXh0TGF5ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1ZHR3JhcGhpY3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N2Zy5TVkdHcmFwaGljcztcbiAgfVxufSk7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfYXBpID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9hbm5vdGF0aW9uX2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxOSk7XG5cbnZhciBfYXBpX2NvbXBhdGliaWxpdHkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3dvcmtlcl9vcHRpb25zID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdGV4dF9sYXllciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjApO1xuXG52YXIgX3N2ZyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjEpO1xuXG5jb25zdCBwZGZqc1ZlcnNpb24gPSAnMi42LjM0Nyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJzNiZTljNjVmJztcbntcbiAgY29uc3Qge1xuICAgIGlzTm9kZUpTXG4gIH0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG4gIGlmIChpc05vZGVKUykge1xuICAgIGNvbnN0IFBERk5vZGVTdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIyKS5QREZOb2RlU3RyZWFtO1xuXG4gICAgKDAsIF9hcGkuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkpKHBhcmFtcyA9PiB7XG4gICAgICByZXR1cm4gbmV3IFBERk5vZGVTdHJlYW0ocGFyYW1zKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBQREZOZXR3b3JrU3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygyNSkuUERGTmV0d29ya1N0cmVhbTtcblxuICAgIGxldCBQREZGZXRjaFN0cmVhbTtcblxuICAgIGlmICgoMCwgX2Rpc3BsYXlfdXRpbHMuaXNGZXRjaFN1cHBvcnRlZCkoKSkge1xuICAgICAgUERGRmV0Y2hTdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI2KS5QREZGZXRjaFN0cmVhbTtcbiAgICB9XG5cbiAgICAoMCwgX2FwaS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkocGFyYW1zID0+IHtcbiAgICAgIGlmIChQREZGZXRjaFN0cmVhbSAmJiAoMCwgX2Rpc3BsYXlfdXRpbHMuaXNWYWxpZEZldGNoVXJsKShwYXJhbXMudXJsKSkge1xuICAgICAgICByZXR1cm4gbmV3IFBERkZldGNoU3RyZWFtKHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUERGTmV0d29ya1N0cmVhbShwYXJhbXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGRMaW5rQXR0cmlidXRlcyA9IGFkZExpbmtBdHRyaWJ1dGVzO1xuZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21VcmwgPSBnZXRGaWxlbmFtZUZyb21Vcmw7XG5leHBvcnRzLmlzRmV0Y2hTdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkO1xuZXhwb3J0cy5pc1ZhbGlkRmV0Y2hVcmwgPSBpc1ZhbGlkRmV0Y2hVcmw7XG5leHBvcnRzLmxvYWRTY3JpcHQgPSBsb2FkU2NyaXB0O1xuZXhwb3J0cy5kZXByZWNhdGVkID0gZGVwcmVjYXRlZDtcbmV4cG9ydHMuUERGRGF0ZVN0cmluZyA9IGV4cG9ydHMuU3RhdFRpbWVyID0gZXhwb3J0cy5ET01TVkdGYWN0b3J5ID0gZXhwb3J0cy5ET01DTWFwUmVhZGVyRmFjdG9yeSA9IGV4cG9ydHMuQmFzZUNNYXBSZWFkZXJGYWN0b3J5ID0gZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5CYXNlQ2FudmFzRmFjdG9yeSA9IGV4cG9ydHMuREVGQVVMVF9MSU5LX1JFTCA9IGV4cG9ydHMuTGlua1RhcmdldCA9IGV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWdlVmlld3BvcnQgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IERFRkFVTFRfTElOS19SRUwgPSBcIm5vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3dcIjtcbmV4cG9ydHMuREVGQVVMVF9MSU5LX1JFTCA9IERFRkFVTFRfTElOS19SRUw7XG5jb25zdCBTVkdfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5cbmNsYXNzIEJhc2VDYW52YXNGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VDYW52YXNGYWN0b3J5KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlYCBjYWxsZWQuXCIpO1xuICB9XG5cbiAgcmVzZXQoY2FudmFzQW5kQ29udGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNhbnZhcyBzaXplXCIpO1xuICAgIH1cblxuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZGVzdHJveShjYW52YXNBbmRDb250ZXh0KSB7XG4gICAgaWYgKCFjYW52YXNBbmRDb250ZXh0LmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgfVxuXG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMud2lkdGggPSAwO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMgPSBudWxsO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY29udGV4dCA9IG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VDYW52YXNGYWN0b3J5ID0gQmFzZUNhbnZhc0ZhY3Rvcnk7XG5cbmNsYXNzIERPTUNhbnZhc0ZhY3RvcnkgZXh0ZW5kcyBCYXNlQ2FudmFzRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICB9ID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RvY3VtZW50ID0gb3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHRcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gRE9NQ2FudmFzRmFjdG9yeTtcblxuY2xhc3MgQmFzZUNNYXBSZWFkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGJhc2VVcmwgPSBudWxsLFxuICAgIGlzQ29tcHJlc3NlZCA9IGZhbHNlXG4gIH0pIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUNNYXBSZWFkZXJGYWN0b3J5KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuaXNDb21wcmVzc2VkID0gaXNDb21wcmVzc2VkO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goe1xuICAgIG5hbWVcbiAgfSkge1xuICAgIGlmICghdGhpcy5iYXNlVXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBDTWFwIFwiYmFzZVVybFwiIHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCwgZW5zdXJlIHRoYXQgJyArICd0aGUgXCJjTWFwVXJsXCIgYW5kIFwiY01hcFBhY2tlZFwiIEFQSSBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNNYXAgbmFtZSBtdXN0IGJlIHNwZWNpZmllZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5iYXNlVXJsICsgbmFtZSArICh0aGlzLmlzQ29tcHJlc3NlZCA/IFwiLmJjbWFwXCIgOiBcIlwiKTtcbiAgICBjb25zdCBjb21wcmVzc2lvblR5cGUgPSB0aGlzLmlzQ29tcHJlc3NlZCA/IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZIDogX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FO1xuICAgIHJldHVybiB0aGlzLl9mZXRjaERhdGEodXJsLCBjb21wcmVzc2lvblR5cGUpLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkICR7dGhpcy5pc0NvbXByZXNzZWQgPyBcImJpbmFyeSBcIiA6IFwiXCJ9Q01hcCBhdDogJHt1cmx9YCk7XG4gICAgfSk7XG4gIH1cblxuICBfZmV0Y2hEYXRhKHVybCwgY29tcHJlc3Npb25UeXBlKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLlwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQmFzZUNNYXBSZWFkZXJGYWN0b3J5ID0gQmFzZUNNYXBSZWFkZXJGYWN0b3J5O1xuXG5jbGFzcyBET01DTWFwUmVhZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VDTWFwUmVhZGVyRmFjdG9yeSB7XG4gIF9mZXRjaERhdGEodXJsLCBjb21wcmVzc2lvblR5cGUpIHtcbiAgICBpZiAoaXNGZXRjaFN1cHBvcnRlZCgpICYmIGlzVmFsaWRGZXRjaFVybCh1cmwsIGRvY3VtZW50LmJhc2VVUkkpKSB7XG4gICAgICByZXR1cm4gZmV0Y2godXJsKS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjTWFwRGF0YTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXByZXNzZWQpIHtcbiAgICAgICAgICBjTWFwRGF0YSA9IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNNYXBEYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNNYXBEYXRhLFxuICAgICAgICAgIGNvbXByZXNzaW9uVHlwZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgIHJlcXVlc3Qub3BlbihcIkdFVFwiLCB1cmwsIHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5pc0NvbXByZXNzZWQpIHtcbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAyMDAgfHwgcmVxdWVzdC5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICBsZXQgY01hcERhdGE7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc0NvbXByZXNzZWQgJiYgcmVxdWVzdC5yZXNwb25zZSkge1xuICAgICAgICAgICAgY01hcERhdGEgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzQ29tcHJlc3NlZCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dCkge1xuICAgICAgICAgICAgY01hcERhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocmVxdWVzdC5yZXNwb25zZVRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjTWFwRGF0YSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgIGNNYXBEYXRhLFxuICAgICAgICAgICAgICBjb21wcmVzc2lvblR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVxdWVzdC5zdGF0dXNUZXh0KSk7XG4gICAgICB9O1xuXG4gICAgICByZXF1ZXN0LnNlbmQobnVsbCk7XG4gICAgfSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG5cbmNsYXNzIERPTVNWR0ZhY3Rvcnkge1xuICBjcmVhdGUod2lkdGgsIGhlaWdodCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwLCBcIkludmFsaWQgU1ZHIGRpbWVuc2lvbnNcIik7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgXCJzdmc6c3ZnXCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFwiMS4xXCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBoZWlnaHQgKyBcInB4XCIpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLCBcIjAgMCBcIiArIHdpZHRoICsgXCIgXCIgKyBoZWlnaHQpO1xuICAgIHJldHVybiBzdmc7XG4gIH1cblxuICBjcmVhdGVFbGVtZW50KHR5cGUpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiwgXCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGVcIik7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsIHR5cGUpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01TVkdGYWN0b3J5ID0gRE9NU1ZHRmFjdG9yeTtcblxuY2xhc3MgUGFnZVZpZXdwb3J0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHZpZXdCb3gsXG4gICAgc2NhbGUsXG4gICAgcm90YXRpb24sXG4gICAgb2Zmc2V0WCA9IDAsXG4gICAgb2Zmc2V0WSA9IDAsXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9KSB7XG4gICAgdGhpcy52aWV3Qm94ID0gdmlld0JveDtcbiAgICB0aGlzLnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uO1xuICAgIHRoaXMub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgdGhpcy5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICBjb25zdCBjZW50ZXJYID0gKHZpZXdCb3hbMl0gKyB2aWV3Qm94WzBdKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWSA9ICh2aWV3Qm94WzNdICsgdmlld0JveFsxXSkgLyAyO1xuICAgIGxldCByb3RhdGVBLCByb3RhdGVCLCByb3RhdGVDLCByb3RhdGVEO1xuICAgIHJvdGF0aW9uID0gcm90YXRpb24gJSAzNjA7XG4gICAgcm90YXRpb24gPSByb3RhdGlvbiA8IDAgPyByb3RhdGlvbiArIDM2MCA6IHJvdGF0aW9uO1xuXG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxODA6XG4gICAgICAgIHJvdGF0ZUEgPSAtMTtcbiAgICAgICAgcm90YXRlQiA9IDA7XG4gICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICByb3RhdGVEID0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgcm90YXRlQyA9IDE7XG4gICAgICAgIHJvdGF0ZUQgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyNzA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gLTE7XG4gICAgICAgIHJvdGF0ZUMgPSAtMTtcbiAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJvdGF0ZUEgPSAxO1xuICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgcm90YXRlQyA9IDA7XG4gICAgICAgIHJvdGF0ZUQgPSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhZ2VWaWV3cG9ydDogSW52YWxpZCByb3RhdGlvbiwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGRlZ3JlZXMuXCIpO1xuICAgIH1cblxuICAgIGlmIChkb250RmxpcCkge1xuICAgICAgcm90YXRlQyA9IC1yb3RhdGVDO1xuICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgIGxldCB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgIG9mZnNldENhbnZhc1ggPSBNYXRoLmFicyhjZW50ZXJZIC0gdmlld0JveFsxXSkgKiBzY2FsZSArIG9mZnNldFg7XG4gICAgICBvZmZzZXRDYW52YXNZID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRZO1xuICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKHZpZXdCb3hbMl0gLSB2aWV3Qm94WzBdKSAqIHNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRDYW52YXNYID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRYO1xuICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgIHdpZHRoID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IFtyb3RhdGVBICogc2NhbGUsIHJvdGF0ZUIgKiBzY2FsZSwgcm90YXRlQyAqIHNjYWxlLCByb3RhdGVEICogc2NhbGUsIG9mZnNldENhbnZhc1ggLSByb3RhdGVBICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlQyAqIHNjYWxlICogY2VudGVyWSwgb2Zmc2V0Q2FudmFzWSAtIHJvdGF0ZUIgKiBzY2FsZSAqIGNlbnRlclggLSByb3RhdGVEICogc2NhbGUgKiBjZW50ZXJZXTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBjbG9uZSh7XG4gICAgc2NhbGUgPSB0aGlzLnNjYWxlLFxuICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbixcbiAgICBvZmZzZXRYID0gdGhpcy5vZmZzZXRYLFxuICAgIG9mZnNldFkgPSB0aGlzLm9mZnNldFksXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBjb252ZXJ0VG9WaWV3cG9ydFBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgfVxuXG4gIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICBjb25zdCB0b3BMZWZ0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFsyXSwgcmVjdFszXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIHJldHVybiBbdG9wTGVmdFswXSwgdG9wTGVmdFsxXSwgYm90dG9tUmlnaHRbMF0sIGJvdHRvbVJpZ2h0WzFdXTtcbiAgfVxuXG4gIGNvbnZlcnRUb1BkZlBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuY2xhc3MgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgdHlwZSkge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuY29uc3QgTGlua1RhcmdldCA9IHtcbiAgTk9ORTogMCxcbiAgU0VMRjogMSxcbiAgQkxBTks6IDIsXG4gIFBBUkVOVDogMyxcbiAgVE9QOiA0XG59O1xuZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcblxuZnVuY3Rpb24gYWRkTGlua0F0dHJpYnV0ZXMobGluaywge1xuICB1cmwsXG4gIHRhcmdldCxcbiAgcmVsLFxuICBlbmFibGVkID0gdHJ1ZVxufSA9IHt9KSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKHVybCAmJiB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiLCAnYWRkTGlua0F0dHJpYnV0ZXM6IEEgdmFsaWQgXCJ1cmxcIiBwYXJhbWV0ZXIgbXVzdCBwcm92aWRlZC4nKTtcbiAgY29uc3QgdXJsTnVsbFJlbW92ZWQgPSAoMCwgX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnMpKHVybCk7XG5cbiAgaWYgKGVuYWJsZWQpIHtcbiAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsTnVsbFJlbW92ZWQ7XG4gIH0gZWxzZSB7XG4gICAgbGluay5ocmVmID0gXCJcIjtcbiAgICBsaW5rLnRpdGxlID0gYERpc2FibGVkOiAke3VybE51bGxSZW1vdmVkfWA7XG5cbiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGxldCB0YXJnZXRTdHIgPSBcIlwiO1xuXG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSBMaW5rVGFyZ2V0Lk5PTkU6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5TRUxGOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfc2VsZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuQkxBTks6XG4gICAgICB0YXJnZXRTdHIgPSBcIl9ibGFua1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuUEFSRU5UOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfcGFyZW50XCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5UT1A6XG4gICAgICB0YXJnZXRTdHIgPSBcIl90b3BcIjtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGluay50YXJnZXQgPSB0YXJnZXRTdHI7XG4gIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gXCJzdHJpbmdcIiA/IHJlbCA6IERFRkFVTFRfTElOS19SRUw7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbVVybCh1cmwpIHtcbiAgY29uc3QgYW5jaG9yID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuICBjb25zdCBxdWVyeSA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgY29uc3QgZW5kID0gTWF0aC5taW4oYW5jaG9yID4gMCA/IGFuY2hvciA6IHVybC5sZW5ndGgsIHF1ZXJ5ID4gMCA/IHF1ZXJ5IDogdXJsLmxlbmd0aCk7XG4gIHJldHVybiB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZihcIi9cIiwgZW5kKSArIDEsIGVuZCk7XG59XG5cbmNsYXNzIFN0YXRUaW1lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhcnRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy50aW1lcyA9IFtdO1xuICB9XG5cbiAgdGltZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5zdGFydGVkKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbWVyIGlzIGFscmVhZHkgcnVubmluZyBmb3IgJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZFtuYW1lXSA9IERhdGUubm93KCk7XG4gIH1cblxuICB0aW1lRW5kKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMuc3RhcnRlZCkpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzLnB1c2goe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0ZWRbbmFtZV0sXG4gICAgICBlbmQ6IERhdGUubm93KClcbiAgICB9KTtcbiAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3Qgb3V0QnVmID0gW107XG4gICAgbGV0IGxvbmdlc3QgPSAwO1xuXG4gICAgZm9yIChjb25zdCB0aW1lIG9mIHRoaXMudGltZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aW1lLm5hbWU7XG5cbiAgICAgIGlmIChuYW1lLmxlbmd0aCA+IGxvbmdlc3QpIHtcbiAgICAgICAgbG9uZ2VzdCA9IG5hbWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZSBvZiB0aGlzLnRpbWVzKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUuZW5kIC0gdGltZS5zdGFydDtcbiAgICAgIG91dEJ1Zi5wdXNoKGAke3RpbWUubmFtZS5wYWRFbmQobG9uZ2VzdCl9ICR7ZHVyYXRpb259bXNcXG5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0QnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuZnVuY3Rpb24gaXNGZXRjaFN1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBmZXRjaCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVzcG9uc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJib2R5XCIgaW4gUmVzcG9uc2UucHJvdG90eXBlICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEZldGNoVXJsKHVybCwgYmFzZVVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3RvY29sXG4gICAgfSA9IGJhc2VVcmwgPyBuZXcgVVJMKHVybCwgYmFzZVVybCkgOiBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgfHwgcHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTY3JpcHQoc3JjKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xuXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDYW5ub3QgbG9hZCBzY3JpcHQgYXQ6ICR7c2NyaXB0LnNyY31gKSk7XG4gICAgfTtcblxuICAgIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZWQoZGV0YWlscykge1xuICBjb25zb2xlLmxvZyhcIkRlcHJlY2F0ZWQgQVBJIHVzYWdlOiBcIiArIGRldGFpbHMpO1xufVxuXG5sZXQgcGRmRGF0ZVN0cmluZ1JlZ2V4O1xuXG5jbGFzcyBQREZEYXRlU3RyaW5nIHtcbiAgc3RhdGljIHRvRGF0ZU9iamVjdChpbnB1dCkge1xuICAgIGlmICghaW5wdXQgfHwgISgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXBkZkRhdGVTdHJpbmdSZWdleCkge1xuICAgICAgcGRmRGF0ZVN0cmluZ1JlZ2V4ID0gbmV3IFJlZ0V4cChcIl5EOlwiICsgXCIoXFxcXGR7NH0pXCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIihbWnwrfC1dKT9cIiArIFwiKFxcXFxkezJ9KT9cIiArIFwiJz9cIiArIFwiKFxcXFxkezJ9KT9cIiArIFwiJz9cIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHBkZkRhdGVTdHJpbmdSZWdleC5leGVjKGlucHV0KTtcblxuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgeWVhciA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKTtcbiAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMCk7XG4gICAgbW9udGggPSBtb250aCA+PSAxICYmIG1vbnRoIDw9IDEyID8gbW9udGggLSAxIDogMDtcbiAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTApO1xuICAgIGRheSA9IGRheSA+PSAxICYmIGRheSA8PSAzMSA/IGRheSA6IDE7XG4gICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaGVzWzRdLCAxMCk7XG4gICAgaG91ciA9IGhvdXIgPj0gMCAmJiBob3VyIDw9IDIzID8gaG91ciA6IDA7XG4gICAgbGV0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoZXNbNV0sIDEwKTtcbiAgICBtaW51dGUgPSBtaW51dGUgPj0gMCAmJiBtaW51dGUgPD0gNTkgPyBtaW51dGUgOiAwO1xuICAgIGxldCBzZWNvbmQgPSBwYXJzZUludChtYXRjaGVzWzZdLCAxMCk7XG4gICAgc2Vjb25kID0gc2Vjb25kID49IDAgJiYgc2Vjb25kIDw9IDU5ID8gc2Vjb25kIDogMDtcbiAgICBjb25zdCB1bml2ZXJzYWxUaW1lUmVsYXRpb24gPSBtYXRjaGVzWzddIHx8IFwiWlwiO1xuICAgIGxldCBvZmZzZXRIb3VyID0gcGFyc2VJbnQobWF0Y2hlc1s4XSwgMTApO1xuICAgIG9mZnNldEhvdXIgPSBvZmZzZXRIb3VyID49IDAgJiYgb2Zmc2V0SG91ciA8PSAyMyA/IG9mZnNldEhvdXIgOiAwO1xuICAgIGxldCBvZmZzZXRNaW51dGUgPSBwYXJzZUludChtYXRjaGVzWzldLCAxMCkgfHwgMDtcbiAgICBvZmZzZXRNaW51dGUgPSBvZmZzZXRNaW51dGUgPj0gMCAmJiBvZmZzZXRNaW51dGUgPD0gNTkgPyBvZmZzZXRNaW51dGUgOiAwO1xuXG4gICAgaWYgKHVuaXZlcnNhbFRpbWVSZWxhdGlvbiA9PT0gXCItXCIpIHtcbiAgICAgIGhvdXIgKz0gb2Zmc2V0SG91cjtcbiAgICAgIG1pbnV0ZSArPSBvZmZzZXRNaW51dGU7XG4gICAgfSBlbHNlIGlmICh1bml2ZXJzYWxUaW1lUmVsYXRpb24gPT09IFwiK1wiKSB7XG4gICAgICBob3VyIC09IG9mZnNldEhvdXI7XG4gICAgICBtaW51dGUgLT0gb2Zmc2V0TWludXRlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEYXRlU3RyaW5nID0gUERGRGF0ZVN0cmluZztcblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5ID0gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG5leHBvcnRzLmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZztcbmV4cG9ydHMuZ2V0TW9kaWZpY2F0aW9uRGF0ZSA9IGdldE1vZGlmaWNhdGlvbkRhdGU7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0Jvb2wgPSBpc0Jvb2w7XG5leHBvcnRzLmlzTnVtID0gaXNOdW07XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLmlzU2FtZU9yaWdpbiA9IGlzU2FtZU9yaWdpbjtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLnJlbW92ZU51bGxDaGFyYWN0ZXJzID0gcmVtb3ZlTnVsbENoYXJhY3RlcnM7XG5leHBvcnRzLnNldFZlcmJvc2l0eUxldmVsID0gc2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLnNoYWRvdyA9IHNoYWRvdztcbmV4cG9ydHMuc3RyaW5nMzIgPSBzdHJpbmczMjtcbmV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHN0cmluZ1RvQnl0ZXM7XG5leHBvcnRzLnN0cmluZ1RvUERGU3RyaW5nID0gc3RyaW5nVG9QREZTdHJpbmc7XG5leHBvcnRzLnN0cmluZ1RvVVRGOFN0cmluZyA9IHN0cmluZ1RvVVRGOFN0cmluZztcbmV4cG9ydHMudXRmOFN0cmluZ1RvU3RyaW5nID0gdXRmOFN0cmluZ1RvU3RyaW5nO1xuZXhwb3J0cy53YXJuID0gd2FybjtcbmV4cG9ydHMudW5yZWFjaGFibGUgPSB1bnJlYWNoYWJsZTtcbmV4cG9ydHMuSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0gZXhwb3J0cy5Jc0xpdHRsZUVuZGlhbkNhY2hlZCA9IGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuVXRpbCA9IGV4cG9ydHMuVW5rbm93bkVycm9yRXhjZXB0aW9uID0gZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuSW1hZ2VLaW5kID0gZXhwb3J0cy5Gb250VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTWFya2VkU3RhdGUgPSBleHBvcnRzLkFubm90YXRpb25GbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBleHBvcnRzLk9QUyA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IHZvaWQgMDtcblxuX193X3BkZmpzX3JlcXVpcmVfXygzKTtcblxuY29uc3QgSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBJREVOVElUWV9NQVRSSVg7XG5jb25zdCBGT05UX0lERU5USVRZX01BVFJJWCA9IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdO1xuZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IEZPTlRfSURFTlRJVFlfTUFUUklYO1xuY29uc3QgUGVybWlzc2lvbkZsYWcgPSB7XG4gIFBSSU5UOiAweDA0LFxuICBNT0RJRllfQ09OVEVOVFM6IDB4MDgsXG4gIENPUFk6IDB4MTAsXG4gIE1PRElGWV9BTk5PVEFUSU9OUzogMHgyMCxcbiAgRklMTF9JTlRFUkFDVElWRV9GT1JNUzogMHgxMDAsXG4gIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDB4MjAwLFxuICBBU1NFTUJMRTogMHg0MDAsXG4gIFBSSU5UX0hJR0hfUVVBTElUWTogMHg4MDBcbn07XG5leHBvcnRzLlBlcm1pc3Npb25GbGFnID0gUGVybWlzc2lvbkZsYWc7XG5jb25zdCBUZXh0UmVuZGVyaW5nTW9kZSA9IHtcbiAgRklMTDogMCxcbiAgU1RST0tFOiAxLFxuICBGSUxMX1NUUk9LRTogMixcbiAgSU5WSVNJQkxFOiAzLFxuICBGSUxMX0FERF9UT19QQVRIOiA0LFxuICBTVFJPS0VfQUREX1RPX1BBVEg6IDUsXG4gIEZJTExfU1RST0tFX0FERF9UT19QQVRIOiA2LFxuICBBRERfVE9fUEFUSDogNyxcbiAgRklMTF9TVFJPS0VfTUFTSzogMyxcbiAgQUREX1RPX1BBVEhfRkxBRzogNFxufTtcbmV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTtcbmNvbnN0IEltYWdlS2luZCA9IHtcbiAgR1JBWVNDQUxFXzFCUFA6IDEsXG4gIFJHQl8yNEJQUDogMixcbiAgUkdCQV8zMkJQUDogM1xufTtcbmV4cG9ydHMuSW1hZ2VLaW5kID0gSW1hZ2VLaW5kO1xuY29uc3QgQW5ub3RhdGlvblR5cGUgPSB7XG4gIFRFWFQ6IDEsXG4gIExJTks6IDIsXG4gIEZSRUVURVhUOiAzLFxuICBMSU5FOiA0LFxuICBTUVVBUkU6IDUsXG4gIENJUkNMRTogNixcbiAgUE9MWUdPTjogNyxcbiAgUE9MWUxJTkU6IDgsXG4gIEhJR0hMSUdIVDogOSxcbiAgVU5ERVJMSU5FOiAxMCxcbiAgU1FVSUdHTFk6IDExLFxuICBTVFJJS0VPVVQ6IDEyLFxuICBTVEFNUDogMTMsXG4gIENBUkVUOiAxNCxcbiAgSU5LOiAxNSxcbiAgUE9QVVA6IDE2LFxuICBGSUxFQVRUQUNITUVOVDogMTcsXG4gIFNPVU5EOiAxOCxcbiAgTU9WSUU6IDE5LFxuICBXSURHRVQ6IDIwLFxuICBTQ1JFRU46IDIxLFxuICBQUklOVEVSTUFSSzogMjIsXG4gIFRSQVBORVQ6IDIzLFxuICBXQVRFUk1BUks6IDI0LFxuICBUSFJFRUQ6IDI1LFxuICBSRURBQ1Q6IDI2XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlO1xuY29uc3QgQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlID0ge1xuICBNQVJLRUQ6IFwiTWFya2VkXCIsXG4gIFJFVklFVzogXCJSZXZpZXdcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlID0gQW5ub3RhdGlvblN0YXRlTW9kZWxUeXBlO1xuY29uc3QgQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0ge1xuICBNQVJLRUQ6IFwiTWFya2VkXCIsXG4gIFVOTUFSS0VEOiBcIlVubWFya2VkXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25NYXJrZWRTdGF0ZSA9IEFubm90YXRpb25NYXJrZWRTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXZpZXdTdGF0ZSA9IHtcbiAgQUNDRVBURUQ6IFwiQWNjZXB0ZWRcIixcbiAgUkVKRUNURUQ6IFwiUmVqZWN0ZWRcIixcbiAgQ0FOQ0VMTEVEOiBcIkNhbmNlbGxlZFwiLFxuICBDT01QTEVURUQ6IFwiQ29tcGxldGVkXCIsXG4gIE5PTkU6IFwiTm9uZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uUmV2aWV3U3RhdGUgPSBBbm5vdGF0aW9uUmV2aWV3U3RhdGU7XG5jb25zdCBBbm5vdGF0aW9uUmVwbHlUeXBlID0ge1xuICBHUk9VUDogXCJHcm91cFwiLFxuICBSRVBMWTogXCJSXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXBseVR5cGUgPSBBbm5vdGF0aW9uUmVwbHlUeXBlO1xuY29uc3QgQW5ub3RhdGlvbkZsYWcgPSB7XG4gIElOVklTSUJMRTogMHgwMSxcbiAgSElEREVOOiAweDAyLFxuICBQUklOVDogMHgwNCxcbiAgTk9aT09NOiAweDA4LFxuICBOT1JPVEFURTogMHgxMCxcbiAgTk9WSUVXOiAweDIwLFxuICBSRUFET05MWTogMHg0MCxcbiAgTE9DS0VEOiAweDgwLFxuICBUT0dHTEVOT1ZJRVc6IDB4MTAwLFxuICBMT0NLRURDT05URU5UUzogMHgyMDBcbn07XG5leHBvcnRzLkFubm90YXRpb25GbGFnID0gQW5ub3RhdGlvbkZsYWc7XG5jb25zdCBBbm5vdGF0aW9uRmllbGRGbGFnID0ge1xuICBSRUFET05MWTogMHgwMDAwMDAxLFxuICBSRVFVSVJFRDogMHgwMDAwMDAyLFxuICBOT0VYUE9SVDogMHgwMDAwMDA0LFxuICBNVUxUSUxJTkU6IDB4MDAwMTAwMCxcbiAgUEFTU1dPUkQ6IDB4MDAwMjAwMCxcbiAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLFxuICBSQURJTzogMHgwMDA4MDAwLFxuICBQVVNIQlVUVE9OOiAweDAwMTAwMDAsXG4gIENPTUJPOiAweDAwMjAwMDAsXG4gIEVESVQ6IDB4MDA0MDAwMCxcbiAgU09SVDogMHgwMDgwMDAwLFxuICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsXG4gIE1VTFRJU0VMRUNUOiAweDAyMDAwMDAsXG4gIERPTk9UU1BFTExDSEVDSzogMHgwNDAwMDAwLFxuICBET05PVFNDUk9MTDogMHgwODAwMDAwLFxuICBDT01COiAweDEwMDAwMDAsXG4gIFJJQ0hURVhUOiAweDIwMDAwMDAsXG4gIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsXG4gIENPTU1JVE9OU0VMQ0hBTkdFOiAweDQwMDAwMDBcbn07XG5leHBvcnRzLkFubm90YXRpb25GaWVsZEZsYWcgPSBBbm5vdGF0aW9uRmllbGRGbGFnO1xuY29uc3QgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IHtcbiAgU09MSUQ6IDEsXG4gIERBU0hFRDogMixcbiAgQkVWRUxFRDogMyxcbiAgSU5TRVQ6IDQsXG4gIFVOREVSTElORTogNVxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxQzogXCJUWVBFMUNcIixcbiAgQ0lERk9OVFRZUEUwOiBcIkNJREZPTlRUWVBFMFwiLFxuICBDSURGT05UVFlQRTBDOiBcIkNJREZPTlRUWVBFMENcIixcbiAgVFJVRVRZUEU6IFwiVFJVRVRZUEVcIixcbiAgQ0lERk9OVFRZUEUyOiBcIkNJREZPTlRUWVBFMlwiLFxuICBUWVBFMzogXCJUWVBFM1wiLFxuICBPUEVOVFlQRTogXCJPUEVOVFlQRVwiLFxuICBUWVBFMDogXCJUWVBFMFwiLFxuICBNTVRZUEUxOiBcIk1NVFlQRTFcIlxufTtcbmV4cG9ydHMuRm9udFR5cGUgPSBGb250VHlwZTtcbmNvbnN0IFZlcmJvc2l0eUxldmVsID0ge1xuICBFUlJPUlM6IDAsXG4gIFdBUk5JTkdTOiAxLFxuICBJTkZPUzogNVxufTtcbmV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBWZXJib3NpdHlMZXZlbDtcbmNvbnN0IENNYXBDb21wcmVzc2lvblR5cGUgPSB7XG4gIE5PTkU6IDAsXG4gIEJJTkFSWTogMSxcbiAgU1RSRUFNOiAyXG59O1xuZXhwb3J0cy5DTWFwQ29tcHJlc3Npb25UeXBlID0gQ01hcENvbXByZXNzaW9uVHlwZTtcbmNvbnN0IE9QUyA9IHtcbiAgZGVwZW5kZW5jeTogMSxcbiAgc2V0TGluZVdpZHRoOiAyLFxuICBzZXRMaW5lQ2FwOiAzLFxuICBzZXRMaW5lSm9pbjogNCxcbiAgc2V0TWl0ZXJMaW1pdDogNSxcbiAgc2V0RGFzaDogNixcbiAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LFxuICBzZXRGbGF0bmVzczogOCxcbiAgc2V0R1N0YXRlOiA5LFxuICBzYXZlOiAxMCxcbiAgcmVzdG9yZTogMTEsXG4gIHRyYW5zZm9ybTogMTIsXG4gIG1vdmVUbzogMTMsXG4gIGxpbmVUbzogMTQsXG4gIGN1cnZlVG86IDE1LFxuICBjdXJ2ZVRvMjogMTYsXG4gIGN1cnZlVG8zOiAxNyxcbiAgY2xvc2VQYXRoOiAxOCxcbiAgcmVjdGFuZ2xlOiAxOSxcbiAgc3Ryb2tlOiAyMCxcbiAgY2xvc2VTdHJva2U6IDIxLFxuICBmaWxsOiAyMixcbiAgZW9GaWxsOiAyMyxcbiAgZmlsbFN0cm9rZTogMjQsXG4gIGVvRmlsbFN0cm9rZTogMjUsXG4gIGNsb3NlRmlsbFN0cm9rZTogMjYsXG4gIGNsb3NlRU9GaWxsU3Ryb2tlOiAyNyxcbiAgZW5kUGF0aDogMjgsXG4gIGNsaXA6IDI5LFxuICBlb0NsaXA6IDMwLFxuICBiZWdpblRleHQ6IDMxLFxuICBlbmRUZXh0OiAzMixcbiAgc2V0Q2hhclNwYWNpbmc6IDMzLFxuICBzZXRXb3JkU3BhY2luZzogMzQsXG4gIHNldEhTY2FsZTogMzUsXG4gIHNldExlYWRpbmc6IDM2LFxuICBzZXRGb250OiAzNyxcbiAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IDM4LFxuICBzZXRUZXh0UmlzZTogMzksXG4gIG1vdmVUZXh0OiA0MCxcbiAgc2V0TGVhZGluZ01vdmVUZXh0OiA0MSxcbiAgc2V0VGV4dE1hdHJpeDogNDIsXG4gIG5leHRMaW5lOiA0MyxcbiAgc2hvd1RleHQ6IDQ0LFxuICBzaG93U3BhY2VkVGV4dDogNDUsXG4gIG5leHRMaW5lU2hvd1RleHQ6IDQ2LFxuICBuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDogNDcsXG4gIHNldENoYXJXaWR0aDogNDgsXG4gIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksXG4gIHNldFN0cm9rZUNvbG9yU3BhY2U6IDUwLFxuICBzZXRGaWxsQ29sb3JTcGFjZTogNTEsXG4gIHNldFN0cm9rZUNvbG9yOiA1MixcbiAgc2V0U3Ryb2tlQ29sb3JOOiA1MyxcbiAgc2V0RmlsbENvbG9yOiA1NCxcbiAgc2V0RmlsbENvbG9yTjogNTUsXG4gIHNldFN0cm9rZUdyYXk6IDU2LFxuICBzZXRGaWxsR3JheTogNTcsXG4gIHNldFN0cm9rZVJHQkNvbG9yOiA1OCxcbiAgc2V0RmlsbFJHQkNvbG9yOiA1OSxcbiAgc2V0U3Ryb2tlQ01ZS0NvbG9yOiA2MCxcbiAgc2V0RmlsbENNWUtDb2xvcjogNjEsXG4gIHNoYWRpbmdGaWxsOiA2MixcbiAgYmVnaW5JbmxpbmVJbWFnZTogNjMsXG4gIGJlZ2luSW1hZ2VEYXRhOiA2NCxcbiAgZW5kSW5saW5lSW1hZ2U6IDY1LFxuICBwYWludFhPYmplY3Q6IDY2LFxuICBtYXJrUG9pbnQ6IDY3LFxuICBtYXJrUG9pbnRQcm9wczogNjgsXG4gIGJlZ2luTWFya2VkQ29udGVudDogNjksXG4gIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCxcbiAgZW5kTWFya2VkQ29udGVudDogNzEsXG4gIGJlZ2luQ29tcGF0OiA3MixcbiAgZW5kQ29tcGF0OiA3MyxcbiAgcGFpbnRGb3JtWE9iamVjdEJlZ2luOiA3NCxcbiAgcGFpbnRGb3JtWE9iamVjdEVuZDogNzUsXG4gIGJlZ2luR3JvdXA6IDc2LFxuICBlbmRHcm91cDogNzcsXG4gIGJlZ2luQW5ub3RhdGlvbnM6IDc4LFxuICBlbmRBbm5vdGF0aW9uczogNzksXG4gIGJlZ2luQW5ub3RhdGlvbjogODAsXG4gIGVuZEFubm90YXRpb246IDgxLFxuICBwYWludEpwZWdYT2JqZWN0OiA4MixcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiA4MyxcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LFxuICBwYWludEltYWdlWE9iamVjdDogODUsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OiA4NixcbiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsXG4gIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiA4OCxcbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0OiA4OSxcbiAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCxcbiAgY29uc3RydWN0UGF0aDogOTFcbn07XG5leHBvcnRzLk9QUyA9IE9QUztcbmNvbnN0IFVOU1VQUE9SVEVEX0ZFQVRVUkVTID0ge1xuICB1bmtub3duOiBcInVua25vd25cIixcbiAgZm9ybXM6IFwiZm9ybXNcIixcbiAgamF2YVNjcmlwdDogXCJqYXZhU2NyaXB0XCIsXG4gIHNtYXNrOiBcInNtYXNrXCIsXG4gIHNoYWRpbmdQYXR0ZXJuOiBcInNoYWRpbmdQYXR0ZXJuXCIsXG4gIGZvbnQ6IFwiZm9udFwiLFxuICBlcnJvclRpbGluZ1BhdHRlcm46IFwiZXJyb3JUaWxpbmdQYXR0ZXJuXCIsXG4gIGVycm9yRXh0R1N0YXRlOiBcImVycm9yRXh0R1N0YXRlXCIsXG4gIGVycm9yWE9iamVjdDogXCJlcnJvclhPYmplY3RcIixcbiAgZXJyb3JGb250TG9hZFR5cGUzOiBcImVycm9yRm9udExvYWRUeXBlM1wiLFxuICBlcnJvckZvbnRTdGF0ZTogXCJlcnJvckZvbnRTdGF0ZVwiLFxuICBlcnJvckZvbnRNaXNzaW5nOiBcImVycm9yRm9udE1pc3NpbmdcIixcbiAgZXJyb3JGb250VHJhbnNsYXRlOiBcImVycm9yRm9udFRyYW5zbGF0ZVwiLFxuICBlcnJvckNvbG9yU3BhY2U6IFwiZXJyb3JDb2xvclNwYWNlXCIsXG4gIGVycm9yT3BlcmF0b3JMaXN0OiBcImVycm9yT3BlcmF0b3JMaXN0XCIsXG4gIGVycm9yRm9udFRvVW5pY29kZTogXCJlcnJvckZvbnRUb1VuaWNvZGVcIixcbiAgZXJyb3JGb250TG9hZE5hdGl2ZTogXCJlcnJvckZvbnRMb2FkTmF0aXZlXCIsXG4gIGVycm9yRm9udEdldFBhdGg6IFwiZXJyb3JGb250R2V0UGF0aFwiLFxuICBlcnJvck1hcmtlZENvbnRlbnQ6IFwiZXJyb3JNYXJrZWRDb250ZW50XCJcbn07XG5leHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gVU5TVVBQT1JURURfRkVBVFVSRVM7XG5jb25zdCBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgTkVFRF9QQVNTV09SRDogMSxcbiAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG59O1xuZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xubGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG5mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkpIHtcbiAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIHZlcmJvc2l0eTtcbn1cblxuZnVuY3Rpb24gaW5mbyhtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUykge1xuICAgIGNvbnNvbGUubG9nKGBJbmZvOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykge1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpIHtcbiAgICB1bnJlYWNoYWJsZShtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbihiYXNlVXJsLCBvdGhlclVybCkge1xuICBsZXQgYmFzZTtcblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKGJhc2VVcmwpO1xuXG4gICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gXCJudWxsXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpO1xuICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJodHRwOlwiOlxuICAgIGNhc2UgXCJodHRwczpcIjpcbiAgICBjYXNlIFwiZnRwOlwiOlxuICAgIGNhc2UgXCJtYWlsdG86XCI6XG4gICAgY2FzZSBcInRlbDpcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCkge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhYnNvbHV0ZVVybCA9IGJhc2VVcmwgPyBuZXcgVVJMKHVybCwgYmFzZVVybCkgOiBuZXcgVVJMKHVybCk7XG5cbiAgICBpZiAoX2lzVmFsaWRQcm90b2NvbChhYnNvbHV0ZVVybCkpIHtcbiAgICAgIHJldHVybiBhYnNvbHV0ZVVybDtcbiAgICB9XG4gIH0gY2F0Y2ggKGV4KSB7fVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzaGFkb3cob2JqLCBwcm9wLCB2YWx1ZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7XG4gICAgdmFsdWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmNvbnN0IEJhc2VFeGNlcHRpb24gPSBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbihtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VFeGNlcHRpb24pIHtcbiAgICAgIHVucmVhY2hhYmxlKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG59KCk7XG5cbmV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IEJhc2VFeGNlcHRpb247XG5cbmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgY29kZSkge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFzc3dvcmRFeGNlcHRpb24gPSBQYXNzd29yZEV4Y2VwdGlvbjtcblxuY2xhc3MgVW5rbm93bkVycm9yRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgZGV0YWlscykge1xuICAgIHN1cGVyKG1zZyk7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5rbm93bkVycm9yRXhjZXB0aW9uID0gVW5rbm93bkVycm9yRXhjZXB0aW9uO1xuXG5jbGFzcyBJbnZhbGlkUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBJbnZhbGlkUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBNaXNzaW5nUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBzdGF0dXMpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG5cbmNsYXNzIEZvcm1hdEVycm9yIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLkFib3J0RXhjZXB0aW9uID0gQWJvcnRFeGNlcHRpb247XG5jb25zdCBOdWxsQ2hhcmFjdGVyc1JlZ0V4cCA9IC9cXHgwMC9nO1xuXG5mdW5jdGlvbiByZW1vdmVOdWxsQ2hhcmFjdGVycyhzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICB3YXJuKFwiVGhlIGFyZ3VtZW50IGZvciByZW1vdmVOdWxsQ2hhcmFjdGVycyBtdXN0IGJlIGEgc3RyaW5nLlwiKTtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKE51bGxDaGFyYWN0ZXJzUmVnRXhwLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhieXRlcykge1xuICBhc3NlcnQoYnl0ZXMgIT09IG51bGwgJiYgdHlwZW9mIGJ5dGVzID09PSBcIm9iamVjdFwiICYmIGJ5dGVzLmxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjtcblxuICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qgc3RyQnVmID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpO1xuICAgIGNvbnN0IGNodW5rID0gYnl0ZXMuc3ViYXJyYXkoaSwgY2h1bmtFbmQpO1xuICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIsIFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gIH1cblxuICBhc3NlcnQoYXJyLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZCwgXCJhcnJheUJ5dGVMZW5ndGggLSBpbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhcnJheXNUb0J5dGVzKGFycikge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cblxuICBsZXQgcmVzdWx0TGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0TGVuZ3RoICs9IGFycmF5Qnl0ZUxlbmd0aChhcnJbaV0pO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaXRlbSA9IGFycltpXTtcblxuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBVaW50OEFycmF5KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICBwb3MgKz0gaXRlbUxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG59XG5cbmZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCkge1xuICBjb25zdCBidWZmZXI4ID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gIGJ1ZmZlcjhbMF0gPSAxO1xuICBjb25zdCB2aWV3MzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyOC5idWZmZXIsIDAsIDEpO1xuICByZXR1cm4gdmlldzMyWzBdID09PSAxO1xufVxuXG5jb25zdCBJc0xpdHRsZUVuZGlhbkNhY2hlZCA9IHtcbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBzaGFkb3codGhpcywgXCJ2YWx1ZVwiLCBpc0xpdHRsZUVuZGlhbigpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0xpdHRsZUVuZGlhbkNhY2hlZCA9IElzTGl0dGxlRW5kaWFuQ2FjaGVkO1xuXG5mdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKSB7XG4gIHRyeSB7XG4gICAgbmV3IEZ1bmN0aW9uKFwiXCIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IElzRXZhbFN1cHBvcnRlZENhY2hlZCA9IHtcbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBzaGFkb3codGhpcywgXCJ2YWx1ZVwiLCBpc0V2YWxTdXBwb3J0ZWQoKSk7XG4gIH1cblxufTtcbmV4cG9ydHMuSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0gSXNFdmFsU3VwcG9ydGVkQ2FjaGVkO1xuY29uc3QgcmdiQnVmID0gW1wicmdiKFwiLCAwLCBcIixcIiwgMCwgXCIsXCIsIDAsIFwiKVwiXTtcblxuY2xhc3MgVXRpbCB7XG4gIHN0YXRpYyBtYWtlQ3NzUmdiKHIsIGcsIGIpIHtcbiAgICByZ2JCdWZbMV0gPSByO1xuICAgIHJnYkJ1ZlszXSA9IGc7XG4gICAgcmdiQnVmWzVdID0gYjtcbiAgICByZXR1cm4gcmdiQnVmLmpvaW4oXCJcIik7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNmb3JtKG0xLCBtMikge1xuICAgIHJldHVybiBbbTFbMF0gKiBtMlswXSArIG0xWzJdICogbTJbMV0sIG0xWzFdICogbTJbMF0gKyBtMVszXSAqIG0yWzFdLCBtMVswXSAqIG0yWzJdICsgbTFbMl0gKiBtMlszXSwgbTFbMV0gKiBtMlsyXSArIG0xWzNdICogbTJbM10sIG0xWzBdICogbTJbNF0gKyBtMVsyXSAqIG0yWzVdICsgbTFbNF0sIG0xWzFdICogbTJbNF0gKyBtMVszXSAqIG0yWzVdICsgbTFbNV1dO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgIGNvbnN0IHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgcmV0dXJuIFt4dCwgeXRdO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShwLCBtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgY29uc3QgeHQgPSAocFswXSAqIG1bM10gLSBwWzFdICogbVsyXSArIG1bMl0gKiBtWzVdIC0gbVs0XSAqIG1bM10pIC8gZDtcbiAgICBjb25zdCB5dCA9ICgtcFswXSAqIG1bMV0gKyBwWzFdICogbVswXSArIG1bNF0gKiBtWzFdIC0gbVs1XSAqIG1bMF0pIC8gZDtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3gociwgbSkge1xuICAgIGNvbnN0IHAxID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLCBtKTtcbiAgICBjb25zdCBwMiA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oci5zbGljZSgyLCA0KSwgbSk7XG4gICAgY29uc3QgcDMgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKFtyWzBdLCByWzNdXSwgbSk7XG4gICAgY29uc3QgcDQgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKFtyWzJdLCByWzFdXSwgbSk7XG4gICAgcmV0dXJuIFtNYXRoLm1pbihwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWluKHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKSwgTWF0aC5tYXgocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1heChwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSldO1xuICB9XG5cbiAgc3RhdGljIGludmVyc2VUcmFuc2Zvcm0obSkge1xuICAgIGNvbnN0IGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdO1xuICAgIHJldHVybiBbbVszXSAvIGQsIC1tWzFdIC8gZCwgLW1bMl0gLyBkLCBtWzBdIC8gZCwgKG1bMl0gKiBtWzVdIC0gbVs0XSAqIG1bM10pIC8gZCwgKG1bNF0gKiBtWzFdIC0gbVs1XSAqIG1bMF0pIC8gZF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHkzZFRyYW5zZm9ybShtLCB2KSB7XG4gICAgcmV0dXJuIFttWzBdICogdlswXSArIG1bMV0gKiB2WzFdICsgbVsyXSAqIHZbMl0sIG1bM10gKiB2WzBdICsgbVs0XSAqIHZbMV0gKyBtWzVdICogdlsyXSwgbVs2XSAqIHZbMF0gKyBtWzddICogdlsxXSArIG1bOF0gKiB2WzJdXTtcbiAgfVxuXG4gIHN0YXRpYyBzaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtKSB7XG4gICAgY29uc3QgdHJhbnNwb3NlID0gW21bMF0sIG1bMl0sIG1bMV0sIG1bM11dO1xuICAgIGNvbnN0IGEgPSBtWzBdICogdHJhbnNwb3NlWzBdICsgbVsxXSAqIHRyYW5zcG9zZVsyXTtcbiAgICBjb25zdCBiID0gbVswXSAqIHRyYW5zcG9zZVsxXSArIG1bMV0gKiB0cmFuc3Bvc2VbM107XG4gICAgY29uc3QgYyA9IG1bMl0gKiB0cmFuc3Bvc2VbMF0gKyBtWzNdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGQgPSBtWzJdICogdHJhbnNwb3NlWzFdICsgbVszXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBmaXJzdCA9IChhICsgZCkgLyAyO1xuICAgIGNvbnN0IHNlY29uZCA9IE1hdGguc3FydCgoYSArIGQpICogKGEgKyBkKSAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICBjb25zdCBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgIHJldHVybiBbTWF0aC5zcXJ0KHN4KSwgTWF0aC5zcXJ0KHN5KV07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgclsyXSA9IHJlY3RbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgIHJbM10gPSByZWN0WzFdO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9XG5cbiAgc3RhdGljIGludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICByZWN0MSA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0MSk7XG4gICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICByZXN1bHRbMl0gPSBvcmRlcmVkWFsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gb3JkZXJlZFlbMV07XG4gICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVXRpbCA9IFV0aWw7XG5jb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJEOCwgMHgyQzcsIDB4MkM2LCAweDJEOSwgMHgyREQsIDB4MkRCLCAweDJEQSwgMHgyREMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNBLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFFLCAweDIwMUMsIDB4MjAxRCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQSwgMHgyMTIyLCAweEZCMDEsIDB4RkIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdELCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN0UsIDAsIDB4MjBBQ107XG5cbmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoLFxuICAgICAgICBzdHJCdWYgPSBbXTtcblxuICBpZiAoc3RyWzBdID09PSBcIlxceEZFXCIgJiYgc3RyWzFdID09PSBcIlxceEZGXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RyWzBdID09PSBcIlxceEZGXCIgJiYgc3RyWzFdID09PSBcIlxceEZFXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHN0ckJ1Zi5wdXNoKGNvZGUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIDogc3RyLmNoYXJBdChpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFtcXChcXClcXFxcXSkvZywgXCJcXFxcJDFcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYXJyMS5ldmVyeShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHtcbiAgICByZXR1cm4gZWxlbWVudCA9PT0gYXJyMltpbmRleF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpKSkge1xuICBjb25zdCBidWZmZXIgPSBbZGF0ZS5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCksIChkYXRlLmdldFVUQ01vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgKGRhdGUuZ2V0VVRDRGF0ZSgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIiksIGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIiksIGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpXTtcbiAgcmV0dXJuIGJ1ZmZlci5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSgpIHtcbiAgY29uc3QgY2FwYWJpbGl0eSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNhcGFiaWxpdHksIFwic2V0dGxlZFwiLCB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGlzU2V0dGxlZDtcbiAgICB9XG5cbiAgfSk7XG4gIGNhcGFiaWxpdHkucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjYXBhYmlsaXR5LnJlc29sdmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfTtcblxuICAgIGNhcGFiaWxpdHkucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gY2FwYWJpbGl0eTtcbn1cblxuY29uc3QgY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMQ2xvc3VyZSgpIHtcbiAgY29uc3QgZGlnaXRzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGRhdGEsIGNvbnRlbnRUeXBlLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2VEYXRhU2NoZW1hICYmIFVSTC5jcmVhdGVPYmplY3RVUkwpIHtcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgfVxuXG4gICAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICBjb25zdCBiMSA9IGRhdGFbaV0gJiAweGZmO1xuICAgICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgICBjb25zdCBiMyA9IGRhdGFbaSArIDJdICYgMHhmZjtcbiAgICAgIGNvbnN0IGQxID0gYjEgPj4gMixcbiAgICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgICBjb25zdCBkMyA9IGkgKyAxIDwgaWkgPyAoYjIgJiAweGYpIDw8IDIgfCBiMyA+PiA2IDogNjQ7XG4gICAgICBjb25zdCBkNCA9IGkgKyAyIDwgaWkgPyBiMyAmIDB4M2YgOiA2NDtcbiAgICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG59KCk7XG5cbmV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gY3JlYXRlT2JqZWN0VVJMO1xuXG4vKioqLyB9KSxcbi8qIDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxuO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOb2RlSlMgPSB2b2lkIDA7XG5jb25zdCBpc05vZGVKUyA9IHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MgKyBcIlwiID09PSBcIltvYmplY3QgcHJvY2Vzc11cIiAmJiAhcHJvY2Vzcy52ZXJzaW9ucy5udyAmJiAhKHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24gJiYgcHJvY2Vzcy50eXBlICYmIHByb2Nlc3MudHlwZSAhPT0gXCJicm93c2VyXCIpO1xuZXhwb3J0cy5pc05vZGVKUyA9IGlzTm9kZUpTO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0RG9jdW1lbnQgPSBnZXREb2N1bWVudDtcbmV4cG9ydHMuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkgPSBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeTtcbmV4cG9ydHMuYnVpbGQgPSBleHBvcnRzLnZlcnNpb24gPSBleHBvcnRzLlBERlBhZ2VQcm94eSA9IGV4cG9ydHMuUERGRG9jdW1lbnRQcm94eSA9IGV4cG9ydHMuUERGV29ya2VyID0gZXhwb3J0cy5QREZEYXRhUmFuZ2VUcmFuc3BvcnQgPSBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxudmFyIF9mb250X2xvYWRlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNik7XG5cbnZhciBfbm9kZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oNyk7XG5cbnZhciBfYW5ub3RhdGlvbl9zdG9yYWdlID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF9hcGlfY29tcGF0aWJpbGl0eSA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfY2FudmFzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEzKTtcblxudmFyIF9tZXRhZGF0YSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTQpO1xuXG52YXIgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnID0gX193X3BkZmpzX3JlcXVpcmVfXygxNik7XG5cbnZhciBfdHJhbnNwb3J0X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG52YXIgX3dlYmdsID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbmNvbnN0IERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuY29uc3QgUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUID0gMTAwO1xuY29uc3QgRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBfaXNfbm9kZS5pc05vZGVKUyA/IF9ub2RlX3V0aWxzLk5vZGVDYW52YXNGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ2FudmFzRmFjdG9yeTtcbmNvbnN0IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSA9IF9pc19ub2RlLmlzTm9kZUpTID8gX25vZGVfdXRpbHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG5sZXQgY3JlYXRlUERGTmV0d29ya1N0cmVhbTtcblxuZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkocGRmTmV0d29ya1N0cmVhbUZhY3RvcnkpIHtcbiAgY3JlYXRlUERGTmV0d29ya1N0cmVhbSA9IHBkZk5ldHdvcmtTdHJlYW1GYWN0b3J5O1xufVxuXG5mdW5jdGlvbiBnZXREb2N1bWVudChzcmMpIHtcbiAgY29uc3QgdGFzayA9IG5ldyBQREZEb2N1bWVudExvYWRpbmdUYXNrKCk7XG4gIGxldCBzb3VyY2U7XG5cbiAgaWYgKHR5cGVvZiBzcmMgPT09IFwic3RyaW5nXCIpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICB1cmw6IHNyY1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHNyYykpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBzcmNcbiAgICB9O1xuICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFBERkRhdGFSYW5nZVRyYW5zcG9ydCkge1xuICAgIHNvdXJjZSA9IHtcbiAgICAgIHJhbmdlOiBzcmNcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygc3JjICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgXCIgKyBcIm5lZWQgZWl0aGVyIFVpbnQ4QXJyYXksIHN0cmluZyBvciBhIHBhcmFtZXRlciBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgaWYgKCFzcmMudXJsICYmICFzcmMuZGF0YSAmJiAhc3JjLnJhbmdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBhcmFtZXRlciBvYmplY3Q6IG5lZWQgZWl0aGVyIC5kYXRhLCAucmFuZ2Ugb3IgLnVybFwiKTtcbiAgICB9XG5cbiAgICBzb3VyY2UgPSBzcmM7XG4gIH1cblxuICBjb25zdCBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBsZXQgcmFuZ2VUcmFuc3BvcnQgPSBudWxsLFxuICAgICAgd29ya2VyID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoa2V5ID09PSBcInVybFwiICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHBhcmFtc1trZXldID0gbmV3IFVSTChzb3VyY2Vba2V5XSwgd2luZG93LmxvY2F0aW9uKS5ocmVmO1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFwicmFuZ2VcIikge1xuICAgICAgcmFuZ2VUcmFuc3BvcnQgPSBzb3VyY2Vba2V5XTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIndvcmtlclwiKSB7XG4gICAgICB3b3JrZXIgPSBzb3VyY2Vba2V5XTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcImRhdGFcIiAmJiAhKHNvdXJjZVtrZXldIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgIGNvbnN0IHBkZkJ5dGVzID0gc291cmNlW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgcGRmQnl0ZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocGRmQnl0ZXMpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGRmQnl0ZXMgPT09IFwib2JqZWN0XCIgJiYgcGRmQnl0ZXMgIT09IG51bGwgJiYgIWlzTmFOKHBkZkJ5dGVzLmxlbmd0aCkpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShwZGZCeXRlcykpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFBERiBiaW5hcnkgZGF0YTogZWl0aGVyIHR5cGVkIGFycmF5LCBcIiArIFwic3RyaW5nIG9yIGFycmF5LWxpa2Ugb2JqZWN0IGlzIGV4cGVjdGVkIGluIHRoZSBcIiArIFwiZGF0YSBwcm9wZXJ0eS5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHBhcmFtc1trZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICBwYXJhbXMucmFuZ2VDaHVua1NpemUgPSBwYXJhbXMucmFuZ2VDaHVua1NpemUgfHwgREVGQVVMVF9SQU5HRV9DSFVOS19TSVpFO1xuICBwYXJhbXMuQ01hcFJlYWRlckZhY3RvcnkgPSBwYXJhbXMuQ01hcFJlYWRlckZhY3RvcnkgfHwgRGVmYXVsdENNYXBSZWFkZXJGYWN0b3J5O1xuICBwYXJhbXMuaWdub3JlRXJyb3JzID0gcGFyYW1zLnN0b3BBdEVycm9ycyAhPT0gdHJ1ZTtcbiAgcGFyYW1zLmZvbnRFeHRyYVByb3BlcnRpZXMgPSBwYXJhbXMuZm9udEV4dHJhUHJvcGVydGllcyA9PT0gdHJ1ZTtcbiAgcGFyYW1zLnBkZkJ1ZyA9IHBhcmFtcy5wZGZCdWcgPT09IHRydWU7XG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhcmFtcy5tYXhJbWFnZVNpemUpKSB7XG4gICAgcGFyYW1zLm1heEltYWdlU2l6ZSA9IC0xO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuaXNFdmFsU3VwcG9ydGVkICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZUZvbnRGYWNlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlRm9udEZhY2UgPSBfYXBpX2NvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlRm9udEZhY2UgfHwgZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5vd25lckRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcGFyYW1zLm93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZVJhbmdlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlUmFuZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVTdHJlYW0gIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmRpc2FibGVTdHJlYW0gPSBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggPSBmYWxzZTtcbiAgfVxuXG4gICgwLCBfdXRpbC5zZXRWZXJib3NpdHlMZXZlbCkocGFyYW1zLnZlcmJvc2l0eSk7XG5cbiAgaWYgKCF3b3JrZXIpIHtcbiAgICBjb25zdCB3b3JrZXJQYXJhbXMgPSB7XG4gICAgICB2ZXJib3NpdHk6IHBhcmFtcy52ZXJib3NpdHksXG4gICAgICBwb3J0OiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0XG4gICAgfTtcbiAgICB3b3JrZXIgPSB3b3JrZXJQYXJhbXMucG9ydCA/IFBERldvcmtlci5mcm9tUG9ydCh3b3JrZXJQYXJhbXMpIDogbmV3IFBERldvcmtlcih3b3JrZXJQYXJhbXMpO1xuICAgIHRhc2suX3dvcmtlciA9IHdvcmtlcjtcbiAgfVxuXG4gIGNvbnN0IGRvY0lkID0gdGFzay5kb2NJZDtcbiAgd29ya2VyLnByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRhc2suZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkaW5nIGFib3J0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWRQcm9taXNlID0gX2ZldGNoRG9jdW1lbnQod29ya2VyLCBwYXJhbXMsIHJhbmdlVHJhbnNwb3J0LCBkb2NJZCk7XG5cbiAgICBjb25zdCBuZXR3b3JrU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBsZXQgbmV0d29ya1N0cmVhbTtcblxuICAgICAgaWYgKHJhbmdlVHJhbnNwb3J0KSB7XG4gICAgICAgIG5ldHdvcmtTdHJlYW0gPSBuZXcgX3RyYW5zcG9ydF9zdHJlYW0uUERGRGF0YVRyYW5zcG9ydFN0cmVhbSh7XG4gICAgICAgICAgbGVuZ3RoOiBwYXJhbXMubGVuZ3RoLFxuICAgICAgICAgIGluaXRpYWxEYXRhOiBwYXJhbXMuaW5pdGlhbERhdGEsXG4gICAgICAgICAgcHJvZ3Jlc3NpdmVEb25lOiBwYXJhbXMucHJvZ3Jlc3NpdmVEb25lLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9LCByYW5nZVRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2UgaWYgKCFwYXJhbXMuZGF0YSkge1xuICAgICAgICBuZXR3b3JrU3RyZWFtID0gY3JlYXRlUERGTmV0d29ya1N0cmVhbSh7XG4gICAgICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICBodHRwSGVhZGVyczogcGFyYW1zLmh0dHBIZWFkZXJzLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcGFyYW1zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICByYW5nZUNodW5rU2l6ZTogcGFyYW1zLnJhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShuZXR3b3JrU3RyZWFtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3dvcmtlcklkUHJvbWlzZSwgbmV0d29ya1N0cmVhbVByb21pc2VdKS50aGVuKGZ1bmN0aW9uIChbd29ya2VySWQsIG5ldHdvcmtTdHJlYW1dKSB7XG4gICAgICBpZiAodGFzay5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGRvY0lkLCB3b3JrZXJJZCwgd29ya2VyLnBvcnQpO1xuICAgICAgbWVzc2FnZUhhbmRsZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB3b3JrZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnM7XG4gICAgICBjb25zdCB0cmFuc3BvcnQgPSBuZXcgV29ya2VyVHJhbnNwb3J0KG1lc3NhZ2VIYW5kbGVyLCB0YXNrLCBuZXR3b3JrU3RyZWFtLCBwYXJhbXMpO1xuICAgICAgdGFzay5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZChcIlJlYWR5XCIsIG51bGwpO1xuICAgIH0pO1xuICB9KS5jYXRjaCh0YXNrLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gIHJldHVybiB0YXNrO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hEb2N1bWVudCh3b3JrZXIsIHNvdXJjZSwgcGRmRGF0YVJhbmdlVHJhbnNwb3J0LCBkb2NJZCkge1xuICBpZiAod29ya2VyLmRlc3Ryb3llZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKSk7XG4gIH1cblxuICBpZiAocGRmRGF0YVJhbmdlVHJhbnNwb3J0KSB7XG4gICAgc291cmNlLmxlbmd0aCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5sZW5ndGg7XG4gICAgc291cmNlLmluaXRpYWxEYXRhID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmluaXRpYWxEYXRhO1xuICAgIHNvdXJjZS5wcm9ncmVzc2l2ZURvbmUgPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQucHJvZ3Jlc3NpdmVEb25lO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtlci5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREb2NSZXF1ZXN0XCIsIHtcbiAgICBkb2NJZCxcbiAgICBhcGlWZXJzaW9uOiAnMi42LjM0NycsXG4gICAgc291cmNlOiB7XG4gICAgICBkYXRhOiBzb3VyY2UuZGF0YSxcbiAgICAgIHVybDogc291cmNlLnVybCxcbiAgICAgIHBhc3N3b3JkOiBzb3VyY2UucGFzc3dvcmQsXG4gICAgICBkaXNhYmxlQXV0b0ZldGNoOiBzb3VyY2UuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiBzb3VyY2UucmFuZ2VDaHVua1NpemUsXG4gICAgICBsZW5ndGg6IHNvdXJjZS5sZW5ndGhcbiAgICB9LFxuICAgIG1heEltYWdlU2l6ZTogc291cmNlLm1heEltYWdlU2l6ZSxcbiAgICBkaXNhYmxlRm9udEZhY2U6IHNvdXJjZS5kaXNhYmxlRm9udEZhY2UsXG4gICAgcG9zdE1lc3NhZ2VUcmFuc2ZlcnM6IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycyxcbiAgICBkb2NCYXNlVXJsOiBzb3VyY2UuZG9jQmFzZVVybCxcbiAgICBpZ25vcmVFcnJvcnM6IHNvdXJjZS5pZ25vcmVFcnJvcnMsXG4gICAgaXNFdmFsU3VwcG9ydGVkOiBzb3VyY2UuaXNFdmFsU3VwcG9ydGVkLFxuICAgIGZvbnRFeHRyYVByb3BlcnRpZXM6IHNvdXJjZS5mb250RXh0cmFQcm9wZXJ0aWVzXG4gIH0pLnRoZW4oZnVuY3Rpb24gKHdvcmtlcklkKSB7XG4gICAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrZXJJZDtcbiAgfSk7XG59XG5cbmNvbnN0IFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBmdW5jdGlvbiBQREZEb2N1bWVudExvYWRpbmdUYXNrQ2xvc3VyZSgpIHtcbiAgbGV0IG5leHREb2N1bWVudElkID0gMDtcblxuICBjbGFzcyBQREZEb2N1bWVudExvYWRpbmdUYXNrIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICAgIHRoaXMuZG9jSWQgPSBcImRcIiArIG5leHREb2N1bWVudElkKys7XG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgdGhpcy5vblBhc3N3b3JkID0gbnVsbDtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICB0aGlzLm9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRyYW5zcG9ydERlc3Ryb3llZCA9ICF0aGlzLl90cmFuc3BvcnQgPyBQcm9taXNlLnJlc29sdmUoKSA6IHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95KCk7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0RGVzdHJveWVkLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICB0aGlzLl93b3JrZXIuZGVzdHJveSgpO1xuXG4gICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbn0oKTtcblxuY2xhc3MgUERGRGF0YVJhbmdlVHJhbnNwb3J0IHtcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBpbml0aWFsRGF0YSwgcHJvZ3Jlc3NpdmVEb25lID0gZmFsc2UpIHtcbiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICB0aGlzLmluaXRpYWxEYXRhID0gaW5pdGlhbERhdGE7XG4gICAgdGhpcy5wcm9ncmVzc2l2ZURvbmUgPSBwcm9ncmVzc2l2ZURvbmU7XG4gICAgdGhpcy5fcmFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgfVxuXG4gIGFkZFJhbmdlTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9yYW5nZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGFkZFByb2dyZXNzTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIGFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBvbkRhdGFSYW5nZShiZWdpbiwgY2h1bmspIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuX3JhbmdlTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihiZWdpbiwgY2h1bmspO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YVByb2dyZXNzKGxvYWRlZCwgdG90YWwpIHtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIobG9hZGVkLCB0b3RhbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkRhdGFQcm9ncmVzc2l2ZVJlYWQoY2h1bmspIHtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKGNodW5rKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YVByb2dyZXNzaXZlRG9uZSgpIHtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0cmFuc3BvcnRSZWFkeSgpIHtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmVxdWVzdERhdGFSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBQREZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZVwiKTtcbiAgfVxuXG4gIGFib3J0KCkge31cblxufVxuXG5leHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydCA9IFBERkRhdGFSYW5nZVRyYW5zcG9ydDtcblxuY2xhc3MgUERGRG9jdW1lbnRQcm94eSB7XG4gIGNvbnN0cnVjdG9yKHBkZkluZm8sIHRyYW5zcG9ydCkge1xuICAgIHRoaXMuX3BkZkluZm8gPSBwZGZJbmZvO1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgfVxuXG4gIGdldCBhbm5vdGF0aW9uU3RvcmFnZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhbm5vdGF0aW9uU3RvcmFnZVwiLCBuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSgpKTtcbiAgfVxuXG4gIGdldCBudW1QYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5udW1QYWdlcztcbiAgfVxuXG4gIGdldCBmaW5nZXJwcmludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludDtcbiAgfVxuXG4gIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShwYWdlTnVtYmVyKTtcbiAgfVxuXG4gIGdldFBhZ2VJbmRleChyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleChyZWYpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb25zKCk7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbihpZCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpO1xuICB9XG5cbiAgZ2V0UGFnZUxhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgfVxuXG4gIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCk7XG4gIH1cblxuICBnZXRQYWdlTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7XG4gIH1cblxuICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpO1xuICB9XG5cbiAgZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKTtcbiAgfVxuXG4gIGdldE91dGxpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPdXRsaW5lKCk7XG4gIH1cblxuICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcoKTtcbiAgfVxuXG4gIGdldFBlcm1pc3Npb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGVybWlzc2lvbnMoKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0TWV0YWRhdGEoKTtcbiAgfVxuXG4gIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREYXRhKCk7XG4gIH1cblxuICBnZXREb3dubG9hZEluZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBnZXRTdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFN0YXRzKCk7XG4gIH1cblxuICBjbGVhbnVwKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nUGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtcztcbiAgfVxuXG4gIGdldCBsb2FkaW5nVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdUYXNrO1xuICB9XG5cbiAgc2F2ZURvY3VtZW50KGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zYXZlRG9jdW1lbnQoYW5ub3RhdGlvblN0b3JhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudFByb3h5ID0gUERGRG9jdW1lbnRQcm94eTtcblxuY2xhc3MgUERGUGFnZVByb3h5IHtcbiAgY29uc3RydWN0b3IocGFnZUluZGV4LCBwYWdlSW5mbywgdHJhbnNwb3J0LCBvd25lckRvY3VtZW50LCBwZGZCdWcgPSBmYWxzZSkge1xuICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIHRoaXMuX293bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICB0aGlzLl9zdGF0cyA9IHBkZkJ1ZyA/IG5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIoKSA6IG51bGw7XG4gICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IHRyYW5zcG9ydC5jb21tb25PYmpzO1xuICAgIHRoaXMub2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5jbGVhbnVwQWZ0ZXJSZW5kZXIgPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgdGhpcy5faW50ZW50U3RhdGVzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gIH1cblxuICBnZXQgcGFnZU51bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZGV4ICsgMTtcbiAgfVxuXG4gIGdldCByb3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJvdGF0ZTtcbiAgfVxuXG4gIGdldCByZWYoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJlZjtcbiAgfVxuXG4gIGdldCB1c2VyVW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8udXNlclVuaXQ7XG4gIH1cblxuICBnZXQgdmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8udmlldztcbiAgfVxuXG4gIGdldFZpZXdwb3J0KHtcbiAgICBzY2FsZSxcbiAgICByb3RhdGlvbiA9IHRoaXMucm90YXRlLFxuICAgIG9mZnNldFggPSAwLFxuICAgIG9mZnNldFkgPSAwLFxuICAgIGRvbnRGbGlwID0gZmFsc2VcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBfZGlzcGxheV91dGlscy5QYWdlVmlld3BvcnQoe1xuICAgICAgdmlld0JveDogdGhpcy52aWV3LFxuICAgICAgc2NhbGUsXG4gICAgICByb3RhdGlvbixcbiAgICAgIG9mZnNldFgsXG4gICAgICBvZmZzZXRZLFxuICAgICAgZG9udEZsaXBcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zKHtcbiAgICBpbnRlbnQgPSBudWxsXG4gIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgfHwgdGhpcy5hbm5vdGF0aW9uc0ludGVudCAhPT0gaW50ZW50KSB7XG4gICAgICB0aGlzLmFubm90YXRpb25zUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLl9wYWdlSW5kZXgsIGludGVudCk7XG4gICAgICB0aGlzLmFubm90YXRpb25zSW50ZW50ID0gaW50ZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFubm90YXRpb25zUHJvbWlzZTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgY2FudmFzQ29udGV4dCxcbiAgICB2aWV3cG9ydCxcbiAgICBpbnRlbnQgPSBcImRpc3BsYXlcIixcbiAgICBlbmFibGVXZWJHTCA9IGZhbHNlLFxuICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXMgPSBmYWxzZSxcbiAgICB0cmFuc2Zvcm0gPSBudWxsLFxuICAgIGltYWdlTGF5ZXIgPSBudWxsLFxuICAgIGNhbnZhc0ZhY3RvcnkgPSBudWxsLFxuICAgIGJhY2tncm91bmQgPSBudWxsLFxuICAgIGFubm90YXRpb25TdG9yYWdlID0gbnVsbCxcbiAgICBvcHRpb25hbENvbnRlbnRDb25maWdQcm9taXNlID0gbnVsbFxuICB9KSB7XG4gICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICB0aGlzLl9zdGF0cy50aW1lKFwiT3ZlcmFsbFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJpbmdJbnRlbnQgPSBpbnRlbnQgPT09IFwicHJpbnRcIiA/IFwicHJpbnRcIiA6IFwiZGlzcGxheVwiO1xuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcblxuICAgIGlmICghb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSkge1xuICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcoKTtcbiAgICB9XG5cbiAgICBsZXQgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KHJlbmRlcmluZ0ludGVudCk7XG5cbiAgICBpZiAoIWludGVudFN0YXRlKSB7XG4gICAgICBpbnRlbnRTdGF0ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5zZXQocmVuZGVyaW5nSW50ZW50LCBpbnRlbnRTdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KTtcbiAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhc0ZhY3RvcnlJbnN0YW5jZSA9IGNhbnZhc0ZhY3RvcnkgfHwgbmV3IERlZmF1bHRDYW52YXNGYWN0b3J5KHtcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMuX293bmVyRG9jdW1lbnRcbiAgICB9KTtcbiAgICBjb25zdCB3ZWJHTENvbnRleHQgPSBuZXcgX3dlYmdsLldlYkdMQ29udGV4dCh7XG4gICAgICBlbmFibGU6IGVuYWJsZVdlYkdMXG4gICAgfSk7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIHtcbiAgICAgIGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZShcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVtcE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgICBpbnRlbnQ6IHJlbmRlcmluZ0ludGVudCxcbiAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtczogcmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9PT0gdHJ1ZSxcbiAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldEFsbCgpIHx8IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gZXJyb3IgPT4ge1xuICAgICAgY29uc3QgaSA9IGludGVudFN0YXRlLnJlbmRlclRhc2tzLmluZGV4T2YoaW50ZXJuYWxSZW5kZXJUYXNrKTtcblxuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNsZWFudXBBZnRlclJlbmRlciB8fCByZW5kZXJpbmdJbnRlbnQgPT09IFwicHJpbnRcIikge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgcmVhc29uOiBlcnJvclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWVFbmQoXCJSZW5kZXJpbmdcIik7XG5cbiAgICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIk92ZXJhbGxcIik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGludGVybmFsUmVuZGVyVGFzayA9IG5ldyBJbnRlcm5hbFJlbmRlclRhc2soe1xuICAgICAgY2FsbGJhY2s6IGNvbXBsZXRlLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIGNhbnZhc0NvbnRleHQsXG4gICAgICAgIHZpZXdwb3J0LFxuICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgIGltYWdlTGF5ZXIsXG4gICAgICAgIGJhY2tncm91bmRcbiAgICAgIH0sXG4gICAgICBvYmpzOiB0aGlzLm9ianMsXG4gICAgICBjb21tb25PYmpzOiB0aGlzLmNvbW1vbk9ianMsXG4gICAgICBvcGVyYXRvckxpc3Q6IGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCxcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgd2ViR0xDb250ZXh0LFxuICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiByZW5kZXJpbmdJbnRlbnQgIT09IFwicHJpbnRcIixcbiAgICAgIHBkZkJ1ZzogdGhpcy5fcGRmQnVnXG4gICAgfSk7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyA9IFtdO1xuICAgIH1cblxuICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2goaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICBjb25zdCByZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrLnRhc2s7XG4gICAgUHJvbWlzZS5hbGwoW2ludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSwgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZV0pLnRoZW4oKFt0cmFuc3BhcmVuY3ksIG9wdGlvbmFsQ29udGVudENvbmZpZ10pID0+IHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWUoXCJSZW5kZXJpbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3Moe1xuICAgICAgICB0cmFuc3BhcmVuY3ksXG4gICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgIH0pLmNhdGNoKGNvbXBsZXRlKTtcbiAgICByZXR1cm4gcmVuZGVyVGFzaztcbiAgfVxuXG4gIGdldE9wZXJhdG9yTGlzdCgpIHtcbiAgICBmdW5jdGlvbiBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkucmVzb2x2ZShpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QpO1xuICAgICAgICBjb25zdCBpID0gaW50ZW50U3RhdGUucmVuZGVyVGFza3MuaW5kZXhPZihvcExpc3RUYXNrKTtcblxuICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyaW5nSW50ZW50ID0gXCJvcGxpc3RcIjtcblxuICAgIGxldCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQocmVuZGVyaW5nSW50ZW50KTtcblxuICAgIGlmICghaW50ZW50U3RhdGUpIHtcbiAgICAgIGludGVudFN0YXRlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgdGhpcy5faW50ZW50U3RhdGVzLnNldChyZW5kZXJpbmdJbnRlbnQsIGludGVudFN0YXRlKTtcbiAgICB9XG5cbiAgICBsZXQgb3BMaXN0VGFzaztcblxuICAgIGlmICghaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHtcbiAgICAgIG9wTGlzdFRhc2sgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgb3BMaXN0VGFzay5vcGVyYXRvckxpc3RDaGFuZ2VkID0gb3BlcmF0b3JMaXN0Q2hhbmdlZDtcbiAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MgPSBbXTtcbiAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2gob3BMaXN0VGFzayk7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZShcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVtcE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgICBpbnRlbnQ6IHJlbmRlcmluZ0ludGVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBzdHJlYW1UZXh0Q29udGVudCh7XG4gICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IGZhbHNlLFxuICAgIGRpc2FibGVDb21iaW5lVGV4dEl0ZW1zID0gZmFsc2VcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgVEVYVF9DT05URU5UX0NIVU5LX1NJWkUgPSAxMDA7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldFRleHRDb250ZW50XCIsIHtcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZTogbm9ybWFsaXplV2hpdGVzcGFjZSA9PT0gdHJ1ZSxcbiAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGRpc2FibGVDb21iaW5lVGV4dEl0ZW1zICE9PSB0cnVlXG4gICAgfSwge1xuICAgICAgaGlnaFdhdGVyTWFyazogVEVYVF9DT05URU5UX0NIVU5LX1NJWkUsXG5cbiAgICAgIHNpemUodGV4dENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aDtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VGV4dENvbnRlbnQocGFyYW1zID0ge30pIHtcbiAgICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IHRoaXMuc3RyZWFtVGV4dENvbnRlbnQocGFyYW1zKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gcHVtcCgpIHtcbiAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJlc29sdmUodGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGV4dENvbnRlbnQuc3R5bGVzLCB2YWx1ZS5zdHlsZXMpO1xuICAgICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2goLi4udmFsdWUuaXRlbXMpO1xuICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgIH07XG4gICAgICBwdW1wKCk7XG4gICAgfSk7XG4gIH1cblxuICBfZGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNwb3J0LnBhZ2VDYWNoZVt0aGlzLl9wYWdlSW5kZXhdID0gbnVsbDtcbiAgICBjb25zdCB3YWl0T24gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2ludGVudCwgaW50ZW50U3RhdGVdIG9mIHRoaXMuX2ludGVudFN0YXRlcykge1xuICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe1xuICAgICAgICBpbnRlbnRTdGF0ZSxcbiAgICAgICAgcmVhc29uOiBuZXcgRXJyb3IoXCJQYWdlIHdhcyBkZXN0cm95ZWQuXCIpLFxuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbnRlbnQgPT09IFwib3BsaXN0XCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKGludGVybmFsUmVuZGVyVGFzay5jb21wbGV0ZWQpO1xuICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG4gICAgdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKTtcbiAgfVxuXG4gIGNsZWFudXAocmVzZXRTdGF0cyA9IGZhbHNlKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3RyeUNsZWFudXAocmVzZXRTdGF0cyk7XG4gIH1cblxuICBfdHJ5Q2xlYW51cChyZXNldFN0YXRzID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ0NsZWFudXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHtcbiAgICAgIHJlbmRlclRhc2tzLFxuICAgICAgb3BlcmF0b3JMaXN0XG4gICAgfSBvZiB0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChyZW5kZXJUYXNrcy5sZW5ndGggIT09IDAgfHwgIW9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludGVudFN0YXRlcy5jbGVhcigpO1xuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG4gICAgdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgPSBudWxsO1xuXG4gICAgaWYgKHJlc2V0U3RhdHMgJiYgdGhpcy5fc3RhdHMpIHtcbiAgICAgIHRoaXMuX3N0YXRzID0gbmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcigpO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIF9zdGFydFJlbmRlclBhZ2UodHJhbnNwYXJlbmN5LCBpbnRlbnQpIHtcbiAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoaW50ZW50KTtcblxuICAgIGlmICghaW50ZW50U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgIHRoaXMuX3N0YXRzLnRpbWVFbmQoXCJQYWdlIFJlcXVlc3RcIik7XG4gICAgfVxuXG4gICAgaWYgKGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIHtcbiAgICAgIGludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSh0cmFuc3BhcmVuY3kpO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJQYWdlQ2h1bmsob3BlcmF0b3JMaXN0Q2h1bmssIGludGVudFN0YXRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3BlcmF0b3JMaXN0Q2h1bmsubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5mbkFycmF5W2ldKTtcbiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5hcmdzQXJyYXlbaV0pO1xuICAgIH1cblxuICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSBvcGVyYXRvckxpc3RDaHVuay5sYXN0Q2h1bms7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVudFN0YXRlLnJlbmRlclRhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaykge1xuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuICAgIH1cbiAgfVxuXG4gIF9wdW1wT3BlcmF0b3JMaXN0KGFyZ3MpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShhcmdzLmludGVudCwgJ1BERlBhZ2VQcm94eS5fcHVtcE9wZXJhdG9yTGlzdDogRXhwZWN0ZWQgXCJpbnRlbnRcIiBhcmd1bWVudC4nKTtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0T3BlcmF0b3JMaXN0XCIsIGFyZ3MpO1xuXG4gICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG5cbiAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoYXJncy5pbnRlbnQpO1xuXG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gcmVhZGVyO1xuXG4gICAgY29uc3QgcHVtcCA9ICgpID0+IHtcbiAgICAgIHJlYWRlci5yZWFkKCkudGhlbigoe1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9uZVxuICAgICAgfSkgPT4ge1xuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJQYWdlQ2h1bmsodmFsdWUsIGludGVudFN0YXRlKTtcblxuICAgICAgICBwdW1wKCk7XG4gICAgICB9LCByZWFzb24gPT4ge1xuICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSB0cnVlO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3NbaV0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHB1bXAoKTtcbiAgfVxuXG4gIF9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50U3RhdGUsXG4gICAgcmVhc29uLFxuICAgIGZvcmNlID0gZmFsc2VcbiAgfSkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsLCAnUERGUGFnZVByb3h5Ll9hYm9ydE9wZXJhdG9yTGlzdDogRXhwZWN0ZWQgXCJyZWFzb25cIiBhcmd1bWVudC4nKTtcblxuICAgIGlmICghaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgaWYgKGludGVudFN0YXRlLnJlbmRlclRhc2tzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24pIHtcbiAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICAgIGludGVudFN0YXRlLFxuICAgICAgICAgICAgcmVhc29uLFxuICAgICAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCBSRU5ERVJJTkdfQ0FOQ0VMTEVEX1RJTUVPVVQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbaW50ZW50LCBjdXJJbnRlbnRTdGF0ZV0gb2YgdGhpcy5faW50ZW50U3RhdGVzKSB7XG4gICAgICBpZiAoY3VySW50ZW50U3RhdGUgPT09IGludGVudFN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5kZWxldGUoaW50ZW50KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIGdldCBzdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERlBhZ2VQcm94eSA9IFBERlBhZ2VQcm94eTtcblxuY2xhc3MgTG9vcGJhY2tQb3J0IHtcbiAgY29uc3RydWN0b3IoZGVmZXIgPSB0cnVlKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fZGVmZXIgPSBkZWZlcjtcbiAgICB0aGlzLl9kZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgcG9zdE1lc3NhZ2Uob2JqLCB0cmFuc2ZlcnMpIHtcbiAgICBmdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb25lZC5oYXModmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBjbG9uZWQuZ2V0KHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJ1ZmZlciwgcmVzdWx0O1xuXG4gICAgICBpZiAoKGJ1ZmZlciA9IHZhbHVlLmJ1ZmZlcikgJiYgKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJhYmxlID0gdHJhbnNmZXJzICYmIHRyYW5zZmVycy5pbmNsdWRlcyhidWZmZXIpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGUpIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IoYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9O1xuICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgZm9yIChjb25zdCBpIGluIHZhbHVlKSB7XG4gICAgICAgIGxldCBkZXNjLFxuICAgICAgICAgICAgcCA9IHZhbHVlO1xuXG4gICAgICAgIHdoaWxlICghKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsIGkpKSkge1xuICAgICAgICAgIHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5ICYmIHZhbHVlLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExvb3BiYWNrUG9ydC5wb3N0TWVzc2FnZSAtIGNhbm5vdCBjbG9uZTogJHt2YWx1ZVtpXX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtpXSA9IGNsb25lVmFsdWUoZGVzYy52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9kZWZlcikge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHtcbiAgICAgICAgICBkYXRhOiBvYmpcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIGRhdGE6IGNsb25lVmFsdWUob2JqKVxuICAgIH07XG5cbiAgICB0aGlzLl9kZWZlcnJlZC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHRlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gTG9vcGJhY2tQb3J0O1xuXG5jb25zdCBQREZXb3JrZXIgPSBmdW5jdGlvbiBQREZXb3JrZXJDbG9zdXJlKCkge1xuICBjb25zdCBwZGZXb3JrZXJQb3J0cyA9IG5ldyBXZWFrTWFwKCk7XG4gIGxldCBpc1dvcmtlckRpc2FibGVkID0gZmFsc2U7XG4gIGxldCBmYWxsYmFja1dvcmtlclNyYztcbiAgbGV0IG5leHRGYWtlV29ya2VySWQgPSAwO1xuICBsZXQgZmFrZVdvcmtlckNhcGFiaWxpdHk7XG5cbiAgaWYgKF9pc19ub2RlLmlzTm9kZUpTICYmIHR5cGVvZiByZXF1aXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICBmYWxsYmFja1dvcmtlclNyYyA9IFwiLi9wZGYud29ya2VyLmpzXCI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcIm9iamVjdFwiICYmIFwiY3VycmVudFNjcmlwdFwiIGluIGRvY3VtZW50KSB7XG4gICAgY29uc3QgcGRmanNGaWxlUGF0aCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cbiAgICBpZiAocGRmanNGaWxlUGF0aCkge1xuICAgICAgZmFsbGJhY2tXb3JrZXJTcmMgPSBwZGZqc0ZpbGVQYXRoLnJlcGxhY2UoLyhcXC4oPzptaW5cXC4pP2pzKShcXD8uKik/JC9pLCBcIi53b3JrZXIkMSQyXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFdvcmtlclNyYygpIHtcbiAgICBpZiAoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKSB7XG4gICAgICByZXR1cm4gX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFsbGJhY2tXb3JrZXJTcmMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsbGJhY2tXb3JrZXJTcmM7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyKCkge1xuICAgIGxldCBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICB0cnkge1xuICAgICAgbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyID0gZ2xvYmFsVGhpcy5wZGZqc1dvcmtlciAmJiBnbG9iYWxUaGlzLnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgcmV0dXJuIG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlciB8fCBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkge1xuICAgIGlmIChmYWtlV29ya2VyQ2FwYWJpbGl0eSkge1xuICAgICAgcmV0dXJuIGZha2VXb3JrZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgZmFrZVdvcmtlckNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICBjb25zdCBsb2FkZXIgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBnZXRNYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKTtcblxuICAgICAgaWYgKG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2lzX25vZGUuaXNOb2RlSlMgJiYgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zdCB3b3JrZXIgPSBldmFsKFwicmVxdWlyZVwiKShnZXRXb3JrZXJTcmMoKSk7XG4gICAgICAgIHJldHVybiB3b3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0ICgwLCBfZGlzcGxheV91dGlscy5sb2FkU2NyaXB0KShnZXRXb3JrZXJTcmMoKSk7XG4gICAgICByZXR1cm4gd2luZG93LnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgIH07XG5cbiAgICBsb2FkZXIoKS50aGVuKGZha2VXb3JrZXJDYXBhYmlsaXR5LnJlc29sdmUsIGZha2VXb3JrZXJDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgcmV0dXJuIGZha2VXb3JrZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDRE5XcmFwcGVyKHVybCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBcImltcG9ydFNjcmlwdHMoJ1wiICsgdXJsICsgXCInKTtcIjtcbiAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbd3JhcHBlcl0pKTtcbiAgfVxuXG4gIGNsYXNzIFBERldvcmtlciB7XG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgbmFtZSA9IG51bGwsXG4gICAgICBwb3J0ID0gbnVsbCxcbiAgICAgIHZlcmJvc2l0eSA9ICgwLCBfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKVxuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKHBvcnQgJiYgcGRmV29ya2VyUG9ydHMuaGFzKHBvcnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHRydWU7XG4gICAgICB0aGlzLnZlcmJvc2l0eSA9IHZlcmJvc2l0eTtcbiAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHRoaXMuX3BvcnQgPSBudWxsO1xuICAgICAgdGhpcy5fd2ViV29ya2VyID0gbnVsbDtcbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblxuICAgICAgaWYgKHBvcnQpIHtcbiAgICAgICAgcGRmV29ya2VyUG9ydHMuc2V0KHBvcnQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9XG5cbiAgICBnZXQgcG9ydCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgIH1cblxuICAgIGdldCBtZXNzYWdlSGFuZGxlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcjtcbiAgICB9XG5cbiAgICBfaW5pdGlhbGl6ZUZyb21Qb3J0KHBvcnQpIHtcbiAgICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIm1haW5cIiwgXCJ3b3JrZXJcIiwgcG9ydCk7XG5cbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKFwicmVhZHlcIiwgZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIF9pbml0aWFsaXplKCkge1xuICAgICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgIWlzV29ya2VyRGlzYWJsZWQgJiYgIWdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpKSB7XG4gICAgICAgIGxldCB3b3JrZXJTcmMgPSBnZXRXb3JrZXJTcmMoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU2FtZU9yaWdpbikod2luZG93LmxvY2F0aW9uLmhyZWYsIHdvcmtlclNyYykpIHtcbiAgICAgICAgICAgIHdvcmtlclNyYyA9IGNyZWF0ZUNETldyYXBwZXIobmV3IFVSTCh3b3JrZXJTcmMsIHdpbmRvdy5sb2NhdGlvbikuaHJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoXCJtYWluXCIsIFwid29ya2VyXCIsIHdvcmtlcik7XG5cbiAgICAgICAgICBjb25zdCB0ZXJtaW5hdGVFYXJseSA9ICgpID0+IHtcbiAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBvbldvcmtlckVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWJXb3JrZXIpIHtcbiAgICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcbiAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInRlc3RcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gd29ya2VyO1xuICAgICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSB3b3JrZXI7XG5cbiAgICAgICAgICAgICAgaWYgKCFkYXRhLnN1cHBvcnRUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlVHJhbnNmZXJzID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgICAgIHZlcmJvc2l0eTogdGhpcy52ZXJib3NpdHlcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcblxuICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInJlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc2VuZFRlc3QoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZW5kVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RPYmogPSBuZXcgVWludDhBcnJheShbdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA/IDI1NSA6IDBdKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZChcInRlc3RcIiwgdGVzdE9iaiwgW3Rlc3RPYmouYnVmZmVyXSk7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDYW5ub3QgdXNlIHBvc3RNZXNzYWdlIHRyYW5zZmVycy5cIik7XG4gICAgICAgICAgICAgIHRlc3RPYmpbMF0gPSAwO1xuICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKFwidGVzdFwiLCB0ZXN0T2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VuZFRlc3QoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICB9XG5cbiAgICBfc2V0dXBGYWtlV29ya2VyKCkge1xuICAgICAgaWYgKCFpc1dvcmtlckRpc2FibGVkKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlNldHRpbmcgdXAgZmFrZSB3b3JrZXIuXCIpO1xuICAgICAgICBpc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkudGhlbihXb3JrZXJNZXNzYWdlSGFuZGxlciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIikpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9ydCA9IG5ldyBMb29wYmFja1BvcnQoKTtcbiAgICAgICAgdGhpcy5fcG9ydCA9IHBvcnQ7XG4gICAgICAgIGNvbnN0IGlkID0gXCJmYWtlXCIgKyBuZXh0RmFrZVdvcmtlcklkKys7XG4gICAgICAgIGNvbnN0IHdvcmtlckhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCArIFwiX3dvcmtlclwiLCBpZCwgcG9ydCk7XG4gICAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHdvcmtlckhhbmRsZXIsIHBvcnQpO1xuICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGlkLCBpZCArIFwiX3dvcmtlclwiLCBwb3J0KTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcblxuICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgIHZlcmJvc2l0eTogdGhpcy52ZXJib3NpdHlcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihgU2V0dGluZyB1cCBmYWtlIHdvcmtlciBmYWlsZWQ6IFwiJHtyZWFzb24ubWVzc2FnZX1cIi5gKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5fd2ViV29ya2VyKSB7XG4gICAgICAgIHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBwZGZXb3JrZXJQb3J0cy5kZWxldGUodGhpcy5fcG9ydCk7XG4gICAgICB0aGlzLl9wb3J0ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX21lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21Qb3J0KHBhcmFtcykge1xuICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5wb3J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBERldvcmtlci5mcm9tUG9ydCAtIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZGZXb3JrZXJQb3J0cy5oYXMocGFyYW1zLnBvcnQpKSB7XG4gICAgICAgIHJldHVybiBwZGZXb3JrZXJQb3J0cy5nZXQocGFyYW1zLnBvcnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBERldvcmtlcihwYXJhbXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRXb3JrZXJTcmMoKSB7XG4gICAgICByZXR1cm4gZ2V0V29ya2VyU3JjKCk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gUERGV29ya2VyO1xufSgpO1xuXG5leHBvcnRzLlBERldvcmtlciA9IFBERldvcmtlcjtcblxuY2xhc3MgV29ya2VyVHJhbnNwb3J0IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZUhhbmRsZXIsIGxvYWRpbmdUYXNrLCBuZXR3b3JrU3RyZWFtLCBwYXJhbXMpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgIGRvY0lkOiBsb2FkaW5nVGFzay5kb2NJZCxcbiAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgb3duZXJEb2N1bWVudDogcGFyYW1zLm93bmVyRG9jdW1lbnRcbiAgICB9KTtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5DTWFwUmVhZGVyRmFjdG9yeSA9IG5ldyBwYXJhbXMuQ01hcFJlYWRlckZhY3Rvcnkoe1xuICAgICAgYmFzZVVybDogcGFyYW1zLmNNYXBVcmwsXG4gICAgICBpc0NvbXByZXNzZWQ6IHBhcmFtcy5jTWFwUGFja2VkXG4gICAgfSk7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5ID0gbnVsbDtcbiAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkgPSBudWxsO1xuICAgIHRoaXMuX25ldHdvcmtTdHJlYW0gPSBuZXR3b3JrU3RyZWFtO1xuICAgIHRoaXMuX2Z1bGxSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IG51bGw7XG4gICAgdGhpcy5wYWdlQ2FjaGUgPSBbXTtcbiAgICB0aGlzLnBhZ2VQcm9taXNlcyA9IFtdO1xuICAgIHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveUNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICBpZiAodGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YWl0T24gPSBbXTtcbiAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICBpZiAocGFnZSkge1xuICAgICAgICB3YWl0T24ucHVzaChwYWdlLl9kZXN0cm95KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGFnZUNhY2hlLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wYWdlUHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICBjb25zdCB0ZXJtaW5hdGVkID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJUZXJtaW5hdGVcIiwgbnVsbCk7XG4gICAgd2FpdE9uLnB1c2godGVybWluYXRlZCk7XG4gICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZm9udExvYWRlci5jbGVhcigpO1xuXG4gICAgICBpZiAodGhpcy5fbmV0d29ya1N0cmVhbSkge1xuICAgICAgICB0aGlzLl9uZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIldvcmtlciB3YXMgdGVybWluYXRlZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH0sIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2V0dXBNZXNzYWdlSGFuZGxlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBtZXNzYWdlSGFuZGxlcixcbiAgICAgIGxvYWRpbmdUYXNrXG4gICAgfSA9IHRoaXM7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJHZXRSZWFkZXJcIiwgKGRhdGEsIHNpbmspID0+IHtcbiAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0sIFwiR2V0UmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG4gICAgICB0aGlzLl9mdWxsUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyKCk7XG5cbiAgICAgIHRoaXMuX2Z1bGxSZWFkZXIub25Qcm9ncmVzcyA9IGV2dCA9PiB7XG4gICAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHtcbiAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgc2luay5vblB1bGwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH0pIHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKSh2YWx1ZSksIFwiR2V0UmVhZGVyIC0gZXhwZWN0ZWQgYW4gQXJyYXlCdWZmZXIuXCIpO1xuICAgICAgICAgIHNpbmsuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSksIDEsIFt2YWx1ZV0pO1xuICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBzaW5rLm9uQ2FuY2VsID0gcmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5fZnVsbFJlYWRlci5jYW5jZWwocmVhc29uKTtcblxuICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiUmVhZGVySGVhZGVyc1JlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyc0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICBjb25zdCBmdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlYWRlcjtcbiAgICAgIGZ1bGxSZWFkZXIuaGVhZGVyc1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIWZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQgfHwgIWZ1bGxSZWFkZXIuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgIGlmICh0aGlzLl9sYXN0UHJvZ3Jlc3MgJiYgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh0aGlzLl9sYXN0UHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyA9IGV2dCA9PiB7XG4gICAgICAgICAgICBpZiAobG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQ6IGZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsXG4gICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IGZ1bGxSZWFkZXIuY29udGVudExlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkdldFJhbmdlUmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG5cbiAgICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgIGlmICghcmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHZhbHVlKSwgXCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0RG9jXCIsICh7XG4gICAgICBwZGZJbmZvXG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5fbnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzO1xuXG4gICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBQREZEb2N1bWVudFByb3h5KHBkZkluZm8sIHRoaXMpKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkRvY0V4Y2VwdGlvblwiLCBmdW5jdGlvbiAoZXgpIHtcbiAgICAgIGxldCByZWFzb247XG5cbiAgICAgIHN3aXRjaCAoZXgubmFtZSkge1xuICAgICAgICBjYXNlIFwiUGFzc3dvcmRFeGNlcHRpb25cIjpcbiAgICAgICAgICByZWFzb24gPSBuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24oZXgubWVzc2FnZSwgZXguY29kZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkludmFsaWRQREZFeGNlcHRpb25cIjpcbiAgICAgICAgICByZWFzb24gPSBuZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbihleC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTWlzc2luZ1BERkV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGV4Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25cIjpcbiAgICAgICAgICByZWFzb24gPSBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGV4Lm1lc3NhZ2UsIGV4LnN0YXR1cyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24oZXgubWVzc2FnZSwgZXguZGV0YWlscyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICBjb25zdCBtc2cgPSBcIkRvY0V4Y2VwdGlvbiAtIGV4cGVjdGVkIGEgdmFsaWQgRXJyb3IuXCI7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShtc2cpO1xuICAgICAgfVxuXG4gICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlBhc3N3b3JkUmVxdWVzdFwiLCBleGNlcHRpb24gPT4ge1xuICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICBpZiAobG9hZGluZ1Rhc2sub25QYXNzd29yZCkge1xuICAgICAgICBjb25zdCB1cGRhdGVQYXNzd29yZCA9IHBhc3N3b3JkID0+IHtcbiAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICBwYXNzd29yZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbG9hZGluZ1Rhc2sub25QYXNzd29yZCh1cGRhdGVQYXNzd29yZCwgZXhjZXB0aW9uLmNvZGUpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihleGNlcHRpb24ubWVzc2FnZSwgZXhjZXB0aW9uLmNvZGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRGF0YUxvYWRlZFwiLCBkYXRhID0+IHtcbiAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGRhdGEubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlN0YXJ0UmVuZGVyUGFnZVwiLCBkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VDYWNoZVtkYXRhLnBhZ2VJbmRleF07XG5cbiAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5pbnRlbnQpO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiY29tbW9ub2JqXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2lkLCB0eXBlLCBleHBvcnRlZERhdGFdID0gZGF0YTtcblxuICAgICAgaWYgKHRoaXMuY29tbW9uT2Jqcy5oYXMoaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBleHBvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICR7ZXhwb3J0ZWRFcnJvcn1gKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZEVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBmb250UmVnaXN0cnkgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5wZGZCdWcgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yICYmIGdsb2JhbFRoaXMuRm9udEluc3BlY3Rvci5lbmFibGVkKSB7XG4gICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyRm9udChmb250LCB1cmwpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKGZvbnQsIHVybCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmb250ID0gbmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChleHBvcnRlZERhdGEsIHtcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgIGlnbm9yZUVycm9yczogcGFyYW1zLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoZm9udCkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGb250RmFsbGJhY2tcIiwge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzICYmIGZvbnQuZGF0YSkge1xuICAgICAgICAgICAgICBmb250LmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRQYXRoXCI6XG4gICAgICAgIGNhc2UgXCJJbWFnZVwiOlxuICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZERhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwib2JqXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtpZCwgcGFnZUluZGV4LCB0eXBlLCBpbWFnZURhdGFdID0gZGF0YTtcbiAgICAgIGNvbnN0IHBhZ2VQcm94eSA9IHRoaXMucGFnZUNhY2hlW3BhZ2VJbmRleF07XG5cbiAgICAgIGlmIChwYWdlUHJveHkub2Jqcy5oYXMoaWQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiSW1hZ2VcIjpcbiAgICAgICAgICBwYWdlUHJveHkub2Jqcy5yZXNvbHZlKGlkLCBpbWFnZURhdGEpO1xuICAgICAgICAgIGNvbnN0IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFID0gODAwMDAwMDtcblxuICAgICAgICAgIGlmIChpbWFnZURhdGEgJiYgXCJkYXRhXCIgaW4gaW1hZ2VEYXRhICYmIGltYWdlRGF0YS5kYXRhLmxlbmd0aCA+IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFKSB7XG4gICAgICAgICAgICBwYWdlUHJveHkuY2xlYW51cEFmdGVyUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR290IHVua25vd24gb2JqZWN0IHR5cGUgJHt0eXBlfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRG9jUHJvZ3Jlc3NcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzKHtcbiAgICAgICAgICBsb2FkZWQ6IGRhdGEubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBkYXRhLnRvdGFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLmJpbmQodGhpcykpO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRmV0Y2hCdWlsdEluQ01hcFwiLCAoZGF0YSwgc2luaykgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHNpbmsuZXJyb3IobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBmZXRjaGVkID0gZmFsc2U7XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICBpZiAoZmV0Y2hlZCkge1xuICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChkYXRhKS50aGVuKGZ1bmN0aW9uIChidWlsdEluQ01hcCkge1xuICAgICAgICAgIHNpbmsuZW5xdWV1ZShidWlsdEluQ01hcCwgMSwgW2J1aWx0SW5DTWFwLmNNYXBEYXRhLmJ1ZmZlcl0pO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBfb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgIGZlYXR1cmVJZFxuICB9KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUpIHtcbiAgICAgIHRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUoZmVhdHVyZUlkKTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERhdGFcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZU51bWJlcikgfHwgcGFnZU51bWJlciA8PSAwIHx8IHBhZ2VOdW1iZXIgPiB0aGlzLl9udW1QYWdlcykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgcGFnZSByZXF1ZXN0XCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSW5kZXggPSBwYWdlTnVtYmVyIC0gMTtcblxuICAgIGlmIChwYWdlSW5kZXggaW4gdGhpcy5wYWdlUHJvbWlzZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSkudGhlbihwYWdlSW5mbyA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNwb3J0IGRlc3Ryb3llZFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZSA9IG5ldyBQREZQYWdlUHJveHkocGFnZUluZGV4LCBwYWdlSW5mbywgdGhpcywgdGhpcy5fcGFyYW1zLm93bmVyRG9jdW1lbnQsIHRoaXMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgdGhpcy5wYWdlQ2FjaGVbcGFnZUluZGV4XSA9IHBhZ2U7XG4gICAgICByZXR1cm4gcGFnZTtcbiAgICB9KTtcbiAgICB0aGlzLnBhZ2VQcm9taXNlc1twYWdlSW5kZXhdID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFBhZ2VJbmRleChyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlSW5kZXhcIiwge1xuICAgICAgcmVmXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihyZWFzb24pKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zKHBhZ2VJbmRleCwgaW50ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QW5ub3RhdGlvbnNcIiwge1xuICAgICAgcGFnZUluZGV4LFxuICAgICAgaW50ZW50XG4gICAgfSk7XG4gIH1cblxuICBzYXZlRG9jdW1lbnQoYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJTYXZlRG9jdW1lbnRcIiwge1xuICAgICAgbnVtUGFnZXM6IHRoaXMuX251bVBhZ2VzLFxuICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldEFsbCgpIHx8IG51bGwsXG4gICAgICBmaWxlbmFtZTogdGhpcy5fZnVsbFJlYWRlciA/IHRoaXMuX2Z1bGxSZWFkZXIuZmlsZW5hbWUgOiBudWxsXG4gICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAoYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERlc3RpbmF0aW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgaWYgKHR5cGVvZiBpZCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgZGVzdGluYXRpb24gcmVxdWVzdC5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERlc3RpbmF0aW9uXCIsIHtcbiAgICAgIGlkXG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWdlTGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VMYWJlbHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlTGF5b3V0KCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VMYXlvdXRcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlTW9kZVwiLCBudWxsKTtcbiAgfVxuXG4gIGdldFZpZXdlclByZWZlcmVuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFZpZXdlclByZWZlcmVuY2VzXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0T3BlbkFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRPcGVuQWN0aW9uXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QXR0YWNobWVudHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRKYXZhU2NyaXB0KCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldEphdmFTY3JpcHRcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPdXRsaW5lKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE91dGxpbmVcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4gbmV3IF9vcHRpb25hbF9jb250ZW50X2NvbmZpZy5PcHRpb25hbENvbnRlbnRDb25maWcocmVzdWx0cyk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQZXJtaXNzaW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE1ldGFkYXRhXCIsIG51bGwpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbmZvOiByZXN1bHRzWzBdLFxuICAgICAgICBtZXRhZGF0YTogcmVzdWx0c1sxXSA/IG5ldyBfbWV0YWRhdGEuTWV0YWRhdGEocmVzdWx0c1sxXSkgOiBudWxsLFxuICAgICAgICBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTogdGhpcy5fZnVsbFJlYWRlciA/IHRoaXMuX2Z1bGxSZWFkZXIuZmlsZW5hbWUgOiBudWxsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0U3RhdHNcIiwgbnVsbCk7XG4gIH1cblxuICBzdGFydENsZWFudXAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiQ2xlYW51cFwiLCBudWxsKS50aGVuKCgpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMucGFnZUNhY2hlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZUNhY2hlW2ldO1xuXG4gICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgY29uc3QgY2xlYW51cFN1Y2Nlc3NmdWwgPSBwYWdlLmNsZWFudXAoKTtcblxuICAgICAgICAgIGlmICghY2xlYW51cFN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc3RhcnRDbGVhbnVwOiBQYWdlICR7aSArIDF9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tbW9uT2Jqcy5jbGVhcigpO1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbG9hZGluZ1BhcmFtcygpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXM7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibG9hZGluZ1BhcmFtc1wiLCB7XG4gICAgICBkaXNhYmxlQXV0b0ZldGNoOiBwYXJhbXMuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUERGT2JqZWN0cyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgX2Vuc3VyZU9iaihvYmpJZCkge1xuICAgIGlmICh0aGlzLl9vYmpzW29iaklkXSkge1xuICAgICAgcmV0dXJuIHRoaXMuX29ianNbb2JqSWRdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9vYmpzW29iaklkXSA9IHtcbiAgICAgIGNhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICByZXNvbHZlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZ2V0KG9iaklkLCBjYWxsYmFjayA9IG51bGwpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2Vuc3VyZU9iaihvYmpJZCkuY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oY2FsbGJhY2spO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcblxuICAgIGlmICghb2JqIHx8ICFvYmoucmVzb2x2ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdGluZyBvYmplY3QgdGhhdCBpc24ndCByZXNvbHZlZCB5ZXQgJHtvYmpJZH0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iai5kYXRhO1xuICB9XG5cbiAgaGFzKG9iaklkKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgcmV0dXJuIG9iaiA/IG9iai5yZXNvbHZlZCA6IGZhbHNlO1xuICB9XG5cbiAgcmVzb2x2ZShvYmpJZCwgZGF0YSkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2Vuc3VyZU9iaihvYmpJZCk7XG5cbiAgICBvYmoucmVzb2x2ZWQgPSB0cnVlO1xuICAgIG9iai5kYXRhID0gZGF0YTtcbiAgICBvYmouY2FwYWJpbGl0eS5yZXNvbHZlKGRhdGEpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxufVxuXG5jbGFzcyBSZW5kZXJUYXNrIHtcbiAgY29uc3RydWN0b3IoaW50ZXJuYWxSZW5kZXJUYXNrKSB7XG4gICAgdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrO1xuICAgIHRoaXMub25Db250aW51ZSA9IG51bGw7XG4gIH1cblxuICBnZXQgcHJvbWlzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCk7XG4gIH1cblxufVxuXG5jb25zdCBJbnRlcm5hbFJlbmRlclRhc2sgPSBmdW5jdGlvbiBJbnRlcm5hbFJlbmRlclRhc2tDbG9zdXJlKCkge1xuICBjb25zdCBjYW52YXNJblJlbmRlcmluZyA9IG5ldyBXZWFrU2V0KCk7XG5cbiAgY2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNrIHtcbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICBjYWxsYmFjayxcbiAgICAgIHBhcmFtcyxcbiAgICAgIG9ianMsXG4gICAgICBjb21tb25PYmpzLFxuICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeSxcbiAgICAgIHdlYkdMQ29udGV4dCxcbiAgICAgIHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZhbHNlLFxuICAgICAgcGRmQnVnID0gZmFsc2VcbiAgICB9KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSBudWxsO1xuICAgICAgdGhpcy5vcGVyYXRvckxpc3QgPSBvcGVyYXRvckxpc3Q7XG4gICAgICB0aGlzLl9wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgICAgdGhpcy53ZWJHTENvbnRleHQgPSB3ZWJHTENvbnRleHQ7XG4gICAgICB0aGlzLl9wZGZCdWcgPSBwZGZCdWc7XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrID0gbnVsbDtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgdGhpcy50YXNrID0gbmV3IFJlbmRlclRhc2sodGhpcyk7XG4gICAgICB0aGlzLl9jb250aW51ZUJvdW5kID0gdGhpcy5fY29udGludWUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kID0gdGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLl9uZXh0Qm91bmQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLl9jYW52YXMgPSBwYXJhbXMuY2FudmFzQ29udGV4dC5jYW52YXM7XG4gICAgfVxuXG4gICAgZ2V0IGNvbXBsZXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdyYXBoaWNzKHtcbiAgICAgIHRyYW5zcGFyZW5jeSA9IGZhbHNlLFxuICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnXG4gICAgfSkge1xuICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICBpZiAoY2FudmFzSW5SZW5kZXJpbmcuaGFzKHRoaXMuX2NhbnZhcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIHRoZSBzYW1lIGNhbnZhcyBkdXJpbmcgbXVsdGlwbGUgcmVuZGVyKCkgb3BlcmF0aW9ucy4gXCIgKyBcIlVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgXCIgKyBcImNhbmNlbGxlZCBvciBjb21wbGV0ZWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzSW5SZW5kZXJpbmcuYWRkKHRoaXMuX2NhbnZhcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wZGZCdWcgJiYgZ2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlciAmJiBnbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zdGVwcGVyID0gZ2xvYmFsVGhpcy5TdGVwcGVyTWFuYWdlci5jcmVhdGUodGhpcy5fcGFnZUluZGV4KTtcbiAgICAgICAgdGhpcy5zdGVwcGVyLmluaXQodGhpcy5vcGVyYXRvckxpc3QpO1xuICAgICAgICB0aGlzLnN0ZXBwZXIubmV4dEJyZWFrUG9pbnQgPSB0aGlzLnN0ZXBwZXIuZ2V0TmV4dEJyZWFrUG9pbnQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBjYW52YXNDb250ZXh0LFxuICAgICAgICB2aWV3cG9ydCxcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICBpbWFnZUxheWVyLFxuICAgICAgICBiYWNrZ3JvdW5kXG4gICAgICB9ID0gdGhpcy5wYXJhbXM7XG4gICAgICB0aGlzLmdmeCA9IG5ldyBfY2FudmFzLkNhbnZhc0dyYXBoaWNzKGNhbnZhc0NvbnRleHQsIHRoaXMuY29tbW9uT2JqcywgdGhpcy5vYmpzLCB0aGlzLmNhbnZhc0ZhY3RvcnksIHRoaXMud2ViR0xDb250ZXh0LCBpbWFnZUxheWVyLCBvcHRpb25hbENvbnRlbnRDb25maWcpO1xuICAgICAgdGhpcy5nZnguYmVnaW5EcmF3aW5nKHtcbiAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICB2aWV3cG9ydCxcbiAgICAgICAgdHJhbnNwYXJlbmN5LFxuICAgICAgICBiYWNrZ3JvdW5kXG4gICAgICB9KTtcbiAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gMDtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbChlcnJvciA9IG51bGwpIHtcbiAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5nZngpIHtcbiAgICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgIGNhbnZhc0luUmVuZGVyaW5nLmRlbGV0ZSh0aGlzLl9jYW52YXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhbGxiYWNrKGVycm9yIHx8IG5ldyBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oYFJlbmRlcmluZyBjYW5jZWxsZWQsIHBhZ2UgJHt0aGlzLl9wYWdlSW5kZXggKyAxfWAsIFwiY2FudmFzXCIpKTtcbiAgICB9XG5cbiAgICBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrID0gdGhpcy5fY29udGludWVCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RlcHBlcikge1xuICAgICAgICB0aGlzLnN0ZXBwZXIudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucnVubmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gICAgfVxuXG4gICAgX2NvbnRpbnVlKCkge1xuICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGFzay5vbkNvbnRpbnVlKSB7XG4gICAgICAgIHRoaXMudGFzay5vbkNvbnRpbnVlKHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlTmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9zY2hlZHVsZU5leHQoKSB7XG4gICAgICBpZiAodGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX25leHRCb3VuZCgpLmNhdGNoKHRoaXMuY2FuY2VsLmJpbmQodGhpcykpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfbmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gdGhpcy5nZnguZXhlY3V0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCwgdGhpcy5vcGVyYXRvckxpc3RJZHgsIHRoaXMuX2NvbnRpbnVlQm91bmQsIHRoaXMuc3RlcHBlcik7XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdElkeCA9PT0gdGhpcy5vcGVyYXRvckxpc3QuYXJnc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICAgICAgY2FudmFzSW5SZW5kZXJpbmcuZGVsZXRlKHRoaXMuX2NhbnZhcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gSW50ZXJuYWxSZW5kZXJUYXNrO1xufSgpO1xuXG5jb25zdCB2ZXJzaW9uID0gJzIuNi4zNDcnO1xuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbmNvbnN0IGJ1aWxkID0gJzNiZTljNjVmJztcbmV4cG9ydHMuYnVpbGQgPSBidWlsZDtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBleHBvcnRzLkZvbnRGYWNlT2JqZWN0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBCYXNlRm9udExvYWRlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkb2NJZCxcbiAgICBvblVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgICBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICB9KSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VGb250TG9hZGVyKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUZvbnRMb2FkZXIuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSA9IG9uVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgIHRoaXMuX2RvY3VtZW50ID0gb3duZXJEb2N1bWVudDtcbiAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcyA9IFtdO1xuICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIGFkZE5hdGl2ZUZvbnRGYWNlKG5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMucHVzaChuYXRpdmVGb250RmFjZSk7XG5cbiAgICB0aGlzLl9kb2N1bWVudC5mb250cy5hZGQobmF0aXZlRm9udEZhY2UpO1xuICB9XG5cbiAgaW5zZXJ0UnVsZShydWxlKSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50O1xuXG4gICAgaWYgKCFzdHlsZUVsZW1lbnQpIHtcbiAgICAgIHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgc3R5bGVFbGVtZW50LmlkID0gYFBERkpTX0ZPTlRfU1RZTEVfVEFHXyR7dGhpcy5kb2NJZH1gO1xuXG4gICAgICB0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVTaGVldCA9IHN0eWxlRWxlbWVudC5zaGVldDtcbiAgICBzdHlsZVNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMuZm9yRWFjaChuYXRpdmVGb250RmFjZSA9PiB7XG4gICAgICB0aGlzLl9kb2N1bWVudC5mb250cy5kZWxldGUobmF0aXZlRm9udEZhY2UpO1xuICAgIH0pO1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLmxlbmd0aCA9IDA7XG5cbiAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJpbmQoZm9udCkge1xuICAgIGlmIChmb250LmF0dGFjaGVkIHx8IGZvbnQubWlzc2luZ0ZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb250LmF0dGFjaGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnN0IG5hdGl2ZUZvbnRGYWNlID0gZm9udC5jcmVhdGVOYXRpdmVGb250RmFjZSgpO1xuXG4gICAgICBpZiAobmF0aXZlRm9udEZhY2UpIHtcbiAgICAgICAgdGhpcy5hZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBuYXRpdmVGb250RmFjZS5sb2FkZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRMb2FkTmF0aXZlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEZhaWxlZCB0byBsb2FkIGZvbnQgJyR7bmF0aXZlRm9udEZhY2UuZmFtaWx5fSc6ICcke2V4fScuYCk7XG4gICAgICAgICAgZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gZm9udC5jcmVhdGVGb250RmFjZVJ1bGUoKTtcblxuICAgIGlmIChydWxlKSB7XG4gICAgICB0aGlzLmluc2VydFJ1bGUocnVsZSk7XG5cbiAgICAgIGlmICh0aGlzLmlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayhyZXNvbHZlKTtcblxuICAgICAgICB0aGlzLl9wcmVwYXJlRm9udExvYWRFdmVudChbcnVsZV0sIFtmb250XSwgcmVxdWVzdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfcXVldWVMb2FkaW5nQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfcXVldWVMb2FkaW5nQ2FsbGJhY2tgLlwiKTtcbiAgfVxuXG4gIGdldCBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkKCkge1xuICAgIGNvbnN0IHN1cHBvcnRlZCA9IHR5cGVvZiB0aGlzLl9kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhIXRoaXMuX2RvY3VtZW50LmZvbnRzO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIiwgc3VwcG9ydGVkKTtcbiAgfVxuXG4gIGdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuXCIpO1xuICB9XG5cbiAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2xvYWRUZXN0Rm9udGAuXCIpO1xuICB9XG5cbiAgX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250c1RvTG9hZCwgcmVxdWVzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuXCIpO1xuICB9XG5cbn1cblxubGV0IEZvbnRMb2FkZXI7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xue1xuICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyID0gY2xhc3MgR2VuZXJpY0ZvbnRMb2FkZXIgZXh0ZW5kcyBCYXNlRm9udExvYWRlciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICBzdXBlcihwYXJhbXMpO1xuICAgICAgdGhpcy5sb2FkaW5nQ29udGV4dCA9IHtcbiAgICAgICAgcmVxdWVzdHM6IFtdLFxuICAgICAgICBuZXh0UmVxdWVzdElkOiAwXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2FkVGVzdEZvbnRJZCA9IDA7XG4gICAgfVxuXG4gICAgZ2V0IGlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKCkge1xuICAgICAgbGV0IHN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbSA9IC9Nb3ppbGxhXFwvNS4wLio/cnY6KFxcZCspLio/IEdlY2tvLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4gICAgICAgIGlmIChtICYmIG1bMV0gPj0gMTQpIHtcbiAgICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsIHN1cHBvcnRlZCk7XG4gICAgfVxuXG4gICAgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoKSB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFyZXF1ZXN0LmRvbmUsIFwiY29tcGxldGVSZXF1ZXN0KCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZS5cIik7XG4gICAgICAgIHJlcXVlc3QuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKGNvbnRleHQucmVxdWVzdHMubGVuZ3RoID4gMCAmJiBjb250ZXh0LnJlcXVlc3RzWzBdLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBvdGhlclJlcXVlc3QgPSBjb250ZXh0LnJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgICAgc2V0VGltZW91dChvdGhlclJlcXVlc3QuY2FsbGJhY2ssIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmxvYWRpbmdDb250ZXh0O1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgaWQ6IGBwZGZqcy1mb250LWxvYWRpbmctJHtjb250ZXh0Lm5leHRSZXF1ZXN0SWQrK31gLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlUmVxdWVzdCxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgIH07XG4gICAgICBjb250ZXh0LnJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG5cbiAgICBnZXQgX2xvYWRUZXN0Rm9udCgpIHtcbiAgICAgIGNvbnN0IGdldExvYWRUZXN0Rm9udCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGF0b2IoXCJUMVJVVHdBTEFJQUFBd0F3UTBaR0lESHRaZzRBQUFPWUFBQUFnVVpHVkUxbGt6WndBQUFFSEFBQUFCeEhSRVZHQUJRQVwiICsgXCJGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQVwiICsgXCJBTHdBQUFBMmFHaGxZUWRrQStvQUFBRDBBQUFBSkdodGRIZ0Q2QUFBQUFBRVdBQUFBQVp0WVhod0FBSlFBQUFBQVJnQVwiICsgXCJBQUFHYm1GdFpWam1kSDRBQUFHQUFBQUFzWEJ2YzNUL2hnQXpBQUFEZUFBQUFDQUFBUUFBQUFFQUFMWlJGc1JmRHp6MVwiICsgXCJBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRFwiICsgXCI2QUFBQUFBRDZBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFVQUFBQWdBQUFBUUQ2QUgwQUFVQUFBS0tBcndBQUFDTVwiICsgXCJBb29DdkFBQUFlQUFNUUVDQUFBQ0FBWUpBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZCbVJXUUF3QUF1QUM0RFwiICsgXCJJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQVwiICsgXCJBQUVBQVFBQUFBRUFBQUFBQUFJQUFRQUFBQUVBQUFBQUFBTUFBUUFBQUFFQUFBQUFBQVFBQVFBQUFBRUFBQUFBQUFVQVwiICsgXCJBUUFBQUFFQUFBQUFBQVlBQVFBQUFBTUFBUVFKQUFBQUFnQUJBQU1BQVFRSkFBRUFBZ0FCQUFNQUFRUUpBQUlBQWdBQlwiICsgXCJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWVwiICsgXCJBQUFBQUFBQUF3QUFBQU1BQUFBY0FBRUFBQUFBQUR3QUF3QUJBQUFBSEFBRUFDQUFBQUFFQUFRQUFRQUFBQzcvL3dBQVwiICsgXCJBQzcvLy8vVEFBRUFBQUFBQUFBQkJnQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUQvZ3dBeUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFCQUFRRUFBRUJBUUpZQUFFQkFTSDREd0Q0R3dIRUF2Z2NBL2dYQkl3TUFZdUwrbno1dFFYa0Q1ajNDQkxuRVFBQ1wiICsgXCJBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M1wiICsgXCJEb3Y2ZkFINmZBVCtmUHA4K253SERvc01Ddm0xQ3ZtMURBejZmQlFBQUFBQUFBQUJBQUFBQU1tSmJ6RUFBQUFBemdUalwiICsgXCJGUUFBQUFET0JPUXBBQUVBQUFBQUFBQUFEQUFVQUFRQUFBQUJBQUFBQWdBQkFBQUFBQUFBQUFBRDZBQUFBQUFBQUE9PVwiKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9sb2FkVGVzdEZvbnRcIiwgZ2V0TG9hZFRlc3RGb250KCkpO1xuICAgIH1cblxuICAgIF9wcmVwYXJlRm9udExvYWRFdmVudChydWxlcywgZm9udHMsIHJlcXVlc3QpIHtcbiAgICAgIGZ1bmN0aW9uIGludDMyKGRhdGEsIG9mZnNldCkge1xuICAgICAgICByZXR1cm4gZGF0YS5jaGFyQ29kZUF0KG9mZnNldCkgPDwgMjQgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMSkgPDwgMTYgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMikgPDwgOCB8IGRhdGEuY2hhckNvZGVBdChvZmZzZXQgKyAzKSAmIDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNwbGljZVN0cmluZyhzLCBvZmZzZXQsIHJlbW92ZSwgaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IGNodW5rMSA9IHMuc3Vic3RyaW5nKDAsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNodW5rMiA9IHMuc3Vic3RyaW5nKG9mZnNldCArIHJlbW92ZSk7XG4gICAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7XG4gICAgICB9XG5cbiAgICAgIGxldCBpLCBpaTtcblxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGxldCBjYWxsZWQgPSAwO1xuXG4gICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsZWQrKztcblxuICAgICAgICBpZiAoY2FsbGVkID4gMzApIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMb2FkIHRlc3QgZm9udCBuZXZlciBsb2FkZWQuXCIpO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmZvbnQgPSBcIjMwcHggXCIgKyBuYW1lO1xuICAgICAgICBjdHguZmlsbFRleHQoXCIuXCIsIDAsIDIwKTtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcblxuICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZFRlc3RGb250SWQgPSBgbHQke0RhdGUubm93KCl9JHt0aGlzLmxvYWRUZXN0Rm9udElkKyt9YDtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgY29uc3QgQ09NTUVOVF9PRkZTRVQgPSA5NzY7XG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENPTU1FTlRfT0ZGU0VULCBsb2FkVGVzdEZvbnRJZC5sZW5ndGgsIGxvYWRUZXN0Rm9udElkKTtcbiAgICAgIGNvbnN0IENGRl9DSEVDS1NVTV9PRkZTRVQgPSAxNjtcbiAgICAgIGNvbnN0IFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgbGV0IGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IGxvYWRUZXN0Rm9udElkLmxlbmd0aCkge1xuICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkICsgXCJYWFhcIiwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENGRl9DSEVDS1NVTV9PRkZTRVQsIDQsICgwLCBfdXRpbC5zdHJpbmczMikoY2hlY2tzdW0pKTtcbiAgICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgO1xuICAgICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseTpcIiR7bG9hZFRlc3RGb250SWR9XCI7c3JjOiR7dXJsfX1gO1xuICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmb250cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZm9udHNbaV0ubG9hZGVkTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIG5hbWVzLnB1c2gobG9hZFRlc3RGb250SWQpO1xuXG4gICAgICBjb25zdCBkaXYgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBkaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICBkaXYuc3R5bGUud2lkdGggPSBkaXYuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gICAgICBkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICBkaXYuc3R5bGUudG9wID0gZGl2LnN0eWxlLmxlZnQgPSBcIjBweFwiO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXG4gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBcIkhpXCI7XG4gICAgICAgIHNwYW4uc3R5bGUuZm9udEZhbWlseSA9IG5hbWVzW2ldO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuICAgICAgaXNGb250UmVhZHkobG9hZFRlc3RGb250SWQsICgpID0+IHtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuXG4gICAgICAgIHJlcXVlc3QuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9O1xufVxuXG5jbGFzcyBGb250RmFjZU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKHRyYW5zbGF0ZWREYXRhLCB7XG4gICAgaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZSxcbiAgICBkaXNhYmxlRm9udEZhY2UgPSBmYWxzZSxcbiAgICBpZ25vcmVFcnJvcnMgPSBmYWxzZSxcbiAgICBvblVuc3VwcG9ydGVkRmVhdHVyZSA9IG51bGwsXG4gICAgZm9udFJlZ2lzdHJ5ID0gbnVsbFxuICB9KSB7XG4gICAgdGhpcy5jb21waWxlZEdseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBmb3IgKGNvbnN0IGkgaW4gdHJhbnNsYXRlZERhdGEpIHtcbiAgICAgIHRoaXNbaV0gPSB0cmFuc2xhdGVkRGF0YVtpXTtcbiAgICB9XG5cbiAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9IGlzRXZhbFN1cHBvcnRlZCAhPT0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlRm9udEZhY2UgPSBkaXNhYmxlRm9udEZhY2UgPT09IHRydWU7XG4gICAgdGhpcy5pZ25vcmVFcnJvcnMgPSBpZ25vcmVFcnJvcnMgPT09IHRydWU7XG4gICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUgPSBvblVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICB0aGlzLmZvbnRSZWdpc3RyeSA9IGZvbnRSZWdpc3RyeTtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZUZvbnRGYWNlKCkge1xuICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pO1xuXG4gICAgaWYgKHRoaXMuZm9udFJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmZvbnRSZWdpc3RyeS5yZWdpc3RlckZvbnQodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlO1xuICB9XG5cbiAgY3JlYXRlRm9udEZhY2VSdWxlKCkge1xuICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpO1xuICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YToke3RoaXMubWltZXR5cGV9O2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgO1xuICAgIGNvbnN0IHJ1bGUgPSBgQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XCIke3RoaXMubG9hZGVkTmFtZX1cIjtzcmM6JHt1cmx9fWA7XG5cbiAgICBpZiAodGhpcy5mb250UmVnaXN0cnkpIHtcbiAgICAgIHRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzLCB1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgZ2V0UGF0aEdlbmVyYXRvcihvYmpzLCBjaGFyYWN0ZXIpIHtcbiAgICBpZiAodGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl07XG4gICAgfVxuXG4gICAgbGV0IGNtZHMsIGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgY21kcyA9IG9ianMuZ2V0KHRoaXMubG9hZGVkTmFtZSArIFwiX3BhdGhfXCIgKyBjaGFyYWN0ZXIpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoIXRoaXMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUpIHtcbiAgICAgICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250R2V0UGF0aFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiBcIiR7ZXh9XCIuYCk7XG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXZhbFN1cHBvcnRlZCAmJiBfdXRpbC5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQudmFsdWUpIHtcbiAgICAgIGxldCBhcmdzLFxuICAgICAgICAgIGpzID0gXCJcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY21kcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjbWRzW2ldO1xuXG4gICAgICAgIGlmIChjdXJyZW50LmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFyZ3MgPSBjdXJyZW50LmFyZ3Muam9pbihcIixcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJncyA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBqcyArPSBcImMuXCIgKyBjdXJyZW50LmNtZCArIFwiKFwiICsgYXJncyArIFwiKTtcXG5cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXSA9IG5ldyBGdW5jdGlvbihcImNcIiwgXCJzaXplXCIsIGpzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNtZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjdXJyZW50ID0gY21kc1tpXTtcblxuICAgICAgICBpZiAoY3VycmVudC5jbWQgPT09IFwic2NhbGVcIikge1xuICAgICAgICAgIGN1cnJlbnQuYXJncyA9IFtzaXplLCAtc2l6ZV07XG4gICAgICAgIH1cblxuICAgICAgICBjW2N1cnJlbnQuY21kXS5hcHBseShjLCBjdXJyZW50LmFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnRzLkZvbnRGYWNlT2JqZWN0ID0gRm9udEZhY2VPYmplY3Q7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Ob2RlQ01hcFJlYWRlckZhY3RvcnkgPSBleHBvcnRzLk5vZGVDYW52YXNGYWN0b3J5ID0gdm9pZCAwO1xuXG52YXIgX2Rpc3BsYXlfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEpO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5sZXQgTm9kZUNhbnZhc0ZhY3RvcnkgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJOb3QgaW1wbGVtZW50ZWQ6IE5vZGVDYW52YXNGYWN0b3J5XCIpO1xuICB9XG5cbn07XG5leHBvcnRzLk5vZGVDYW52YXNGYWN0b3J5ID0gTm9kZUNhbnZhc0ZhY3Rvcnk7XG5sZXQgTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiTm90IGltcGxlbWVudGVkOiBOb2RlQ01hcFJlYWRlckZhY3RvcnlcIik7XG4gIH1cblxufTtcbmV4cG9ydHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gTm9kZUNNYXBSZWFkZXJGYWN0b3J5O1xuXG5pZiAoX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgZXhwb3J0cy5Ob2RlQ2FudmFzRmFjdG9yeSA9IE5vZGVDYW52YXNGYWN0b3J5ID0gY2xhc3MgZXh0ZW5kcyBfZGlzcGxheV91dGlscy5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gICAgY3JlYXRlKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IENhbnZhcyA9IHJlcXVpcmUoXCJjYW52YXNcIik7XG5cbiAgICAgIGNvbnN0IGNhbnZhcyA9IENhbnZhcy5jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW52YXMsXG4gICAgICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG4gIGV4cG9ydHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gY2xhc3MgZXh0ZW5kcyBfZGlzcGxheV91dGlscy5CYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICAgIF9mZXRjaERhdGEodXJsLCBjb21wcmVzc2lvblR5cGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuXG4gICAgICAgIGZzLnJlYWRGaWxlKHVybCwgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBjTWFwRGF0YTogbmV3IFVpbnQ4QXJyYXkoZGF0YSksXG4gICAgICAgICAgICBjb21wcmVzc2lvblR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfTtcbn1cblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFubm90YXRpb25TdG9yYWdlID0gdm9pZCAwO1xuXG5jbGFzcyBBbm5vdGF0aW9uU3RvcmFnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3N0b3JhZ2UgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fbW9kaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uU2V0TW9kaWZpZWQgPSBudWxsO1xuICAgIHRoaXMub25SZXNldE1vZGlmaWVkID0gbnVsbDtcbiAgfVxuXG4gIGdldE9yQ3JlYXRlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodGhpcy5fc3RvcmFnZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmFnZS5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHNldFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5fc3RvcmFnZS5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1vZGlmaWVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JhZ2Uuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh0aGlzLl9zdG9yYWdlKTtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlLnNpemU7XG4gIH1cblxuICBfc2V0TW9kaWZpZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9tb2RpZmllZCkge1xuICAgICAgdGhpcy5fbW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub25TZXRNb2RpZmllZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub25TZXRNb2RpZmllZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0TW9kaWZpZWQoKSB7XG4gICAgaWYgKHRoaXMuX21vZGlmaWVkKSB7XG4gICAgICB0aGlzLl9tb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub25SZXNldE1vZGlmaWVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5vblJlc2V0TW9kaWZpZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25TdG9yYWdlID0gQW5ub3RhdGlvblN0b3JhZ2U7XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcGlDb21wYXRpYmlsaXR5UGFyYW1zID0gdm9pZCAwO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG5jb25zdCBjb21wYXRpYmlsaXR5UGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbntcbiAgKGZ1bmN0aW9uIGNoZWNrRm9udEZhY2UoKSB7XG4gICAgaWYgKF9pc19ub2RlLmlzTm9kZUpTKSB7XG4gICAgICBjb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVGb250RmFjZSA9IHRydWU7XG4gICAgfVxuICB9KSgpO1xufVxuY29uc3QgYXBpQ29tcGF0aWJpbGl0eVBhcmFtcyA9IE9iamVjdC5mcmVlemUoY29tcGF0aWJpbGl0eVBhcmFtcyk7XG5leHBvcnRzLmFwaUNvbXBhdGliaWxpdHlQYXJhbXMgPSBhcGlDb21wYXRpYmlsaXR5UGFyYW1zO1xuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNhbnZhc0dyYXBoaWNzID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3BhdHRlcm5faGVscGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxMSk7XG5cbnZhciBNSU5fRk9OVF9TSVpFID0gMTY7XG52YXIgTUFYX0ZPTlRfU0laRSA9IDEwMDtcbnZhciBNQVhfR1JPVVBfU0laRSA9IDQwOTY7XG52YXIgTUlOX1dJRFRIX0ZBQ1RPUiA9IDAuNjU7XG52YXIgQ09NUElMRV9UWVBFM19HTFlQSFMgPSB0cnVlO1xudmFyIE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xudmFyIEZVTExfQ0hVTktfSEVJR0hUID0gMTY7XG5cbmZ1bmN0aW9uIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGN0eCkge1xuICBpZiAoIWN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgY3R4Ll9vcmlnaW5hbFNhdmUgPSBjdHguc2F2ZTtcbiAgICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICAgIGN0eC5fb3JpZ2luYWxSb3RhdGUgPSBjdHgucm90YXRlO1xuICAgIGN0eC5fb3JpZ2luYWxTY2FsZSA9IGN0eC5zY2FsZTtcbiAgICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgICBjdHguX29yaWdpbmFsVHJhbnNmb3JtID0gY3R4LnRyYW5zZm9ybTtcbiAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtID0gY3R4LnNldFRyYW5zZm9ybTtcbiAgICBjdHguX3RyYW5zZm9ybU1hdHJpeCA9IGN0eC5fdHJhbnNmb3JtTWF0cml4IHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICBjdHguX3RyYW5zZm9ybVN0YWNrID0gW107XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgXCJtb3pDdXJyZW50VHJhbnNmb3JtXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3R4LCBcIm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlXCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgICB2YXIgYSA9IG1bMF0sXG4gICAgICAgICAgICBiID0gbVsxXSxcbiAgICAgICAgICAgIGMgPSBtWzJdLFxuICAgICAgICAgICAgZCA9IG1bM10sXG4gICAgICAgICAgICBlID0gbVs0XSxcbiAgICAgICAgICAgIGYgPSBtWzVdO1xuICAgICAgICB2YXIgYWRfYmMgPSBhICogZCAtIGIgKiBjO1xuICAgICAgICB2YXIgYmNfYWQgPSBiICogYyAtIGEgKiBkO1xuICAgICAgICByZXR1cm4gW2QgLyBhZF9iYywgYiAvIGJjX2FkLCBjIC8gYmNfYWQsIGEgLyBhZF9iYywgKGQgKiBlIC0gYyAqIGYpIC8gYmNfYWQsIChiICogZSAtIGEgKiBmKSAvIGFkX2JjXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICAgIHZhciBvbGQgPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICAgIHRoaXMuX3RyYW5zZm9ybVN0YWNrLnB1c2gob2xkKTtcblxuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gb2xkLnNsaWNlKDAsIDYpO1xuXG4gICAgICB0aGlzLl9vcmlnaW5hbFNhdmUoKTtcbiAgICB9O1xuXG4gICAgY3R4LnJlc3RvcmUgPSBmdW5jdGlvbiBjdHhSZXN0b3JlKCkge1xuICAgICAgdmFyIHByZXYgPSB0aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtcblxuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gcHJldjtcblxuICAgICAgICB0aGlzLl9vcmlnaW5hbFJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGN0eFRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcblxuICAgICAgdGhpcy5fb3JpZ2luYWxUcmFuc2xhdGUoeCwgeSk7XG4gICAgfTtcblxuICAgIGN0eC5zY2FsZSA9IGZ1bmN0aW9uIGN0eFNjYWxlKHgsIHkpIHtcbiAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgbVswXSA9IG1bMF0gKiB4O1xuICAgICAgbVsxXSA9IG1bMV0gKiB4O1xuICAgICAgbVsyXSA9IG1bMl0gKiB5O1xuICAgICAgbVszXSA9IG1bM10gKiB5O1xuXG4gICAgICB0aGlzLl9vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICAgIH07XG5cbiAgICBjdHgudHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBhICsgbVsyXSAqIGIsIG1bMV0gKiBhICsgbVszXSAqIGIsIG1bMF0gKiBjICsgbVsyXSAqIGQsIG1bMV0gKiBjICsgbVszXSAqIGQsIG1bMF0gKiBlICsgbVsyXSAqIGYgKyBtWzRdLCBtWzFdICogZSArIG1bM10gKiBmICsgbVs1XV07XG5cbiAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gICAgfTtcblxuICAgIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuXG4gICAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgIH07XG5cbiAgICBjdHgucm90YXRlID0gZnVuY3Rpb24gY3R4Um90YXRlKGFuZ2xlKSB7XG4gICAgICB2YXIgY29zVmFsdWUgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICB2YXIgc2luVmFsdWUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IFttWzBdICogY29zVmFsdWUgKyBtWzJdICogc2luVmFsdWUsIG1bMV0gKiBjb3NWYWx1ZSArIG1bM10gKiBzaW5WYWx1ZSwgbVswXSAqIC1zaW5WYWx1ZSArIG1bMl0gKiBjb3NWYWx1ZSwgbVsxXSAqIC1zaW5WYWx1ZSArIG1bM10gKiBjb3NWYWx1ZSwgbVs0XSwgbVs1XV07XG5cbiAgICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYWNoZWRDYW52YXNlcyA9IGZ1bmN0aW9uIENhY2hlZENhbnZhc2VzQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ2FjaGVkQ2FudmFzZXMoY2FudmFzRmFjdG9yeSkge1xuICAgIHRoaXMuY2FudmFzRmFjdG9yeSA9IGNhbnZhc0ZhY3Rvcnk7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBDYWNoZWRDYW52YXNlcy5wcm90b3R5cGUgPSB7XG4gICAgZ2V0Q2FudmFzOiBmdW5jdGlvbiBDYWNoZWRDYW52YXNlc19nZXRDYW52YXMoaWQsIHdpZHRoLCBoZWlnaHQsIHRyYWNrVHJhbnNmb3JtKSB7XG4gICAgICB2YXIgY2FudmFzRW50cnk7XG5cbiAgICAgIGlmICh0aGlzLmNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYWNoZVtpZF07XG4gICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNhbnZhc0VudHJ5LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmNhY2hlW2lkXSA9IGNhbnZhc0VudHJ5O1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzRW50cnkuY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYW52YXNFbnRyeTtcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgIHZhciBjYW52YXNFbnRyeSA9IHRoaXMuY2FjaGVbaWRdO1xuICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkuZGVzdHJveShjYW52YXNFbnRyeSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIENhY2hlZENhbnZhc2VzO1xufSgpO1xuXG5mdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gIHZhciBQT0lOVF9UT19QUk9DRVNTX0xJTUlUID0gMTAwMDtcbiAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aCxcbiAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICB2YXIgaSxcbiAgICAgIGosXG4gICAgICBqMCxcbiAgICAgIHdpZHRoMSA9IHdpZHRoICsgMTtcbiAgdmFyIHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gIHZhciBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICB2YXIgbGluZVNpemUgPSB3aWR0aCArIDcgJiB+NyxcbiAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGxpbmVTaXplICogaGVpZ2h0KSxcbiAgICAgIHBvcyA9IDAsXG4gICAgICBpaTtcblxuICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgbWFzayA9IDEyOCxcbiAgICAgICAgZWxlbSA9IGRhdGEwW2ldO1xuXG4gICAgd2hpbGUgKG1hc2sgPiAwKSB7XG4gICAgICBkYXRhW3BvcysrXSA9IGVsZW0gJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgIG1hc2sgPj49IDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvdW50ID0gMDtcbiAgcG9zID0gMDtcblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzWzBdID0gMTtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICBpZiAoZGF0YVtwb3NdICE9PSBkYXRhW3BvcyArIDFdKSB7XG4gICAgICBwb2ludHNbal0gPSBkYXRhW3Bvc10gPyAyIDogMTtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgcG9zKys7XG4gIH1cblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2pdID0gMjtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgcG9zID0gaSAqIGxpbmVTaXplO1xuICAgIGowID0gaSAqIHdpZHRoMTtcblxuICAgIGlmIChkYXRhW3BvcyAtIGxpbmVTaXplXSAhPT0gZGF0YVtwb3NdKSB7XG4gICAgICBwb2ludHNbajBdID0gZGF0YVtwb3NdID8gMSA6IDg7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIHZhciBzdW0gPSAoZGF0YVtwb3NdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemVdID8gOCA6IDApO1xuXG4gICAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgIHN1bSA9IChzdW0gPj4gMikgKyAoZGF0YVtwb3MgKyAxXSA/IDQgOiAwKSArIChkYXRhW3BvcyAtIGxpbmVTaXplICsgMV0gPyA4IDogMCk7XG5cbiAgICAgIGlmIChQT0lOVF9UWVBFU1tzdW1dKSB7XG4gICAgICAgIHBvaW50c1tqMCArIGpdID0gUE9JTlRfVFlQRVNbc3VtXTtcbiAgICAgICAgKytjb3VudDtcbiAgICAgIH1cblxuICAgICAgcG9zKys7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgIHBvaW50c1tqMCArIGpdID0gZGF0YVtwb3NdID8gMiA6IDQ7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBvcyA9IGxpbmVTaXplICogKGhlaWdodCAtIDEpO1xuICBqMCA9IGkgKiB3aWR0aDE7XG5cbiAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgIHBvaW50c1tqMF0gPSA4O1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgIHBvaW50c1tqMCArIGpdID0gZGF0YVtwb3NdID8gNCA6IDg7XG4gICAgICArK2NvdW50O1xuICAgIH1cblxuICAgIHBvcysrO1xuICB9XG5cbiAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgIHBvaW50c1tqMCArIGpdID0gNDtcbiAgICArK2NvdW50O1xuICB9XG5cbiAgaWYgKGNvdW50ID4gUE9JTlRfVE9fUFJPQ0VTU19MSU1JVCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHN0ZXBzID0gbmV3IEludDMyQXJyYXkoWzAsIHdpZHRoMSwgLTEsIDAsIC13aWR0aDEsIDAsIDAsIDAsIDFdKTtcbiAgdmFyIG91dGxpbmVzID0gW107XG5cbiAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgIHZhciBwID0gaSAqIHdpZHRoMTtcbiAgICB2YXIgZW5kID0gcCArIHdpZHRoO1xuXG4gICAgd2hpbGUgKHAgPCBlbmQgJiYgIXBvaW50c1twXSkge1xuICAgICAgcCsrO1xuICAgIH1cblxuICAgIGlmIChwID09PSBlbmQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjb29yZHMgPSBbcCAlIHdpZHRoMSwgaV07XG4gICAgdmFyIHR5cGUgPSBwb2ludHNbcF0sXG4gICAgICAgIHAwID0gcCxcbiAgICAgICAgcHA7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgc3RlcCA9IHN0ZXBzW3R5cGVdO1xuXG4gICAgICBkbyB7XG4gICAgICAgIHAgKz0gc3RlcDtcbiAgICAgIH0gd2hpbGUgKCFwb2ludHNbcF0pO1xuXG4gICAgICBwcCA9IHBvaW50c1twXTtcblxuICAgICAgaWYgKHBwICE9PSA1ICYmIHBwICE9PSAxMCkge1xuICAgICAgICB0eXBlID0gcHA7XG4gICAgICAgIHBvaW50c1twXSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gcHAgJiAweDMzICogdHlwZSA+PiA0O1xuICAgICAgICBwb2ludHNbcF0gJj0gdHlwZSA+PiAyIHwgdHlwZSA8PCAyO1xuICAgICAgfVxuXG4gICAgICBjb29yZHMucHVzaChwICUgd2lkdGgxKTtcbiAgICAgIGNvb3Jkcy5wdXNoKHAgLyB3aWR0aDEgfCAwKTtcblxuICAgICAgaWYgKCFwb2ludHNbcF0pIHtcbiAgICAgICAgLS1jb3VudDtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChwMCAhPT0gcCk7XG5cbiAgICBvdXRsaW5lcy5wdXNoKGNvb3Jkcyk7XG4gICAgLS1pO1xuICB9XG5cbiAgdmFyIGRyYXdPdXRsaW5lID0gZnVuY3Rpb24gKGMpIHtcbiAgICBjLnNhdmUoKTtcbiAgICBjLnNjYWxlKDEgLyB3aWR0aCwgLTEgLyBoZWlnaHQpO1xuICAgIGMudHJhbnNsYXRlKDAsIC1oZWlnaHQpO1xuICAgIGMuYmVnaW5QYXRoKCk7XG5cbiAgICBmb3IgKGxldCBrID0gMCwga2sgPSBvdXRsaW5lcy5sZW5ndGg7IGsgPCBrazsgaysrKSB7XG4gICAgICB2YXIgbyA9IG91dGxpbmVzW2tdO1xuICAgICAgYy5tb3ZlVG8ob1swXSwgb1sxXSk7XG5cbiAgICAgIGZvciAobGV0IGwgPSAyLCBsbCA9IG8ubGVuZ3RoOyBsIDwgbGw7IGwgKz0gMikge1xuICAgICAgICBjLmxpbmVUbyhvW2xdLCBvW2wgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYy5maWxsKCk7XG4gICAgYy5iZWdpblBhdGgoKTtcbiAgICBjLnJlc3RvcmUoKTtcbiAgfTtcblxuICByZXR1cm4gZHJhd091dGxpbmU7XG59XG5cbnZhciBDYW52YXNFeHRyYVN0YXRlID0gZnVuY3Rpb24gQ2FudmFzRXh0cmFTdGF0ZUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGUoKSB7XG4gICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICB0aGlzLnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5saW5lWCA9IDA7XG4gICAgdGhpcy5saW5lWSA9IDA7XG4gICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICB0aGlzLmZpbGxDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLnBhdHRlcm5GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICB0aGlzLmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB0aGlzLnJlc3VtZVNNYXNrQ3R4ID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zZmVyTWFwcyA9IG51bGw7XG4gIH1cblxuICBDYW52YXNFeHRyYVN0YXRlLnByb3RvdHlwZSA9IHtcbiAgICBjbG9uZTogZnVuY3Rpb24gQ2FudmFzRXh0cmFTdGF0ZV9jbG9uZSgpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFBvaW50OiBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlX3NldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICB0aGlzLnggPSB4O1xuICAgICAgdGhpcy55ID0geTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBDYW52YXNFeHRyYVN0YXRlO1xufSgpO1xuXG52YXIgQ2FudmFzR3JhcGhpY3MgPSBmdW5jdGlvbiBDYW52YXNHcmFwaGljc0Nsb3N1cmUoKSB7XG4gIHZhciBFWEVDVVRJT05fVElNRSA9IDE1O1xuICB2YXIgRVhFQ1VUSU9OX1NURVBTID0gMTA7XG5cbiAgZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3MoY2FudmFzQ3R4LCBjb21tb25PYmpzLCBvYmpzLCBjYW52YXNGYWN0b3J5LCB3ZWJHTENvbnRleHQsIGltYWdlTGF5ZXIsIG9wdGlvbmFsQ29udGVudENvbmZpZykge1xuICAgIHRoaXMuY3R4ID0gY2FudmFzQ3R4O1xuICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKCk7XG4gICAgdGhpcy5zdGF0ZVN0YWNrID0gW107XG4gICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5yZXMgPSBudWxsO1xuICAgIHRoaXMueG9ianMgPSBudWxsO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7XG4gICAgdGhpcy5vYmpzID0gb2JqcztcbiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgIHRoaXMud2ViR0xDb250ZXh0ID0gd2ViR0xDb250ZXh0O1xuICAgIHRoaXMuaW1hZ2VMYXllciA9IGltYWdlTGF5ZXI7XG4gICAgdGhpcy5ncm91cFN0YWNrID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgdGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICB0aGlzLmdyb3VwTGV2ZWwgPSAwO1xuICAgIHRoaXMuc21hc2tTdGFjayA9IFtdO1xuICAgIHRoaXMuc21hc2tDb3VudGVyID0gMDtcbiAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgdGhpcy5jb250ZW50VmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sgPSBbXTtcbiAgICB0aGlzLm9wdGlvbmFsQ29udGVudENvbmZpZyA9IG9wdGlvbmFsQ29udGVudENvbmZpZztcbiAgICB0aGlzLmNhY2hlZENhbnZhc2VzID0gbmV3IENhY2hlZENhbnZhc2VzKHRoaXMuY2FudmFzRmFjdG9yeSk7XG5cbiAgICBpZiAoY2FudmFzQ3R4KSB7XG4gICAgICBhZGRDb250ZXh0Q3VycmVudFRyYW5zZm9ybShjYW52YXNDdHgpO1xuICAgIH1cblxuICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKGN0eCwgaW1nRGF0YSwgdHJhbnNmZXJNYXBzID0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgSW1hZ2VEYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoaW1nRGF0YSwgMCwgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgdmFyIHBhcnRpYWxDaHVua0hlaWdodCA9IGhlaWdodCAlIEZVTExfQ0hVTktfSEVJR0hUO1xuICAgIHZhciBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICB2YXIgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gICAgdmFyIGNodW5rSW1nRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgICB2YXIgc3JjUG9zID0gMCxcbiAgICAgICAgZGVzdFBvcztcbiAgICB2YXIgc3JjID0gaW1nRGF0YS5kYXRhO1xuICAgIHZhciBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7XG4gICAgdmFyIGksIGosIHRoaXNDaHVua0hlaWdodCwgZWxlbXNJblRoaXNDaHVuaztcbiAgICBsZXQgdHJhbnNmZXJNYXBSZWQsIHRyYW5zZmVyTWFwR3JlZW4sIHRyYW5zZmVyTWFwQmx1ZSwgdHJhbnNmZXJNYXBHcmF5O1xuXG4gICAgaWYgKHRyYW5zZmVyTWFwcykge1xuICAgICAgc3dpdGNoICh0cmFuc2Zlck1hcHMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0cmFuc2Zlck1hcFJlZCA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgICB0cmFuc2Zlck1hcEdyZWVuID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICAgIHRyYW5zZmVyTWFwQmx1ZSA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgICB0cmFuc2Zlck1hcEdyYXkgPSB0cmFuc2Zlck1hcHNbMF07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHRyYW5zZmVyTWFwUmVkID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICAgIHRyYW5zZmVyTWFwR3JlZW4gPSB0cmFuc2Zlck1hcHNbMV07XG4gICAgICAgICAgdHJhbnNmZXJNYXBCbHVlID0gdHJhbnNmZXJNYXBzWzJdO1xuICAgICAgICAgIHRyYW5zZmVyTWFwR3JheSA9IHRyYW5zZmVyTWFwc1szXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFApIHtcbiAgICAgIHZhciBzcmNMZW5ndGggPSBzcmMuYnl0ZUxlbmd0aDtcbiAgICAgIHZhciBkZXN0MzIgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIsIDAsIGRlc3QuYnl0ZUxlbmd0aCA+PiAyKTtcbiAgICAgIHZhciBkZXN0MzJEYXRhTGVuZ3RoID0gZGVzdDMyLmxlbmd0aDtcbiAgICAgIHZhciBmdWxsU3JjRGlmZiA9IHdpZHRoICsgNyA+PiAzO1xuICAgICAgdmFyIHdoaXRlID0gMHhmZmZmZmZmZjtcbiAgICAgIHZhciBibGFjayA9IF91dGlsLklzTGl0dGxlRW5kaWFuQ2FjaGVkLnZhbHVlID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmY7XG5cbiAgICAgIGlmICh0cmFuc2Zlck1hcEdyYXkpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyTWFwR3JheVswXSA9PT0gMHhmZiAmJiB0cmFuc2Zlck1hcEdyYXlbMHhmZl0gPT09IDApIHtcbiAgICAgICAgICBbd2hpdGUsIGJsYWNrXSA9IFtibGFjaywgd2hpdGVdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7XG4gICAgICAgIHRoaXNDaHVua0hlaWdodCA9IGkgPCBmdWxsQ2h1bmtzID8gRlVMTF9DSFVOS19IRUlHSFQgOiBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgICAgIGRlc3RQb3MgPSAwO1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgICAgIHZhciBzcmNEaWZmID0gc3JjTGVuZ3RoIC0gc3JjUG9zO1xuICAgICAgICAgIGxldCBrID0gMDtcbiAgICAgICAgICB2YXIga0VuZCA9IHNyY0RpZmYgPiBmdWxsU3JjRGlmZiA/IHdpZHRoIDogc3JjRGlmZiAqIDggLSA3O1xuICAgICAgICAgIHZhciBrRW5kVW5yb2xsZWQgPSBrRW5kICYgfjc7XG4gICAgICAgICAgdmFyIG1hc2sgPSAwO1xuICAgICAgICAgIHZhciBzcmNCeXRlID0gMDtcblxuICAgICAgICAgIGZvciAoOyBrIDwga0VuZFVucm9sbGVkOyBrICs9IDgpIHtcbiAgICAgICAgICAgIHNyY0J5dGUgPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDY0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDMyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDggPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgNCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDEgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoOyBrIDwga0VuZDsgaysrKSB7XG4gICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICBzcmNCeXRlID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgbWFzayA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChkZXN0UG9zIDwgZGVzdDMyRGF0YUxlbmd0aCkge1xuICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCkge1xuICAgICAgY29uc3QgaGFzVHJhbnNmZXJNYXBzID0gISEodHJhbnNmZXJNYXBSZWQgfHwgdHJhbnNmZXJNYXBHcmVlbiB8fCB0cmFuc2Zlck1hcEJsdWUpO1xuICAgICAgaiA9IDA7XG4gICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiBGVUxMX0NIVU5LX0hFSUdIVCAqIDQ7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmdWxsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY1Bvcywgc3JjUG9zICsgZWxlbXNJblRoaXNDaHVuaykpO1xuICAgICAgICBzcmNQb3MgKz0gZWxlbXNJblRoaXNDaHVuaztcblxuICAgICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBlbGVtc0luVGhpc0NodW5rOyBrICs9IDQpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zlck1hcFJlZCkge1xuICAgICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTWFwR3JlZW4pIHtcbiAgICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTWFwQmx1ZSkge1xuICAgICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgICBqICs9IEZVTExfQ0hVTktfSEVJR0hUO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IHRvdGFsQ2h1bmtzKSB7XG4gICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHBhcnRpYWxDaHVua0hlaWdodCAqIDQ7XG4gICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcblxuICAgICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBlbGVtc0luVGhpc0NodW5rOyBrICs9IDQpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zlck1hcFJlZCkge1xuICAgICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTWFwR3JlZW4pIHtcbiAgICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRyYW5zZmVyTWFwQmx1ZSkge1xuICAgICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQKSB7XG4gICAgICBjb25zdCBoYXNUcmFuc2Zlck1hcHMgPSAhISh0cmFuc2Zlck1hcFJlZCB8fCB0cmFuc2Zlck1hcEdyZWVuIHx8IHRyYW5zZmVyTWFwQmx1ZSk7XG4gICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHRoaXNDaHVua0hlaWdodDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICAgIHRoaXNDaHVua0hlaWdodCA9IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiB0aGlzQ2h1bmtIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0UG9zID0gMDtcblxuICAgICAgICBmb3IgKGogPSBlbGVtc0luVGhpc0NodW5rOyBqLS07KSB7XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc1RyYW5zZmVyTWFwcykge1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGVzdFBvczsgayArPSA0KSB7XG4gICAgICAgICAgICBpZiAodHJhbnNmZXJNYXBSZWQpIHtcbiAgICAgICAgICAgICAgZGVzdFtrICsgMF0gPSB0cmFuc2Zlck1hcFJlZFtkZXN0W2sgKyAwXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0cmFuc2Zlck1hcEdyZWVuKSB7XG4gICAgICAgICAgICAgIGRlc3RbayArIDFdID0gdHJhbnNmZXJNYXBHcmVlbltkZXN0W2sgKyAxXV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0cmFuc2Zlck1hcEJsdWUpIHtcbiAgICAgICAgICAgICAgZGVzdFtrICsgMl0gPSB0cmFuc2Zlck1hcEJsdWVbZGVzdFtrICsgMl1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBpbWFnZSBraW5kOiAke2ltZ0RhdGEua2luZH1gKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwdXRCaW5hcnlJbWFnZU1hc2soY3R4LCBpbWdEYXRhKSB7XG4gICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgdmFyIHBhcnRpYWxDaHVua0hlaWdodCA9IGhlaWdodCAlIEZVTExfQ0hVTktfSEVJR0hUO1xuICAgIHZhciBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICB2YXIgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gICAgdmFyIGNodW5rSW1nRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgICB2YXIgc3JjUG9zID0gMDtcbiAgICB2YXIgc3JjID0gaW1nRGF0YS5kYXRhO1xuICAgIHZhciBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgIHZhciB0aGlzQ2h1bmtIZWlnaHQgPSBpIDwgZnVsbENodW5rcyA/IEZVTExfQ0hVTktfSEVJR0hUIDogcGFydGlhbENodW5rSGVpZ2h0O1xuICAgICAgdmFyIGRlc3RQb3MgPSAzO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXNDaHVua0hlaWdodDsgaisrKSB7XG4gICAgICAgIHZhciBtYXNrID0gMDtcblxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHdpZHRoOyBrKyspIHtcbiAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgIHZhciBlbGVtID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVzdFtkZXN0UG9zXSA9IGVsZW0gJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgICBkZXN0UG9zICs9IDQ7XG4gICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaSAqIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5Q3R4U3RhdGUoc291cmNlQ3R4LCBkZXN0Q3R4KSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBbXCJzdHJva2VTdHlsZVwiLCBcImZpbGxTdHlsZVwiLCBcImZpbGxSdWxlXCIsIFwiZ2xvYmFsQWxwaGFcIiwgXCJsaW5lV2lkdGhcIiwgXCJsaW5lQ2FwXCIsIFwibGluZUpvaW5cIiwgXCJtaXRlckxpbWl0XCIsIFwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uXCIsIFwiZm9udFwiXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgICAgaWYgKHNvdXJjZUN0eFtwcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZXN0Q3R4W3Byb3BlcnR5XSA9IHNvdXJjZUN0eFtwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZUN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0Q3R4LnNldExpbmVEYXNoKHNvdXJjZUN0eC5nZXRMaW5lRGFzaCgpKTtcbiAgICAgIGRlc3RDdHgubGluZURhc2hPZmZzZXQgPSBzb3VyY2VDdHgubGluZURhc2hPZmZzZXQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRDdHhUb0RlZmF1bHQoY3R4KSB7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjMDAwMDAwXCI7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwiIzAwMDAwMFwiO1xuICAgIGN0eC5maWxsUnVsZSA9IFwibm9uemVyb1wiO1xuICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgY3R4LmxpbmVDYXAgPSBcImJ1dHRcIjtcbiAgICBjdHgubGluZUpvaW4gPSBcIm1pdGVyXCI7XG4gICAgY3R4Lm1pdGVyTGltaXQgPSAxMDtcbiAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2Utb3ZlclwiO1xuICAgIGN0eC5mb250ID0gXCIxMHB4IHNhbnMtc2VyaWZcIjtcblxuICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9zZVNNYXNrQmFja2Ryb3AoYnl0ZXMsIHIwLCBnMCwgYjApIHtcbiAgICB2YXIgbGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgdmFyIGFscGhhID0gYnl0ZXNbaV07XG5cbiAgICAgIGlmIChhbHBoYSA9PT0gMCkge1xuICAgICAgICBieXRlc1tpIC0gM10gPSByMDtcbiAgICAgICAgYnl0ZXNbaSAtIDJdID0gZzA7XG4gICAgICAgIGJ5dGVzW2kgLSAxXSA9IGIwO1xuICAgICAgfSBlbHNlIGlmIChhbHBoYSA8IDI1NSkge1xuICAgICAgICB2YXIgYWxwaGFfID0gMjU1IC0gYWxwaGE7XG4gICAgICAgIGJ5dGVzW2kgLSAzXSA9IGJ5dGVzW2kgLSAzXSAqIGFscGhhICsgcjAgKiBhbHBoYV8gPj4gODtcbiAgICAgICAgYnl0ZXNbaSAtIDJdID0gYnl0ZXNbaSAtIDJdICogYWxwaGEgKyBnMCAqIGFscGhhXyA+PiA4O1xuICAgICAgICBieXRlc1tpIC0gMV0gPSBieXRlc1tpIC0gMV0gKiBhbHBoYSArIGIwICogYWxwaGFfID4+IDg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgICB2YXIgbGVuZ3RoID0gbWFza0RhdGEubGVuZ3RoO1xuICAgIHZhciBzY2FsZSA9IDEgLyAyNTU7XG5cbiAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgYWxwaGEgPSB0cmFuc2Zlck1hcCA/IHRyYW5zZmVyTWFwW21hc2tEYXRhW2ldXSA6IG1hc2tEYXRhW2ldO1xuICAgICAgbGF5ZXJEYXRhW2ldID0gbGF5ZXJEYXRhW2ldICogYWxwaGEgKiBzY2FsZSB8IDA7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9zZVNNYXNrTHVtaW5vc2l0eShtYXNrRGF0YSwgbGF5ZXJEYXRhLCB0cmFuc2Zlck1hcCkge1xuICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICB2YXIgeSA9IG1hc2tEYXRhW2kgLSAzXSAqIDc3ICsgbWFza0RhdGFbaSAtIDJdICogMTUyICsgbWFza0RhdGFbaSAtIDFdICogMjg7XG4gICAgICBsYXllckRhdGFbaV0gPSB0cmFuc2Zlck1hcCA/IGxheWVyRGF0YVtpXSAqIHRyYW5zZmVyTWFwW3kgPj4gOF0gPj4gOCA6IGxheWVyRGF0YVtpXSAqIHkgPj4gMTY7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgd2lkdGgsIGhlaWdodCwgc3VidHlwZSwgYmFja2Ryb3AsIHRyYW5zZmVyTWFwKSB7XG4gICAgdmFyIGhhc0JhY2tkcm9wID0gISFiYWNrZHJvcDtcbiAgICB2YXIgcjAgPSBoYXNCYWNrZHJvcCA/IGJhY2tkcm9wWzBdIDogMDtcbiAgICB2YXIgZzAgPSBoYXNCYWNrZHJvcCA/IGJhY2tkcm9wWzFdIDogMDtcbiAgICB2YXIgYjAgPSBoYXNCYWNrZHJvcCA/IGJhY2tkcm9wWzJdIDogMDtcbiAgICB2YXIgY29tcG9zZUZuO1xuXG4gICAgaWYgKHN1YnR5cGUgPT09IFwiTHVtaW5vc2l0eVwiKSB7XG4gICAgICBjb21wb3NlRm4gPSBjb21wb3NlU01hc2tMdW1pbm9zaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb3NlRm4gPSBjb21wb3NlU01hc2tBbHBoYTtcbiAgICB9XG5cbiAgICB2YXIgUElYRUxTX1RPX1BST0NFU1MgPSAxMDQ4NTc2O1xuICAgIHZhciBjaHVua1NpemUgPSBNYXRoLm1pbihoZWlnaHQsIE1hdGguY2VpbChQSVhFTFNfVE9fUFJPQ0VTUyAvIHdpZHRoKSk7XG5cbiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArPSBjaHVua1NpemUpIHtcbiAgICAgIHZhciBjaHVua0hlaWdodCA9IE1hdGgubWluKGNodW5rU2l6ZSwgaGVpZ2h0IC0gcm93KTtcbiAgICAgIHZhciBtYXNrRGF0YSA9IG1hc2tDdHguZ2V0SW1hZ2VEYXRhKDAsIHJvdywgd2lkdGgsIGNodW5rSGVpZ2h0KTtcbiAgICAgIHZhciBsYXllckRhdGEgPSBsYXllckN0eC5nZXRJbWFnZURhdGEoMCwgcm93LCB3aWR0aCwgY2h1bmtIZWlnaHQpO1xuXG4gICAgICBpZiAoaGFzQmFja2Ryb3ApIHtcbiAgICAgICAgY29tcG9zZVNNYXNrQmFja2Ryb3AobWFza0RhdGEuZGF0YSwgcjAsIGcwLCBiMCk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvc2VGbihtYXNrRGF0YS5kYXRhLCBsYXllckRhdGEuZGF0YSwgdHJhbnNmZXJNYXApO1xuICAgICAgbWFza0N0eC5wdXRJbWFnZURhdGEobGF5ZXJEYXRhLCAwLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBvc2VTTWFzayhjdHgsIHNtYXNrLCBsYXllckN0eCwgd2ViR0xDb250ZXh0KSB7XG4gICAgdmFyIG1hc2sgPSBzbWFzay5jYW52YXM7XG4gICAgdmFyIG1hc2tDdHggPSBzbWFzay5jb250ZXh0O1xuICAgIGN0eC5zZXRUcmFuc2Zvcm0oc21hc2suc2NhbGVYLCAwLCAwLCBzbWFzay5zY2FsZVksIHNtYXNrLm9mZnNldFgsIHNtYXNrLm9mZnNldFkpO1xuICAgIHZhciBiYWNrZHJvcCA9IHNtYXNrLmJhY2tkcm9wIHx8IG51bGw7XG5cbiAgICBpZiAoIXNtYXNrLnRyYW5zZmVyTWFwICYmIHdlYkdMQ29udGV4dC5pc0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGNvbXBvc2VkID0gd2ViR0xDb250ZXh0LmNvbXBvc2VTTWFzayh7XG4gICAgICAgIGxheWVyOiBsYXllckN0eC5jYW52YXMsXG4gICAgICAgIG1hc2ssXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBzdWJ0eXBlOiBzbWFzay5zdWJ0eXBlLFxuICAgICAgICAgIGJhY2tkcm9wXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UoY29tcG9zZWQsIHNtYXNrLm9mZnNldFgsIHNtYXNrLm9mZnNldFkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGdlbmVyaWNDb21wb3NlU01hc2sobWFza0N0eCwgbGF5ZXJDdHgsIG1hc2sud2lkdGgsIG1hc2suaGVpZ2h0LCBzbWFzay5zdWJ0eXBlLCBiYWNrZHJvcCwgc21hc2sudHJhbnNmZXJNYXApO1xuICAgIGN0eC5kcmF3SW1hZ2UobWFzaywgMCwgMCk7XG4gIH1cblxuICB2YXIgTElORV9DQVBfU1RZTEVTID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdO1xuICB2YXIgTElORV9KT0lOX1NUWUxFUyA9IFtcIm1pdGVyXCIsIFwicm91bmRcIiwgXCJiZXZlbFwiXTtcbiAgdmFyIE5PUk1BTF9DTElQID0ge307XG4gIHZhciBFT19DTElQID0ge307XG4gIENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZSA9IHtcbiAgICBiZWdpbkRyYXdpbmcoe1xuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdmlld3BvcnQsXG4gICAgICB0cmFuc3BhcmVuY3kgPSBmYWxzZSxcbiAgICAgIGJhY2tncm91bmQgPSBudWxsXG4gICAgfSkge1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoO1xuICAgICAgdmFyIGhlaWdodCA9IHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQ7XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kIHx8IFwicmdiKDI1NSwgMjU1LCAyNTUpXCI7XG4gICAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcblxuICAgICAgaWYgKHRyYW5zcGFyZW5jeSkge1xuICAgICAgICB2YXIgdHJhbnNwYXJlbnRDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcInRyYW5zcGFyZW50XCIsIHdpZHRoLCBoZWlnaHQsIHRydWUpO1xuICAgICAgICB0aGlzLmNvbXBvc2l0ZUN0eCA9IHRoaXMuY3R4O1xuICAgICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gdHJhbnNwYXJlbnRDYW52YXMuY2FudmFzO1xuICAgICAgICB0aGlzLmN0eCA9IHRyYW5zcGFyZW50Q2FudmFzLmNvbnRleHQ7XG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCB0aGlzLmNvbXBvc2l0ZUN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgcmVzZXRDdHhUb0RlZmF1bHQodGhpcy5jdHgpO1xuXG4gICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgdHJhbnNmb3JtKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCB2aWV3cG9ydC50cmFuc2Zvcm0pO1xuICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpO1xuXG4gICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VMYXllci5iZWdpbkxheW91dCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBleGVjdXRlT3BlcmF0b3JMaXN0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19leGVjdXRlT3BlcmF0b3JMaXN0KG9wZXJhdG9yTGlzdCwgZXhlY3V0aW9uU3RhcnRJZHgsIGNvbnRpbnVlQ2FsbGJhY2ssIHN0ZXBwZXIpIHtcbiAgICAgIHZhciBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgdmFyIGZuQXJyYXkgPSBvcGVyYXRvckxpc3QuZm5BcnJheTtcbiAgICAgIHZhciBpID0gZXhlY3V0aW9uU3RhcnRJZHggfHwgMDtcbiAgICAgIHZhciBhcmdzQXJyYXlMZW4gPSBhcmdzQXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJnc0FycmF5TGVuID09PSBpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2h1bmtPcGVyYXRpb25zID0gYXJnc0FycmF5TGVuIC0gaSA+IEVYRUNVVElPTl9TVEVQUyAmJiB0eXBlb2YgY29udGludWVDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiO1xuICAgICAgdmFyIGVuZFRpbWUgPSBjaHVua09wZXJhdGlvbnMgPyBEYXRlLm5vdygpICsgRVhFQ1VUSU9OX1RJTUUgOiAwO1xuICAgICAgdmFyIHN0ZXBzID0gMDtcbiAgICAgIHZhciBjb21tb25PYmpzID0gdGhpcy5jb21tb25PYmpzO1xuICAgICAgdmFyIG9ianMgPSB0aGlzLm9ianM7XG4gICAgICB2YXIgZm5JZDtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHN0ZXBwZXIgIT09IHVuZGVmaW5lZCAmJiBpID09PSBzdGVwcGVyLm5leHRCcmVha1BvaW50KSB7XG4gICAgICAgICAgc3RlcHBlci5icmVha0l0KGksIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm5JZCA9IGZuQXJyYXlbaV07XG5cbiAgICAgICAgaWYgKGZuSWQgIT09IF91dGlsLk9QUy5kZXBlbmRlbmN5KSB7XG4gICAgICAgICAgdGhpc1tmbklkXS5hcHBseSh0aGlzLCBhcmdzQXJyYXlbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwT2JqSWQgb2YgYXJnc0FycmF5W2ldKSB7XG4gICAgICAgICAgICBjb25zdCBvYmpzUG9vbCA9IGRlcE9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IGNvbW1vbk9ianMgOiBvYmpzO1xuXG4gICAgICAgICAgICBpZiAoIW9ianNQb29sLmhhcyhkZXBPYmpJZCkpIHtcbiAgICAgICAgICAgICAgb2Jqc1Bvb2wuZ2V0KGRlcE9iaklkLCBjb250aW51ZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuXG4gICAgICAgIGlmIChpID09PSBhcmdzQXJyYXlMZW4pIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua09wZXJhdGlvbnMgJiYgKytzdGVwcyA+IEVYRUNVVElPTl9TVEVQUykge1xuICAgICAgICAgIGlmIChEYXRlLm5vdygpID4gZW5kVGltZSkge1xuICAgICAgICAgICAgY29udGludWVDYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RlcHMgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmREcmF3aW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmREcmF3aW5nKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVuZFNNYXNrR3JvdXAoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgICBpZiAodGhpcy50cmFuc3BhcmVudENhbnZhcykge1xuICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY29tcG9zaXRlQ3R4O1xuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMudHJhbnNwYXJlbnRDYW52YXMsIDAsIDApO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7XG4gICAgICB0aGlzLndlYkdMQ29udGV4dC5jbGVhcigpO1xuXG4gICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VMYXllci5lbmRMYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldExpbmVXaWR0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICB9LFxuICAgIHNldExpbmVDYXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVDYXAoc3R5bGUpIHtcbiAgICAgIHRoaXMuY3R4LmxpbmVDYXAgPSBMSU5FX0NBUF9TVFlMRVNbc3R5bGVdO1xuICAgIH0sXG4gICAgc2V0TGluZUpvaW46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICB0aGlzLmN0eC5saW5lSm9pbiA9IExJTkVfSk9JTl9TVFlMRVNbc3R5bGVdO1xuICAgIH0sXG4gICAgc2V0TWl0ZXJMaW1pdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0TWl0ZXJMaW1pdChsaW1pdCkge1xuICAgICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgIH0sXG4gICAgc2V0RGFzaDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0RGFzaChkYXNoQXJyYXksIGRhc2hQaGFzZSkge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hBcnJheSk7XG4gICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IGRhc2hQaGFzZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0UmVuZGVyaW5nSW50ZW50KGludGVudCkge30sXG5cbiAgICBzZXRGbGF0bmVzcyhmbGF0bmVzcykge30sXG5cbiAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHN0YXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1tpXTtcbiAgICAgICAgdmFyIGtleSA9IHN0YXRlWzBdO1xuICAgICAgICB2YXIgdmFsdWUgPSBzdGF0ZVsxXTtcblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgXCJMV1wiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTENcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUNhcCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJNTFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RGFzaCh2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9udCh2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJCTVwiOlxuICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJTTWFza1wiOlxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykge1xuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZVN0YWNrW3RoaXMuc3RhdGVTdGFjay5sZW5ndGggLSAxXS5hY3RpdmVTTWFzayA9PT0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kU01hc2tHcm91cCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kU01hc2tHcm91cCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayA9IHZhbHVlID8gdGhpcy50ZW1wU01hc2sgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICAgICAgICAgIHRoaXMuYmVnaW5TTWFza0dyb3VwKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudGVtcFNNYXNrID0gbnVsbDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlRSXCI6XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGJlZ2luU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5TTWFza0dyb3VwKCkge1xuICAgICAgdmFyIGFjdGl2ZVNNYXNrID0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrO1xuICAgICAgdmFyIGRyYXduV2lkdGggPSBhY3RpdmVTTWFzay5jYW52YXMud2lkdGg7XG4gICAgICB2YXIgZHJhd25IZWlnaHQgPSBhY3RpdmVTTWFzay5jYW52YXMuaGVpZ2h0O1xuICAgICAgdmFyIGNhY2hlSWQgPSBcInNtYXNrR3JvdXBBdFwiICsgdGhpcy5ncm91cExldmVsO1xuICAgICAgdmFyIHNjcmF0Y2hDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjYWNoZUlkLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCwgdHJ1ZSk7XG4gICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICBncm91cEN0eC5zY2FsZSgxIC8gYWN0aXZlU01hc2suc2NhbGVYLCAxIC8gYWN0aXZlU01hc2suc2NhbGVZKTtcbiAgICAgIGdyb3VwQ3R4LnRyYW5zbGF0ZSgtYWN0aXZlU01hc2sub2Zmc2V0WCwgLWFjdGl2ZVNNYXNrLm9mZnNldFkpO1xuICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgIGFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSA9IGdyb3VwQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuICAgICAgY29weUN0eFN0YXRlKGN1cnJlbnRDdHgsIGdyb3VwQ3R4KTtcbiAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICB0aGlzLnNldEdTdGF0ZShbW1wiQk1cIiwgXCJzb3VyY2Utb3ZlclwiXSwgW1wiY2FcIiwgMV0sIFtcIkNBXCIsIDFdXSk7XG4gICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbCsrO1xuICAgIH0sXG4gICAgc3VzcGVuZFNNYXNrR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFNNYXNrR3JvdXAoKSB7XG4gICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7XG4gICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuICAgICAgdGhpcy5jdXJyZW50LnJlc3VtZVNNYXNrQ3R4ID0gZ3JvdXBDdHg7XG5cbiAgICAgIHZhciBkZWx0YVRyYW5zZm9ybSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzay5zdGFydFRyYW5zZm9ybUludmVyc2UsIGdyb3VwQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIGRlbHRhVHJhbnNmb3JtKTtcbiAgICAgIGdyb3VwQ3R4LnNhdmUoKTtcbiAgICAgIGdyb3VwQ3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgIGdyb3VwQ3R4LmNsZWFyUmVjdCgwLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgZ3JvdXBDdHgucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgcmVzdW1lU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eDtcbiAgICAgIHZhciBjdXJyZW50Q3R4ID0gdGhpcy5jdHg7XG4gICAgICB0aGlzLmN0eCA9IGdyb3VwQ3R4O1xuICAgICAgdGhpcy5ncm91cFN0YWNrLnB1c2goY3VycmVudEN0eCk7XG4gICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICB9LFxuICAgIGVuZFNNYXNrR3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFNNYXNrR3JvdXAoKSB7XG4gICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgdGhpcy5jdHggPSB0aGlzLmdyb3VwU3RhY2sucG9wKCk7XG4gICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuXG4gICAgICB2YXIgZGVsdGFUcmFuc2Zvcm0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2suc3RhcnRUcmFuc2Zvcm1JbnZlcnNlLCBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgdGhpcy5jdHgudHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCBkZWx0YVRyYW5zZm9ybSk7XG4gICAgfSxcbiAgICBzYXZlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zYXZlKCkge1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgdmFyIG9sZCA9IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuc3RhdGVTdGFjay5wdXNoKG9sZCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICAgIHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCA9IG51bGw7XG4gICAgfSxcbiAgICByZXN0b3JlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19yZXN0b3JlKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCkge1xuICAgICAgICB0aGlzLnJlc3VtZVNNYXNrR3JvdXAoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAhPT0gbnVsbCAmJiAodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnN0YXRlU3RhY2tbdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCAtIDFdLmFjdGl2ZVNNYXNrICE9PSB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spKSB7XG4gICAgICAgIHRoaXMuZW5kU01hc2tHcm91cCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgdHJhbnNmb3JtOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc190cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgdGhpcy5jdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7XG4gICAgfSxcbiAgICBjb25zdHJ1Y3RQYXRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICB2YXIgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgICB5ID0gY3VycmVudC55O1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDAsIGlpID0gb3BzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgc3dpdGNoIChvcHNbaV0gfCAwKSB7XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVjdGFuZ2xlOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYXJnc1tqKytdO1xuXG4gICAgICAgICAgICBpZiAod2lkdGggPT09IDAgJiYgY3R4LmxpbmVXaWR0aCA8IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpKSB7XG4gICAgICAgICAgICAgIHdpZHRoID0gdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgPT09IDAgJiYgY3R4LmxpbmVXaWR0aCA8IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpKSB7XG4gICAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgeHcgPSB4ICsgd2lkdGg7XG4gICAgICAgICAgICB2YXIgeWggPSB5ICsgaGVpZ2h0O1xuICAgICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeHcsIHkpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4dywgeWgpO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5aCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmxpbmVUbzpcbiAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgIHggPSBhcmdzW2ogKyA0XTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2ogKyA1XTtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10sIHgsIHkpO1xuICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKHgsIHksIGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10pO1xuICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgICAgaiArPSA0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgIHggPSBhcmdzW2ogKyAyXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCB4LCB5LCB4LCB5KTtcbiAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3VycmVudC5zZXRDdXJyZW50UG9pbnQoeCwgeSk7XG4gICAgfSxcbiAgICBjbG9zZVBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2Nsb3NlUGF0aCgpIHtcbiAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgIH0sXG4gICAgc3Ryb2tlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zdHJva2UoY29uc3VtZVBhdGgpIHtcbiAgICAgIGNvbnN1bWVQYXRoID0gdHlwZW9mIGNvbnN1bWVQYXRoICE9PSBcInVuZGVmaW5lZFwiID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIHN0cm9rZUNvbG9yID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yO1xuICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhO1xuXG4gICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICBpZiAoc3Ryb2tlQ29sb3IgJiYgc3Ryb2tlQ29sb3IuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpICYmIHN0cm9rZUNvbG9yLnR5cGUgPT09IFwiUGF0dGVyblwiKSB7XG4gICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybTtcblxuICAgICAgICAgIGNvbnN0IHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0cmFuc2Zvcm0pWzBdO1xuXG4gICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMpO1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heCh0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSAqIE1JTl9XSURUSF9GQUNUT1IsIHRoaXMuY3VycmVudC5saW5lV2lkdGggKiBzY2FsZSk7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IE1hdGgubWF4KHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpICogTUlOX1dJRFRIX0ZBQ1RPUiwgdGhpcy5jdXJyZW50LmxpbmVXaWR0aCk7XG4gICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25zdW1lUGF0aCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVQYXRoKCk7XG4gICAgICB9XG5cbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGE7XG4gICAgfSxcbiAgICBjbG9zZVN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2ZpbGwoY29uc3VtZVBhdGgpIHtcbiAgICAgIGNvbnN1bWVQYXRoID0gdHlwZW9mIGNvbnN1bWVQYXRoICE9PSBcInVuZGVmaW5lZFwiID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgIHZhciBuZWVkUmVzdG9yZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoaXNQYXR0ZXJuRmlsbCkge1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmJhc2VUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMpO1xuICAgICAgICBuZWVkUmVzdG9yZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdFT0ZpbGwpIHtcbiAgICAgICAgICBjdHguZmlsbChcImV2ZW5vZGRcIik7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmVlZFJlc3RvcmUpIHtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnN1bWVQYXRoKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVvRmlsbDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9GaWxsKCkge1xuICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmlsbCgpO1xuICAgIH0sXG4gICAgZmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZmlsbFN0cm9rZSgpIHtcbiAgICAgIHRoaXMuZmlsbChmYWxzZSk7XG4gICAgICB0aGlzLnN0cm9rZShmYWxzZSk7XG4gICAgICB0aGlzLmNvbnN1bWVQYXRoKCk7XG4gICAgfSxcbiAgICBlb0ZpbGxTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VvRmlsbFN0cm9rZSgpIHtcbiAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7XG4gICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICB9LFxuICAgIGNsb3NlRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgIH0sXG4gICAgY2xvc2VFT0ZpbGxTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2Nsb3NlRU9GaWxsU3Ryb2tlKCkge1xuICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICB9LFxuICAgIGVuZFBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFBhdGgoKSB7XG4gICAgICB0aGlzLmNvbnN1bWVQYXRoKCk7XG4gICAgfSxcbiAgICBjbGlwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jbGlwKCkge1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQO1xuICAgIH0sXG4gICAgZW9DbGlwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lb0NsaXAoKSB7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gRU9fQ0xJUDtcbiAgICB9LFxuICAgIGJlZ2luVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5UZXh0KCkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICB9LFxuICAgIGVuZFRleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFRleHQoKSB7XG4gICAgICB2YXIgcGF0aHMgPSB0aGlzLnBlbmRpbmdUZXh0UGF0aHM7XG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgIGlmIChwYXRocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aHNbaV07XG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXRoLnRyYW5zZm9ybSk7XG4gICAgICAgIGN0eC50cmFuc2xhdGUocGF0aC54LCBwYXRoLnkpO1xuICAgICAgICBwYXRoLmFkZFRvUGF0aChjdHgsIHBhdGguZm9udFNpemUpO1xuICAgICAgfVxuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgY3R4LmNsaXAoKTtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdUZXh0UGF0aHM7XG4gICAgfSxcbiAgICBzZXRDaGFyU3BhY2luZzogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhclNwYWNpbmcoc3BhY2luZykge1xuICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gc3BhY2luZztcbiAgICB9LFxuICAgIHNldFdvcmRTcGFjaW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRXb3JkU3BhY2luZyhzcGFjaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQud29yZFNwYWNpbmcgPSBzcGFjaW5nO1xuICAgIH0sXG4gICAgc2V0SFNjYWxlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRIU2NhbGUoc2NhbGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gc2NhbGUgLyAxMDA7XG4gICAgfSxcbiAgICBzZXRMZWFkaW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICAgIHRoaXMuY3VycmVudC5sZWFkaW5nID0gLWxlYWRpbmc7XG4gICAgfSxcbiAgICBzZXRGb250OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRGb250KGZvbnRSZWZOYW1lLCBzaXplKSB7XG4gICAgICB2YXIgZm9udE9iaiA9IHRoaXMuY29tbW9uT2Jqcy5nZXQoZm9udFJlZk5hbWUpO1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmICghZm9udE9iaikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgZm9udCBmb3IgJHtmb250UmVmTmFtZX1gKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG5cbiAgICAgIGlmIChjdXJyZW50LmZvbnRNYXRyaXhbMF0gPT09IDAgfHwgY3VycmVudC5mb250TWF0cml4WzNdID09PSAwKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgZm9udCBtYXRyaXggZm9yIGZvbnQgXCIgKyBmb250UmVmTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaXplIDwgMCkge1xuICAgICAgICBzaXplID0gLXNpemU7XG4gICAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC5mb250RGlyZWN0aW9uID0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50LmZvbnQgPSBmb250T2JqO1xuICAgICAgdGhpcy5jdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcblxuICAgICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IGZvbnRPYmoubG9hZGVkTmFtZSB8fCBcInNhbnMtc2VyaWZcIjtcbiAgICAgIGxldCBib2xkID0gXCJub3JtYWxcIjtcblxuICAgICAgaWYgKGZvbnRPYmouYmxhY2spIHtcbiAgICAgICAgYm9sZCA9IFwiOTAwXCI7XG4gICAgICB9IGVsc2UgaWYgKGZvbnRPYmouYm9sZCkge1xuICAgICAgICBib2xkID0gXCJib2xkXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwiO1xuICAgICAgdmFyIHR5cGVmYWNlID0gYFwiJHtuYW1lfVwiLCAke2ZvbnRPYmouZmFsbGJhY2tOYW1lfWA7XG4gICAgICBsZXQgYnJvd3NlckZvbnRTaXplID0gc2l6ZTtcblxuICAgICAgaWYgKHNpemUgPCBNSU5fRk9OVF9TSVpFKSB7XG4gICAgICAgIGJyb3dzZXJGb250U2l6ZSA9IE1JTl9GT05UX1NJWkU7XG4gICAgICB9IGVsc2UgaWYgKHNpemUgPiBNQVhfRk9OVF9TSVpFKSB7XG4gICAgICAgIGJyb3dzZXJGb250U2l6ZSA9IE1BWF9GT05UX1NJWkU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlID0gc2l6ZSAvIGJyb3dzZXJGb250U2l6ZTtcbiAgICAgIHRoaXMuY3R4LmZvbnQgPSBgJHtpdGFsaWN9ICR7Ym9sZH0gJHticm93c2VyRm9udFNpemV9cHggJHt0eXBlZmFjZX1gO1xuICAgIH0sXG4gICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFRleHRSZW5kZXJpbmdNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IG1vZGU7XG4gICAgfSxcbiAgICBzZXRUZXh0UmlzZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0VGV4dFJpc2UocmlzZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gcmlzZTtcbiAgICB9LFxuICAgIG1vdmVUZXh0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tb3ZlVGV4dCh4LCB5KSB7XG4gICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCArPSB4O1xuICAgICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgKz0geTtcbiAgICB9LFxuICAgIHNldExlYWRpbmdNb3ZlVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0TGVhZGluZ01vdmVUZXh0KHgsIHkpIHtcbiAgICAgIHRoaXMuc2V0TGVhZGluZygteSk7XG4gICAgICB0aGlzLm1vdmVUZXh0KHgsIHkpO1xuICAgIH0sXG4gICAgc2V0VGV4dE1hdHJpeDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gICAgfSxcbiAgICBuZXh0TGluZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfbmV4dExpbmUoKSB7XG4gICAgICB0aGlzLm1vdmVUZXh0KDAsIHRoaXMuY3VycmVudC5sZWFkaW5nKTtcbiAgICB9LFxuXG4gICAgcGFpbnRDaGFyKGNoYXJhY3RlciwgeCwgeSwgcGF0dGVyblRyYW5zZm9ybSkge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICB2YXIgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICAgIHZhciB0ZXh0UmVuZGVyaW5nTW9kZSA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU7XG4gICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplIC8gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgdmFyIGZpbGxTdHJva2VNb2RlID0gdGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO1xuICAgICAgdmFyIGlzQWRkVG9QYXRoU2V0ID0gISEodGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcbiAgICAgIGNvbnN0IHBhdHRlcm5GaWxsID0gY3VycmVudC5wYXR0ZXJuRmlsbCAmJiAhZm9udC5taXNzaW5nRmlsZTtcbiAgICAgIHZhciBhZGRUb1BhdGg7XG5cbiAgICAgIGlmIChmb250LmRpc2FibGVGb250RmFjZSB8fCBpc0FkZFRvUGF0aFNldCB8fCBwYXR0ZXJuRmlsbCkge1xuICAgICAgICBhZGRUb1BhdGggPSBmb250LmdldFBhdGhHZW5lcmF0b3IodGhpcy5jb21tb25PYmpzLCBjaGFyYWN0ZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgcGF0dGVybkZpbGwpIHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBhZGRUb1BhdGgoY3R4LCBmb250U2l6ZSk7XG5cbiAgICAgICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0pIHtcbiAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgcGF0dGVyblRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICBjdHguc3Ryb2tlVGV4dChjaGFyYWN0ZXIsIHgsIHkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FkZFRvUGF0aFNldCkge1xuICAgICAgICB2YXIgcGF0aHMgPSB0aGlzLnBlbmRpbmdUZXh0UGF0aHMgfHwgKHRoaXMucGVuZGluZ1RleHRQYXRocyA9IFtdKTtcbiAgICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgICAgdHJhbnNmb3JtOiBjdHgubW96Q3VycmVudFRyYW5zZm9ybSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgYWRkVG9QYXRoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXQgaXNGb250U3VicGl4ZWxBQUVuYWJsZWQoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbnRleHQ6IGN0eFxuICAgICAgfSA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaXNGb250U3VicGl4ZWxBQUVuYWJsZWRcIiwgMTAsIDEwKTtcbiAgICAgIGN0eC5zY2FsZSgxLjUsIDEpO1xuICAgICAgY3R4LmZpbGxUZXh0KFwiSVwiLCAwLCAxMCk7XG4gICAgICB2YXIgZGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMTAsIDEwKS5kYXRhO1xuICAgICAgdmFyIGVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIGlmIChkYXRhW2ldID4gMCAmJiBkYXRhW2ldIDwgMjU1KSB7XG4gICAgICAgICAgZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNGb250U3VicGl4ZWxBQUVuYWJsZWRcIiwgZW5hYmxlZCk7XG4gICAgfSxcblxuICAgIHNob3dUZXh0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zaG93VGV4dChnbHlwaHMpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG5cbiAgICAgIGlmIChmb250LmlzVHlwZTNGb250KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dUeXBlM1RleHQoZ2x5cGhzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgdmFyIGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgIHZhciB3b3JkU3BhY2luZyA9IGN1cnJlbnQud29yZFNwYWNpbmc7XG4gICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgIHZhciB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIHZhciBnbHlwaHNMZW5ndGggPSBnbHlwaHMubGVuZ3RoO1xuICAgICAgdmFyIHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgIHZhciBzcGFjaW5nRGlyID0gdmVydGljYWwgPyAxIDogLTE7XG4gICAgICB2YXIgZGVmYXVsdFZNZXRyaWNzID0gZm9udC5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgICB2YXIgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgIHZhciBzaW1wbGVGaWxsVGV4dCA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgJiYgIWZvbnQuZGlzYWJsZUZvbnRGYWNlICYmICFjdXJyZW50LnBhdHRlcm5GaWxsO1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGxldCBwYXR0ZXJuVHJhbnNmb3JtO1xuXG4gICAgICBpZiAoY3VycmVudC5wYXR0ZXJuRmlsbCkge1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gY3VycmVudC5maWxsQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMpO1xuICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuO1xuICAgICAgfVxuXG4gICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgY3VycmVudC50ZXh0TWF0cml4KTtcbiAgICAgIGN0eC50cmFuc2xhdGUoY3VycmVudC54LCBjdXJyZW50LnkgKyBjdXJyZW50LnRleHRSaXNlKTtcblxuICAgICAgaWYgKGZvbnREaXJlY3Rpb24gPiAwKSB7XG4gICAgICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCAtMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBsaW5lV2lkdGggPSBjdXJyZW50LmxpbmVXaWR0aDtcbiAgICAgIHZhciBzY2FsZSA9IGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlO1xuXG4gICAgICBpZiAoc2NhbGUgPT09IDAgfHwgbGluZVdpZHRoID09PSAwKSB7XG4gICAgICAgIHZhciBmaWxsU3Ryb2tlTW9kZSA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO1xuXG4gICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICAgIGxpbmVXaWR0aCA9IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpICogTUlOX1dJRFRIX0ZBQ1RPUjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGluZVdpZHRoIC89IHNjYWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udFNpemVTY2FsZSAhPT0gMS4wKSB7XG4gICAgICAgIGN0eC5zY2FsZShmb250U2l6ZVNjYWxlLCBmb250U2l6ZVNjYWxlKTtcbiAgICAgICAgbGluZVdpZHRoIC89IGZvbnRTaXplU2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICB4ICs9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN0b3JlTmVlZGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBzcGFjaW5nID0gKGdseXBoLmlzU3BhY2UgPyB3b3JkU3BhY2luZyA6IDApICsgY2hhclNwYWNpbmc7XG4gICAgICAgIHZhciBjaGFyYWN0ZXIgPSBnbHlwaC5mb250Q2hhcjtcbiAgICAgICAgdmFyIGFjY2VudCA9IGdseXBoLmFjY2VudDtcbiAgICAgICAgdmFyIHNjYWxlZFgsIHNjYWxlZFksIHNjYWxlZEFjY2VudFgsIHNjYWxlZEFjY2VudFk7XG4gICAgICAgIHZhciB3aWR0aCA9IGdseXBoLndpZHRoO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgIHZhciB2bWV0cmljLCB2eCwgdnk7XG4gICAgICAgICAgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgIHZ4ID0gZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNTtcbiAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIHZ5ID0gdm1ldHJpY1syXSAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gKHggKyB2eSkgLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlZFggPSB4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb250LnJlbWVhc3VyZSAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbWVhc3VyZWRXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dChjaGFyYWN0ZXIpLndpZHRoICogMTAwMCAvIGZvbnRTaXplICogZm9udFNpemVTY2FsZTtcblxuICAgICAgICAgIGlmICh3aWR0aCA8IG1lYXN1cmVkV2lkdGggJiYgdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCkge1xuICAgICAgICAgICAgdmFyIGNoYXJhY3RlclNjYWxlWCA9IHdpZHRoIC8gbWVhc3VyZWRXaWR0aDtcbiAgICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5zY2FsZShjaGFyYWN0ZXJTY2FsZVgsIDEpO1xuICAgICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7XG4gICAgICAgICAgfSBlbHNlIGlmICh3aWR0aCAhPT0gbWVhc3VyZWRXaWR0aCkge1xuICAgICAgICAgICAgc2NhbGVkWCArPSAod2lkdGggLSBtZWFzdXJlZFdpZHRoKSAvIDIwMDAgKiBmb250U2l6ZSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudFZpc2libGUgJiYgKGdseXBoLmlzSW5Gb250IHx8IGZvbnQubWlzc2luZ0ZpbGUpKSB7XG4gICAgICAgICAgaWYgKHNpbXBsZUZpbGxUZXh0ICYmICFhY2NlbnQpIHtcbiAgICAgICAgICAgIGN0eC5maWxsVGV4dChjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50Q2hhcihjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5UcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICBpZiAoYWNjZW50KSB7XG4gICAgICAgICAgICAgIHNjYWxlZEFjY2VudFggPSBzY2FsZWRYICsgZm9udFNpemUgKiBhY2NlbnQub2Zmc2V0LnggLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICBzY2FsZWRBY2NlbnRZID0gc2NhbGVkWSAtIGZvbnRTaXplICogYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgdGhpcy5wYWludENoYXIoYWNjZW50LmZvbnRDaGFyLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZLCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhcldpZHRoO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgIGNoYXJXaWR0aCA9IHdpZHRoICogd2lkdGhBZHZhbmNlU2NhbGUgLSBzcGFjaW5nICogZm9udERpcmVjdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICB4ICs9IGNoYXJXaWR0aDtcblxuICAgICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQueSAtPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH0sXG4gICAgc2hvd1R5cGUzVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2hvd1R5cGUzVGV4dChnbHlwaHMpIHtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplO1xuICAgICAgdmFyIGZvbnREaXJlY3Rpb24gPSBjdXJyZW50LmZvbnREaXJlY3Rpb247XG4gICAgICB2YXIgc3BhY2luZ0RpciA9IGZvbnQudmVydGljYWwgPyAxIDogLTE7XG4gICAgICB2YXIgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nO1xuICAgICAgdmFyIHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIHZhciB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIHZhciBmb250TWF0cml4ID0gY3VycmVudC5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgdmFyIGdseXBoc0xlbmd0aCA9IGdseXBocy5sZW5ndGg7XG4gICAgICB2YXIgaXNUZXh0SW52aXNpYmxlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuSU5WSVNJQkxFO1xuICAgICAgdmFyIGksIGdseXBoLCB3aWR0aCwgc3BhY2luZ0xlbmd0aDtcblxuICAgICAgaWYgKGlzVGV4dEludmlzaWJsZSB8fCBmb250U2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBjdXJyZW50LnRleHRNYXRyaXgpO1xuICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSk7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgZm9udERpcmVjdGlvbik7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgICBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICBzcGFjaW5nTGVuZ3RoID0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShzcGFjaW5nTGVuZ3RoLCAwKTtcbiAgICAgICAgICBjdXJyZW50LnggKz0gc3BhY2luZ0xlbmd0aCAqIHRleHRIU2NhbGU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gZm9udC5jaGFyUHJvY09wZXJhdG9yTGlzdFtnbHlwaC5vcGVyYXRvckxpc3RJZF07XG5cbiAgICAgICAgaWYgKCFvcGVyYXRvckxpc3QpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFR5cGUzIGNoYXJhY3RlciBcIiR7Z2x5cGgub3BlcmF0b3JMaXN0SWR9XCIgaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBnbHlwaDtcbiAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgICBjdHguc2NhbGUoZm9udFNpemUsIGZvbnRTaXplKTtcbiAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZm9udE1hdHJpeCk7XG4gICAgICAgICAgdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KG9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHJhbnNmb3JtZWQgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFtnbHlwaC53aWR0aCwgMF0sIGZvbnRNYXRyaXgpO1xuXG4gICAgICAgIHdpZHRoID0gdHJhbnNmb3JtZWRbMF0gKiBmb250U2l6ZSArIHNwYWNpbmc7XG4gICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgICBjdXJyZW50LnggKz0gd2lkdGggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgIH0sXG4gICAgc2V0Q2hhcldpZHRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRDaGFyV2lkdGgoeFdpZHRoLCB5V2lkdGgpIHt9LFxuICAgIHNldENoYXJXaWR0aEFuZEJvdW5kczogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoQW5kQm91bmRzKHhXaWR0aCwgeVdpZHRoLCBsbHgsIGxseSwgdXJ4LCB1cnkpIHtcbiAgICAgIHRoaXMuY3R4LnJlY3QobGx4LCBsbHksIHVyeCAtIGxseCwgdXJ5IC0gbGx5KTtcbiAgICAgIHRoaXMuY2xpcCgpO1xuICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgfSxcbiAgICBnZXRDb2xvck5fUGF0dGVybjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZ2V0Q29sb3JOX1BhdHRlcm4oSVIpIHtcbiAgICAgIHZhciBwYXR0ZXJuO1xuXG4gICAgICBpZiAoSVJbMF0gPT09IFwiVGlsaW5nUGF0dGVyblwiKSB7XG4gICAgICAgIHZhciBjb2xvciA9IElSWzFdO1xuICAgICAgICB2YXIgYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybSB8fCB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgICAgIHZhciBjYW52YXNHcmFwaGljc0ZhY3RvcnkgPSB7XG4gICAgICAgICAgY3JlYXRlQ2FudmFzR3JhcGhpY3M6IGN0eCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENhbnZhc0dyYXBoaWNzKGN0eCwgdGhpcy5jb21tb25PYmpzLCB0aGlzLm9ianMsIHRoaXMuY2FudmFzRmFjdG9yeSwgdGhpcy53ZWJHTENvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcGF0dGVybiA9IG5ldyBfcGF0dGVybl9oZWxwZXIuVGlsaW5nUGF0dGVybihJUiwgY29sb3IsIHRoaXMuY3R4LCBjYW52YXNHcmFwaGljc0ZhY3RvcnksIGJhc2VUcmFuc2Zvcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0dGVybiA9ICgwLCBfcGF0dGVybl9oZWxwZXIuZ2V0U2hhZGluZ1BhdHRlcm5Gcm9tSVIpKElSKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfSxcbiAgICBzZXRTdHJva2VDb2xvck46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFN0cm9rZUNvbG9yTigpIHtcbiAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHNldEZpbGxDb2xvck46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxDb2xvck4oKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdGhpcy5nZXRDb2xvck5fUGF0dGVybihhcmd1bWVudHMpO1xuICAgICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gdHJ1ZTtcbiAgICB9LFxuICAgIHNldFN0cm9rZVJHQkNvbG9yOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB2YXIgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociwgZywgYik7XG5cbiAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gY29sb3I7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcbiAgICB9LFxuICAgIHNldEZpbGxSR0JDb2xvcjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0RmlsbFJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICAgIHZhciBjb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyLCBnLCBiKTtcblxuICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gY29sb3I7XG4gICAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSBmYWxzZTtcbiAgICB9LFxuICAgIHNoYWRpbmdGaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zaGFkaW5nRmlsbChwYXR0ZXJuSVIpIHtcbiAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgdmFyIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShwYXR0ZXJuSVIpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm4uZ2V0UGF0dGVybihjdHgsIHRoaXMsIHRydWUpO1xuICAgICAgdmFyIGludiA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcblxuICAgICAgaWYgKGludikge1xuICAgICAgICB2YXIgY2FudmFzID0gY3R4LmNhbnZhcztcbiAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgICAgICB2YXIgYmwgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLCAwXSwgaW52KTtcblxuICAgICAgICB2YXIgYnIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFswLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICAgIHZhciB1bCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCAwXSwgaW52KTtcblxuICAgICAgICB2YXIgdXIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICB2YXIgeDAgPSBNYXRoLm1pbihibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICAgIHZhciB5MCA9IE1hdGgubWluKGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgICAgdmFyIHgxID0gTWF0aC5tYXgoYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgICB2YXIgeTEgPSBNYXRoLm1heChibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCgtMWUxMCwgLTFlMTAsIDJlMTAsIDJlMTApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9LFxuICAgIGJlZ2luSW5saW5lSW1hZ2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luSW5saW5lSW1hZ2UoKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW5saW5lSW1hZ2VcIik7XG4gICAgfSxcbiAgICBiZWdpbkltYWdlRGF0YTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5JbWFnZURhdGEoKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhXCIpO1xuICAgIH0sXG4gICAgcGFpbnRGb3JtWE9iamVjdEJlZ2luOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEZvcm1YT2JqZWN0QmVnaW4obWF0cml4LCBiYm94KSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0cml4KSAmJiBtYXRyaXgubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsIG1hdHJpeCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICAgIGlmIChiYm94KSB7XG4gICAgICAgIHZhciB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gYmJveFszXSAtIGJib3hbMV07XG4gICAgICAgIHRoaXMuY3R4LnJlY3QoYmJveFswXSwgYmJveFsxXSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY2xpcCgpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhaW50Rm9ybVhPYmplY3RFbmQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50Rm9ybVhPYmplY3RFbmQoKSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICAgIH0sXG4gICAgYmVnaW5Hcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5Hcm91cChncm91cCkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICBpZiAoIWdyb3VwLmlzb2xhdGVkKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChncm91cC5rbm9ja291dCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50VHJhbnNmb3JtID0gY3VycmVudEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuXG4gICAgICBpZiAoZ3JvdXAubWF0cml4KSB7XG4gICAgICAgIGN1cnJlbnRDdHgudHJhbnNmb3JtLmFwcGx5KGN1cnJlbnRDdHgsIGdyb3VwLm1hdHJpeCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ3JvdXAuYmJveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCb3VuZGluZyBib3ggaXMgcmVxdWlyZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYm91bmRzID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChncm91cC5iYm94LCBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgICB2YXIgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdO1xuICAgICAgYm91bmRzID0gX3V0aWwuVXRpbC5pbnRlcnNlY3QoYm91bmRzLCBjYW52YXNCb3VuZHMpIHx8IFswLCAwLCAwLCAwXTtcbiAgICAgIHZhciBvZmZzZXRYID0gTWF0aC5mbG9vcihib3VuZHNbMF0pO1xuICAgICAgdmFyIG9mZnNldFkgPSBNYXRoLmZsb29yKGJvdW5kc1sxXSk7XG4gICAgICB2YXIgZHJhd25XaWR0aCA9IE1hdGgubWF4KE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WCwgMSk7XG4gICAgICB2YXIgZHJhd25IZWlnaHQgPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzNdKSAtIG9mZnNldFksIDEpO1xuICAgICAgdmFyIHNjYWxlWCA9IDEsXG4gICAgICAgICAgc2NhbGVZID0gMTtcblxuICAgICAgaWYgKGRyYXduV2lkdGggPiBNQVhfR1JPVVBfU0laRSkge1xuICAgICAgICBzY2FsZVggPSBkcmF3bldpZHRoIC8gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgIGRyYXduV2lkdGggPSBNQVhfR1JPVVBfU0laRTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyYXduSGVpZ2h0ID4gTUFYX0dST1VQX1NJWkUpIHtcbiAgICAgICAgc2NhbGVZID0gZHJhd25IZWlnaHQgLyBNQVhfR1JPVVBfU0laRTtcbiAgICAgICAgZHJhd25IZWlnaHQgPSBNQVhfR1JPVVBfU0laRTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhY2hlSWQgPSBcImdyb3VwQXRcIiArIHRoaXMuZ3JvdXBMZXZlbDtcblxuICAgICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICAgIGNhY2hlSWQgKz0gXCJfc21hc2tfXCIgKyB0aGlzLnNtYXNrQ291bnRlcisrICUgMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNjcmF0Y2hDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhjYWNoZUlkLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCwgdHJ1ZSk7XG4gICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICBncm91cEN0eC5zY2FsZSgxIC8gc2NhbGVYLCAxIC8gc2NhbGVZKTtcbiAgICAgIGdyb3VwQ3R4LnRyYW5zbGF0ZSgtb2Zmc2V0WCwgLW9mZnNldFkpO1xuICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICAgIHRoaXMuc21hc2tTdGFjay5wdXNoKHtcbiAgICAgICAgICBjYW52YXM6IHNjcmF0Y2hDYW52YXMuY2FudmFzLFxuICAgICAgICAgIGNvbnRleHQ6IGdyb3VwQ3R4LFxuICAgICAgICAgIG9mZnNldFgsXG4gICAgICAgICAgb2Zmc2V0WSxcbiAgICAgICAgICBzY2FsZVgsXG4gICAgICAgICAgc2NhbGVZLFxuICAgICAgICAgIHN1YnR5cGU6IGdyb3VwLnNtYXNrLnN1YnR5cGUsXG4gICAgICAgICAgYmFja2Ryb3A6IGdyb3VwLnNtYXNrLmJhY2tkcm9wLFxuICAgICAgICAgIHRyYW5zZmVyTWFwOiBncm91cC5zbWFzay50cmFuc2Zlck1hcCB8fCBudWxsLFxuICAgICAgICAgIHN0YXJ0VHJhbnNmb3JtSW52ZXJzZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRDdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICBjdXJyZW50Q3R4LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgY3VycmVudEN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7XG4gICAgICB9XG5cbiAgICAgIGNvcHlDdHhTdGF0ZShjdXJyZW50Q3R4LCBncm91cEN0eCk7XG4gICAgICB0aGlzLmN0eCA9IGdyb3VwQ3R4O1xuICAgICAgdGhpcy5zZXRHU3RhdGUoW1tcIkJNXCIsIFwic291cmNlLW92ZXJcIl0sIFtcImNhXCIsIDFdLCBbXCJDQVwiLCAxXV0pO1xuICAgICAgdGhpcy5ncm91cFN0YWNrLnB1c2goY3VycmVudEN0eCk7XG4gICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayA9IG51bGw7XG4gICAgfSxcbiAgICBlbmRHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kR3JvdXAoZ3JvdXApIHtcbiAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgdmFyIGdyb3VwQ3R4ID0gdGhpcy5jdHg7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMuZ3JvdXBTdGFjay5wb3AoKTtcblxuICAgICAgaWYgKHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdHgubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICB0aGlzLnRlbXBTTWFzayA9IHRoaXMuc21hc2tTdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShncm91cEN0eC5jYW52YXMsIDAsIDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9LFxuICAgIGJlZ2luQW5ub3RhdGlvbnM6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQW5ub3RhdGlvbnMoKSB7XG4gICAgICB0aGlzLnNhdmUoKTtcblxuICAgICAgaWYgKHRoaXMuYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmRBbm5vdGF0aW9uczogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kQW5ub3RhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9LFxuICAgIGJlZ2luQW5ub3RhdGlvbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5Bbm5vdGF0aW9uKHJlY3QsIHRyYW5zZm9ybSwgbWF0cml4KSB7XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3QpICYmIHJlY3QubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHZhciB3aWR0aCA9IHJlY3RbMl0gLSByZWN0WzBdO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVjdFszXSAtIHJlY3RbMV07XG4gICAgICAgIHRoaXMuY3R4LnJlY3QocmVjdFswXSwgcmVjdFsxXSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMuY2xpcCgpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgdHJhbnNmb3JtKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsIG1hdHJpeCk7XG4gICAgfSxcbiAgICBlbmRBbm5vdGF0aW9uOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRBbm5vdGF0aW9uKCkge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfSxcbiAgICBwYWludEltYWdlTWFza1hPYmplY3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW1hZ2VNYXNrWE9iamVjdChpbWcpIHtcbiAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xuICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgIHZhciBnbHlwaCA9IHRoaXMucHJvY2Vzc2luZ1R5cGUzO1xuXG4gICAgICBpZiAoQ09NUElMRV9UWVBFM19HTFlQSFMgJiYgZ2x5cGggJiYgZ2x5cGguY29tcGlsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAod2lkdGggPD0gTUFYX1NJWkVfVE9fQ09NUElMRSAmJiBoZWlnaHQgPD0gTUFYX1NJWkVfVE9fQ09NUElMRSkge1xuICAgICAgICAgIGdseXBoLmNvbXBpbGVkID0gY29tcGlsZVR5cGUzR2x5cGgoe1xuICAgICAgICAgICAgZGF0YTogaW1nLmRhdGEsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdseXBoLmNvbXBpbGVkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2x5cGggJiYgZ2x5cGguY29tcGlsZWQpIHtcbiAgICAgICAgZ2x5cGguY29tcGlsZWQoY3R4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwibWFza0NhbnZhc1wiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICBwdXRCaW5hcnlJbWFnZU1hc2sobWFza0N0eCwgaW1nKTtcbiAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2UtaW5cIjtcbiAgICAgIG1hc2tDdHguZmlsbFN0eWxlID0gaXNQYXR0ZXJuRmlsbCA/IGZpbGxDb2xvci5nZXRQYXR0ZXJuKG1hc2tDdHgsIHRoaXMpIDogZmlsbENvbG9yO1xuICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChtYXNrQ2FudmFzLmNhbnZhcyk7XG4gICAgfSxcblxuICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdChpbWdEYXRhLCBzY2FsZVgsIHNrZXdYID0gMCwgc2tld1kgPSAwLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIHZhciBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwibWFza0NhbnZhc1wiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICBwdXRCaW5hcnlJbWFnZU1hc2sobWFza0N0eCwgaW1nRGF0YSk7XG4gICAgICBtYXNrQ3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLWluXCI7XG4gICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBtYXNrQ3R4LnJlc3RvcmUoKTtcbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybShzY2FsZVgsIHNrZXdYLCBza2V3WSwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV0pO1xuICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMuY2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAtMSwgMSwgMSk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3RHcm91cChpbWFnZXMpIHtcbiAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgIHZhciBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGltYWdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciBpbWFnZSA9IGltYWdlc1tpXTtcbiAgICAgICAgdmFyIHdpZHRoID0gaW1hZ2Uud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICAgIHZhciBtYXNrQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtYXNrQ2FudmFzXCIsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgbWFza0N0eCA9IG1hc2tDYW52YXMuY29udGV4dDtcbiAgICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICAgIHB1dEJpbmFyeUltYWdlTWFzayhtYXNrQ3R4LCBpbWFnZSk7XG4gICAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2UtaW5cIjtcbiAgICAgICAgbWFza0N0eC5maWxsU3R5bGUgPSBpc1BhdHRlcm5GaWxsID8gZmlsbENvbG9yLmdldFBhdHRlcm4obWFza0N0eCwgdGhpcykgOiBmaWxsQ29sb3I7XG4gICAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgaW1hZ2UudHJhbnNmb3JtKTtcbiAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShtYXNrQ2FudmFzLmNhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEsIDEpO1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFpbnRJbWFnZVhPYmplY3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW1hZ2VYT2JqZWN0KG9iaklkKSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWdEYXRhID0gb2JqSWQuc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzLmdldChvYmpJZCkgOiB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhKTtcbiAgICB9LFxuICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlWE9iamVjdFJlcGVhdChvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1nRGF0YSA9IG9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IHRoaXMuY29tbW9uT2Jqcy5nZXQob2JqSWQpIDogdGhpcy5vYmpzLmdldChvYmpJZCk7XG5cbiAgICAgIGlmICghaW1nRGF0YSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICB2YXIgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICB2YXIgbWFwID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICB0cmFuc2Zvcm06IFtzY2FsZVgsIDAsIDAsIHNjYWxlWSwgcG9zaXRpb25zW2ldLCBwb3NpdGlvbnNbaSArIDFdXSxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgdzogd2lkdGgsXG4gICAgICAgICAgaDogaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKTtcbiAgICB9LFxuICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhKSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICBjdHguc2NhbGUoMSAvIHdpZHRoLCAtMSAvIGhlaWdodCk7XG4gICAgICB2YXIgY3VycmVudFRyYW5zZm9ybSA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgIHZhciBhID0gY3VycmVudFRyYW5zZm9ybVswXSxcbiAgICAgICAgICBiID0gY3VycmVudFRyYW5zZm9ybVsxXTtcbiAgICAgIHZhciB3aWR0aFNjYWxlID0gTWF0aC5tYXgoTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpLCAxKTtcbiAgICAgIHZhciBjID0gY3VycmVudFRyYW5zZm9ybVsyXSxcbiAgICAgICAgICBkID0gY3VycmVudFRyYW5zZm9ybVszXTtcbiAgICAgIHZhciBoZWlnaHRTY2FsZSA9IE1hdGgubWF4KE1hdGguc3FydChjICogYyArIGQgKiBkKSwgMSk7XG4gICAgICB2YXIgaW1nVG9QYWludCwgdG1wQ2FudmFzO1xuXG4gICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSBcImZ1bmN0aW9uXCIgJiYgaW1nRGF0YSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8ICFpbWdEYXRhLmRhdGEpIHtcbiAgICAgICAgaW1nVG9QYWludCA9IGltZ0RhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcImlubGluZUltYWdlXCIsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgIHB1dEJpbmFyeUltYWdlRGF0YSh0bXBDdHgsIGltZ0RhdGEsIHRoaXMuY3VycmVudC50cmFuc2Zlck1hcHMpO1xuICAgICAgICBpbWdUb1BhaW50ID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgIH1cblxuICAgICAgdmFyIHBhaW50V2lkdGggPSB3aWR0aCxcbiAgICAgICAgICBwYWludEhlaWdodCA9IGhlaWdodDtcbiAgICAgIHZhciB0bXBDYW52YXNJZCA9IFwicHJlc2NhbGUxXCI7XG5cbiAgICAgIHdoaWxlICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSB8fCBoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICAgIHZhciBuZXdXaWR0aCA9IHBhaW50V2lkdGgsXG4gICAgICAgICAgICBuZXdIZWlnaHQgPSBwYWludEhlaWdodDtcblxuICAgICAgICBpZiAod2lkdGhTY2FsZSA+IDIgJiYgcGFpbnRXaWR0aCA+IDEpIHtcbiAgICAgICAgICBuZXdXaWR0aCA9IE1hdGguY2VpbChwYWludFdpZHRoIC8gMik7XG4gICAgICAgICAgd2lkdGhTY2FsZSAvPSBwYWludFdpZHRoIC8gbmV3V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGVpZ2h0U2NhbGUgPiAyICYmIHBhaW50SGVpZ2h0ID4gMSkge1xuICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGguY2VpbChwYWludEhlaWdodCAvIDIpO1xuICAgICAgICAgIGhlaWdodFNjYWxlIC89IHBhaW50SGVpZ2h0IC8gbmV3SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXModG1wQ2FudmFzSWQsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgICB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgdG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgdG1wQ3R4LmRyYXdJbWFnZShpbWdUb1BhaW50LCAwLCAwLCBwYWludFdpZHRoLCBwYWludEhlaWdodCwgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICAgIGltZ1RvUGFpbnQgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgICAgICBwYWludFdpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIHBhaW50SGVpZ2h0ID0gbmV3SGVpZ2h0O1xuICAgICAgICB0bXBDYW52YXNJZCA9IHRtcENhbnZhc0lkID09PSBcInByZXNjYWxlMVwiID8gXCJwcmVzY2FsZTJcIiA6IFwicHJlc2NhbGUxXCI7XG4gICAgICB9XG5cbiAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nVG9QYWludCwgMCwgMCwgcGFpbnRXaWR0aCwgcGFpbnRIZWlnaHQsIDAsIC1oZWlnaHQsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oMCwgLWhlaWdodCk7XG4gICAgICAgIHRoaXMuaW1hZ2VMYXllci5hcHBlbmRJbWFnZSh7XG4gICAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICB0b3A6IHBvc2l0aW9uWzFdLFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCAvIGN1cnJlbnRUcmFuc2Zvcm1bMF0sXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjdXJyZW50VHJhbnNmb3JtWzNdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9LFxuICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKSB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICB2YXIgdyA9IGltZ0RhdGEud2lkdGg7XG4gICAgICB2YXIgaCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgdmFyIHRtcENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaW5saW5lSW1hZ2VcIiwgdywgaCk7XG4gICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICBwdXRCaW5hcnlJbWFnZURhdGEodG1wQ3R4LCBpbWdEYXRhLCB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWFwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gbWFwW2ldO1xuICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZW50cnkudHJhbnNmb3JtKTtcbiAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZSh0bXBDYW52YXMuY2FudmFzLCBlbnRyeS54LCBlbnRyeS55LCBlbnRyeS53LCBlbnRyeS5oLCAwLCAtMSwgMSwgMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oZW50cnkueCwgZW50cnkueSk7XG4gICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgIGltZ0RhdGEsXG4gICAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICB3aWR0aDogdyxcbiAgICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG4gICAgfSxcbiAgICBtYXJrUG9pbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX21hcmtQb2ludCh0YWcpIHt9LFxuICAgIG1hcmtQb2ludFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgIGJlZ2luTWFya2VkQ29udGVudDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5NYXJrZWRDb250ZW50KHRhZykge1xuICAgICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucHVzaCh7XG4gICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luTWFya2VkQ29udGVudFByb3BzKHRhZywgcHJvcGVydGllcykge1xuICAgICAgaWYgKHRhZyA9PT0gXCJPQ1wiKSB7XG4gICAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe1xuICAgICAgICAgIHZpc2libGU6IHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShwcm9wZXJ0aWVzKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe1xuICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgICB9LFxuICAgIGVuZE1hcmtlZENvbnRlbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZE1hcmtlZENvbnRlbnQoKSB7XG4gICAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wb3AoKTtcbiAgICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgICB9LFxuICAgIGJlZ2luQ29tcGF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkNvbXBhdCgpIHt9LFxuICAgIGVuZENvbXBhdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kQ29tcGF0KCkge30sXG4gICAgY29uc3VtZVBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NvbnN1bWVQYXRoKCkge1xuICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCA9PT0gRU9fQ0xJUCkge1xuICAgICAgICAgIGN0eC5jbGlwKFwiZXZlbm9kZFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICB9LFxuXG4gICAgZ2V0U2luZ2xlUGl4ZWxXaWR0aChzY2FsZSkge1xuICAgICAgaWYgKHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW52ZXJzZSA9IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gTWF0aC5zcXJ0KE1hdGgubWF4KGludmVyc2VbMF0gKiBpbnZlcnNlWzBdICsgaW52ZXJzZVsxXSAqIGludmVyc2VbMV0sIGludmVyc2VbMl0gKiBpbnZlcnNlWzJdICsgaW52ZXJzZVszXSAqIGludmVyc2VbM10pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gICAgfSxcblxuICAgIGdldENhbnZhc1Bvc2l0aW9uOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19nZXRDYW52YXNQb3NpdGlvbih4LCB5KSB7XG4gICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIHJldHVybiBbdHJhbnNmb3JtWzBdICogeCArIHRyYW5zZm9ybVsyXSAqIHkgKyB0cmFuc2Zvcm1bNF0sIHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNmb3JtWzVdXTtcbiAgICB9LFxuICAgIGlzQ29udGVudFZpc2libGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2lzQ29udGVudFZpc2libGUoKSB7XG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5tYXJrZWRDb250ZW50U3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1tpXS52aXNpYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgICBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbX3V0aWwuT1BTW29wXV0gPSBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbb3BdO1xuICB9XG5cbiAgcmV0dXJuIENhbnZhc0dyYXBoaWNzO1xufSgpO1xuXG5leHBvcnRzLkNhbnZhc0dyYXBoaWNzID0gQ2FudmFzR3JhcGhpY3M7XG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0U2hhZGluZ1BhdHRlcm5Gcm9tSVIgPSBnZXRTaGFkaW5nUGF0dGVybkZyb21JUjtcbmV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIFNoYWRpbmdJUnMgPSB7fTtcblxuZnVuY3Rpb24gYXBwbHlCb3VuZGluZ0JveChjdHgsIGJib3gpIHtcbiAgaWYgKCFiYm94IHx8IHR5cGVvZiBQYXRoMkQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgY29uc3QgcmVnaW9uID0gbmV3IFBhdGgyRCgpO1xuICByZWdpb24ucmVjdChiYm94WzBdLCBiYm94WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgY3R4LmNsaXAocmVnaW9uKTtcbn1cblxuU2hhZGluZ0lScy5SYWRpYWxBeGlhbCA9IHtcbiAgZnJvbUlSOiBmdW5jdGlvbiBSYWRpYWxBeGlhbF9mcm9tSVIocmF3KSB7XG4gICAgdmFyIHR5cGUgPSByYXdbMV07XG4gICAgdmFyIGJib3ggPSByYXdbMl07XG4gICAgdmFyIGNvbG9yU3RvcHMgPSByYXdbM107XG4gICAgdmFyIHAwID0gcmF3WzRdO1xuICAgIHZhciBwMSA9IHJhd1s1XTtcbiAgICB2YXIgcjAgPSByYXdbNl07XG4gICAgdmFyIHIxID0gcmF3WzddO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIlBhdHRlcm5cIixcbiAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCBiYm94KTtcbiAgICAgICAgdmFyIGdyYWQ7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFwiYXhpYWxcIikge1xuICAgICAgICAgIGdyYWQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQocDBbMF0sIHAwWzFdLCBwMVswXSwgcDFbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwicmFkaWFsXCIpIHtcbiAgICAgICAgICBncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHAwWzBdLCBwMFsxXSwgcjAsIHAxWzBdLCBwMVsxXSwgcjEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY29sb3JTdG9wcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgdmFyIGMgPSBjb2xvclN0b3BzW2ldO1xuICAgICAgICAgIGdyYWQuYWRkQ29sb3JTdG9wKGNbMF0sIGNbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyYWQ7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZU1lc2hDYW52YXMgPSBmdW5jdGlvbiBjcmVhdGVNZXNoQ2FudmFzQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHAxLCBwMiwgcDMsIGMxLCBjMiwgYzMpIHtcbiAgICB2YXIgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgIGNvbG9ycyA9IGNvbnRleHQuY29sb3JzO1xuICAgIHZhciBieXRlcyA9IGRhdGEuZGF0YSxcbiAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICAgIHZhciB0bXA7XG5cbiAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgdG1wID0gcDE7XG4gICAgICBwMSA9IHAyO1xuICAgICAgcDIgPSB0bXA7XG4gICAgICB0bXAgPSBjMTtcbiAgICAgIGMxID0gYzI7XG4gICAgICBjMiA9IHRtcDtcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzW3AyICsgMV0gPiBjb29yZHNbcDMgKyAxXSkge1xuICAgICAgdG1wID0gcDI7XG4gICAgICBwMiA9IHAzO1xuICAgICAgcDMgPSB0bXA7XG4gICAgICB0bXAgPSBjMjtcbiAgICAgIGMyID0gYzM7XG4gICAgICBjMyA9IHRtcDtcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgdG1wID0gcDE7XG4gICAgICBwMSA9IHAyO1xuICAgICAgcDIgPSB0bXA7XG4gICAgICB0bXAgPSBjMTtcbiAgICAgIGMxID0gYzI7XG4gICAgICBjMiA9IHRtcDtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSAoY29vcmRzW3AxXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgICB2YXIgeTEgPSAoY29vcmRzW3AxICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG4gICAgdmFyIHgyID0gKGNvb3Jkc1twMl0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gICAgdmFyIHkyID0gKGNvb3Jkc1twMiArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuICAgIHZhciB4MyA9IChjb29yZHNbcDNdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICAgIHZhciB5MyA9IChjb29yZHNbcDMgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcblxuICAgIGlmICh5MSA+PSB5Mykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMXIgPSBjb2xvcnNbYzFdLFxuICAgICAgICBjMWcgPSBjb2xvcnNbYzEgKyAxXSxcbiAgICAgICAgYzFiID0gY29sb3JzW2MxICsgMl07XG4gICAgdmFyIGMyciA9IGNvbG9yc1tjMl0sXG4gICAgICAgIGMyZyA9IGNvbG9yc1tjMiArIDFdLFxuICAgICAgICBjMmIgPSBjb2xvcnNbYzIgKyAyXTtcbiAgICB2YXIgYzNyID0gY29sb3JzW2MzXSxcbiAgICAgICAgYzNnID0gY29sb3JzW2MzICsgMV0sXG4gICAgICAgIGMzYiA9IGNvbG9yc1tjMyArIDJdO1xuICAgIHZhciBtaW5ZID0gTWF0aC5yb3VuZCh5MSksXG4gICAgICAgIG1heFkgPSBNYXRoLnJvdW5kKHkzKTtcbiAgICB2YXIgeGEsIGNhciwgY2FnLCBjYWI7XG4gICAgdmFyIHhiLCBjYnIsIGNiZywgY2JiO1xuXG4gICAgZm9yICh2YXIgeSA9IG1pblk7IHkgPD0gbWF4WTsgeSsrKSB7XG4gICAgICBpZiAoeSA8IHkyKSB7XG4gICAgICAgIGxldCBrO1xuXG4gICAgICAgIGlmICh5IDwgeTEpIHtcbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfSBlbHNlIGlmICh5MSA9PT0geTIpIHtcbiAgICAgICAgICBrID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrID0gKHkxIC0geSkgLyAoeTEgLSB5Mik7XG4gICAgICAgIH1cblxuICAgICAgICB4YSA9IHgxIC0gKHgxIC0geDIpICogaztcbiAgICAgICAgY2FyID0gYzFyIC0gKGMxciAtIGMycikgKiBrO1xuICAgICAgICBjYWcgPSBjMWcgLSAoYzFnIC0gYzJnKSAqIGs7XG4gICAgICAgIGNhYiA9IGMxYiAtIChjMWIgLSBjMmIpICogaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrO1xuXG4gICAgICAgIGlmICh5ID4geTMpIHtcbiAgICAgICAgICBrID0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh5MiA9PT0geTMpIHtcbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrID0gKHkyIC0geSkgLyAoeTIgLSB5Myk7XG4gICAgICAgIH1cblxuICAgICAgICB4YSA9IHgyIC0gKHgyIC0geDMpICogaztcbiAgICAgICAgY2FyID0gYzJyIC0gKGMyciAtIGMzcikgKiBrO1xuICAgICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICAgIGNhYiA9IGMyYiAtIChjMmIgLSBjM2IpICogaztcbiAgICAgIH1cblxuICAgICAgbGV0IGs7XG5cbiAgICAgIGlmICh5IDwgeTEpIHtcbiAgICAgICAgayA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHkgPiB5Mykge1xuICAgICAgICBrID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsgPSAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICAgIH1cblxuICAgICAgeGIgPSB4MSAtICh4MSAtIHgzKSAqIGs7XG4gICAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgICBjYmcgPSBjMWcgLSAoYzFnIC0gYzNnKSAqIGs7XG4gICAgICBjYmIgPSBjMWIgLSAoYzFiIC0gYzNiKSAqIGs7XG4gICAgICB2YXIgeDFfID0gTWF0aC5yb3VuZChNYXRoLm1pbih4YSwgeGIpKTtcbiAgICAgIHZhciB4Ml8gPSBNYXRoLnJvdW5kKE1hdGgubWF4KHhhLCB4YikpO1xuICAgICAgdmFyIGogPSByb3dTaXplICogeSArIHgxXyAqIDQ7XG5cbiAgICAgIGZvciAodmFyIHggPSB4MV87IHggPD0geDJfOyB4KyspIHtcbiAgICAgICAgayA9ICh4YSAtIHgpIC8gKHhhIC0geGIpO1xuXG4gICAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICAgIGsgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGsgPiAxKSB7XG4gICAgICAgICAgayA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBieXRlc1tqKytdID0gY2FyIC0gKGNhciAtIGNicikgKiBrIHwgMDtcbiAgICAgICAgYnl0ZXNbaisrXSA9IGNhZyAtIChjYWcgLSBjYmcpICogayB8IDA7XG4gICAgICAgIGJ5dGVzW2orK10gPSBjYWIgLSAoY2FiIC0gY2JiKSAqIGsgfCAwO1xuICAgICAgICBieXRlc1tqKytdID0gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRyYXdGaWd1cmUoZGF0YSwgZmlndXJlLCBjb250ZXh0KSB7XG4gICAgdmFyIHBzID0gZmlndXJlLmNvb3JkcztcbiAgICB2YXIgY3MgPSBmaWd1cmUuY29sb3JzO1xuICAgIHZhciBpLCBpaTtcblxuICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICAgIHZhciB2ZXJ0aWNlc1BlclJvdyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgICAgdmFyIHJvd3MgPSBNYXRoLmZsb29yKHBzLmxlbmd0aCAvIHZlcnRpY2VzUGVyUm93KSAtIDE7XG4gICAgICAgIHZhciBjb2xzID0gdmVydGljZXNQZXJSb3cgLSAxO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICB2YXIgcSA9IGkgKiB2ZXJ0aWNlc1BlclJvdztcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1txXSwgcHNbcSArIDFdLCBwc1txICsgdmVydGljZXNQZXJSb3ddLCBjc1txXSwgY3NbcSArIDFdLCBjc1txICsgdmVydGljZXNQZXJSb3ddKTtcbiAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1txICsgdmVydGljZXNQZXJSb3cgKyAxXSwgcHNbcSArIDFdLCBwc1txICsgdmVydGljZXNQZXJSb3ddLCBjc1txICsgdmVydGljZXNQZXJSb3cgKyAxXSwgY3NbcSArIDFdLCBjc1txICsgdmVydGljZXNQZXJSb3ddKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInRyaWFuZ2xlc1wiOlxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHBzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDMpIHtcbiAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbaV0sIHBzW2kgKyAxXSwgcHNbaSArIDJdLCBjc1tpXSwgY3NbaSArIDFdLCBjc1tpICsgMl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgZmlndXJlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lc2hDYW52YXMoYm91bmRzLCBjb21iaW5lc1NjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgYmFja2dyb3VuZENvbG9yLCBjYWNoZWRDYW52YXNlcywgd2ViR0xDb250ZXh0KSB7XG4gICAgdmFyIEVYUEVDVEVEX1NDQUxFID0gMS4xO1xuICAgIHZhciBNQVhfUEFUVEVSTl9TSVpFID0gMzAwMDtcbiAgICB2YXIgQk9SREVSX1NJWkUgPSAyO1xuICAgIHZhciBvZmZzZXRYID0gTWF0aC5mbG9vcihib3VuZHNbMF0pO1xuICAgIHZhciBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pO1xuICAgIHZhciBib3VuZHNXaWR0aCA9IE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICB2YXIgYm91bmRzSGVpZ2h0ID0gTWF0aC5jZWlsKGJvdW5kc1szXSkgLSBvZmZzZXRZO1xuICAgIHZhciB3aWR0aCA9IE1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhib3VuZHNXaWR0aCAqIGNvbWJpbmVzU2NhbGVbMF0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICB2YXIgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVzU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICB2YXIgc2NhbGVYID0gYm91bmRzV2lkdGggLyB3aWR0aDtcbiAgICB2YXIgc2NhbGVZID0gYm91bmRzSGVpZ2h0IC8gaGVpZ2h0O1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgY29vcmRzLFxuICAgICAgY29sb3JzLFxuICAgICAgb2Zmc2V0WDogLW9mZnNldFgsXG4gICAgICBvZmZzZXRZOiAtb2Zmc2V0WSxcbiAgICAgIHNjYWxlWDogMSAvIHNjYWxlWCxcbiAgICAgIHNjYWxlWTogMSAvIHNjYWxlWVxuICAgIH07XG4gICAgdmFyIHBhZGRlZFdpZHRoID0gd2lkdGggKyBCT1JERVJfU0laRSAqIDI7XG4gICAgdmFyIHBhZGRlZEhlaWdodCA9IGhlaWdodCArIEJPUkRFUl9TSVpFICogMjtcbiAgICB2YXIgY2FudmFzLCB0bXBDYW52YXMsIGksIGlpO1xuXG4gICAgaWYgKHdlYkdMQ29udGV4dC5pc0VuYWJsZWQpIHtcbiAgICAgIGNhbnZhcyA9IHdlYkdMQ29udGV4dC5kcmF3RmlndXJlcyh7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgZmlndXJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgICB0bXBDYW52YXMgPSBjYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtZXNoXCIsIHBhZGRlZFdpZHRoLCBwYWRkZWRIZWlnaHQsIGZhbHNlKTtcbiAgICAgIHRtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShjYW52YXMsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICBjYW52YXMgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0bXBDYW52YXMgPSBjYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtZXNoXCIsIHBhZGRlZFdpZHRoLCBwYWRkZWRIZWlnaHQsIGZhbHNlKTtcbiAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgIHZhciBkYXRhID0gdG1wQ3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICB2YXIgYnl0ZXMgPSBkYXRhLmRhdGE7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBieXRlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSA0KSB7XG4gICAgICAgICAgYnl0ZXNbaV0gPSBiYWNrZ3JvdW5kQ29sb3JbMF07XG4gICAgICAgICAgYnl0ZXNbaSArIDFdID0gYmFja2dyb3VuZENvbG9yWzFdO1xuICAgICAgICAgIGJ5dGVzW2kgKyAyXSA9IGJhY2tncm91bmRDb2xvclsyXTtcbiAgICAgICAgICBieXRlc1tpICsgM10gPSAyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZpZ3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmVzW2ldLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgdG1wQ3R4LnB1dEltYWdlRGF0YShkYXRhLCBCT1JERVJfU0laRSwgQk9SREVSX1NJWkUpO1xuICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FudmFzLFxuICAgICAgb2Zmc2V0WDogb2Zmc2V0WCAtIEJPUkRFUl9TSVpFICogc2NhbGVYLFxuICAgICAgb2Zmc2V0WTogb2Zmc2V0WSAtIEJPUkRFUl9TSVpFICogc2NhbGVZLFxuICAgICAgc2NhbGVYLFxuICAgICAgc2NhbGVZXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVNZXNoQ2FudmFzO1xufSgpO1xuXG5TaGFkaW5nSVJzLk1lc2ggPSB7XG4gIGZyb21JUjogZnVuY3Rpb24gTWVzaF9mcm9tSVIocmF3KSB7XG4gICAgdmFyIGNvb3JkcyA9IHJhd1syXTtcbiAgICB2YXIgY29sb3JzID0gcmF3WzNdO1xuICAgIHZhciBmaWd1cmVzID0gcmF3WzRdO1xuICAgIHZhciBib3VuZHMgPSByYXdbNV07XG4gICAgdmFyIG1hdHJpeCA9IHJhd1s2XTtcbiAgICB2YXIgYmJveCA9IHJhd1s3XTtcbiAgICB2YXIgYmFja2dyb3VuZCA9IHJhd1s4XTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJQYXR0ZXJuXCIsXG4gICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBNZXNoX2dldFBhdHRlcm4oY3R4LCBvd25lciwgc2hhZGluZ0ZpbGwpIHtcbiAgICAgICAgYXBwbHlCb3VuZGluZ0JveChjdHgsIGJib3gpO1xuICAgICAgICB2YXIgc2NhbGU7XG5cbiAgICAgICAgaWYgKHNoYWRpbmdGaWxsKSB7XG4gICAgICAgICAgc2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUob3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICBpZiAobWF0cml4KSB7XG4gICAgICAgICAgICB2YXIgbWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG1hdHJpeCk7XG5cbiAgICAgICAgICAgIHNjYWxlID0gW3NjYWxlWzBdICogbWF0cml4U2NhbGVbMF0sIHNjYWxlWzFdICogbWF0cml4U2NhbGVbMV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gY3JlYXRlTWVzaENhbnZhcyhib3VuZHMsIHNjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgc2hhZGluZ0ZpbGwgPyBudWxsIDogYmFja2dyb3VuZCwgb3duZXIuY2FjaGVkQ2FudmFzZXMsIG93bmVyLndlYkdMQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKCFzaGFkaW5nRmlsbCkge1xuICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBtYXRyaXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgICAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCBcIm5vLXJlcGVhdFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuU2hhZGluZ0lScy5EdW1teSA9IHtcbiAgZnJvbUlSOiBmdW5jdGlvbiBEdW1teV9mcm9tSVIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiUGF0dGVyblwiLFxuICAgICAgZ2V0UGF0dGVybjogZnVuY3Rpb24gRHVtbXlfZnJvbUlSX2dldFBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBcImhvdHBpbmtcIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRTaGFkaW5nUGF0dGVybkZyb21JUihyYXcpIHtcbiAgdmFyIHNoYWRpbmdJUiA9IFNoYWRpbmdJUnNbcmF3WzBdXTtcblxuICBpZiAoIXNoYWRpbmdJUikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBJUiB0eXBlOiAke3Jhd1swXX1gKTtcbiAgfVxuXG4gIHJldHVybiBzaGFkaW5nSVIuZnJvbUlSKHJhdyk7XG59XG5cbnZhciBUaWxpbmdQYXR0ZXJuID0gZnVuY3Rpb24gVGlsaW5nUGF0dGVybkNsb3N1cmUoKSB7XG4gIHZhciBQYWludFR5cGUgPSB7XG4gICAgQ09MT1JFRDogMSxcbiAgICBVTkNPTE9SRUQ6IDJcbiAgfTtcbiAgdmFyIE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwO1xuXG4gIGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCBjdHgsIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSwgYmFzZVRyYW5zZm9ybSkge1xuICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gSVJbMl07XG4gICAgdGhpcy5tYXRyaXggPSBJUlszXSB8fCBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgdGhpcy5iYm94ID0gSVJbNF07XG4gICAgdGhpcy54c3RlcCA9IElSWzVdO1xuICAgIHRoaXMueXN0ZXAgPSBJUls2XTtcbiAgICB0aGlzLnBhaW50VHlwZSA9IElSWzddO1xuICAgIHRoaXMudGlsaW5nVHlwZSA9IElSWzhdO1xuICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBiYXNlVHJhbnNmb3JtO1xuICAgIHRoaXMudHlwZSA9IFwiUGF0dGVyblwiO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICB9XG5cbiAgVGlsaW5nUGF0dGVybi5wcm90b3R5cGUgPSB7XG4gICAgY3JlYXRlUGF0dGVybkNhbnZhczogZnVuY3Rpb24gVGlsaW5QYXR0ZXJuX2NyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpIHtcbiAgICAgIHZhciBvcGVyYXRvckxpc3QgPSB0aGlzLm9wZXJhdG9yTGlzdDtcbiAgICAgIHZhciBiYm94ID0gdGhpcy5iYm94O1xuICAgICAgdmFyIHhzdGVwID0gdGhpcy54c3RlcDtcbiAgICAgIHZhciB5c3RlcCA9IHRoaXMueXN0ZXA7XG4gICAgICB2YXIgcGFpbnRUeXBlID0gdGhpcy5wYWludFR5cGU7XG4gICAgICB2YXIgdGlsaW5nVHlwZSA9IHRoaXMudGlsaW5nVHlwZTtcbiAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB2YXIgY2FudmFzR3JhcGhpY3NGYWN0b3J5ID0gdGhpcy5jYW52YXNHcmFwaGljc0ZhY3Rvcnk7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaWxpbmdUeXBlOiBcIiArIHRpbGluZ1R5cGUpO1xuICAgICAgdmFyIHgwID0gYmJveFswXSxcbiAgICAgICAgICB5MCA9IGJib3hbMV0sXG4gICAgICAgICAgeDEgPSBiYm94WzJdLFxuICAgICAgICAgIHkxID0gYmJveFszXTtcblxuICAgICAgdmFyIG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgIHZhciBjdXJNYXRyaXhTY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgdmFyIGNvbWJpbmVkU2NhbGUgPSBbbWF0cml4U2NhbGVbMF0gKiBjdXJNYXRyaXhTY2FsZVswXSwgbWF0cml4U2NhbGVbMV0gKiBjdXJNYXRyaXhTY2FsZVsxXV07XG4gICAgICB2YXIgZGlteCA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKHhzdGVwLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIGNvbWJpbmVkU2NhbGVbMF0pO1xuICAgICAgdmFyIGRpbXkgPSB0aGlzLmdldFNpemVBbmRTY2FsZSh5c3RlcCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCwgY29tYmluZWRTY2FsZVsxXSk7XG4gICAgICB2YXIgdG1wQ2FudmFzID0gb3duZXIuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwicGF0dGVyblwiLCBkaW14LnNpemUsIGRpbXkuc2l6ZSwgdHJ1ZSk7XG4gICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICB2YXIgZ3JhcGhpY3MgPSBjYW52YXNHcmFwaGljc0ZhY3RvcnkuY3JlYXRlQ2FudmFzR3JhcGhpY3ModG1wQ3R4KTtcbiAgICAgIGdyYXBoaWNzLmdyb3VwTGV2ZWwgPSBvd25lci5ncm91cExldmVsO1xuICAgICAgdGhpcy5zZXRGaWxsQW5kU3Ryb2tlU3R5bGVUb0NvbnRleHQoZ3JhcGhpY3MsIHBhaW50VHlwZSwgY29sb3IpO1xuICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtKGRpbXguc2NhbGUsIDAsIDAsIGRpbXkuc2NhbGUsIDAsIDApO1xuICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtKDEsIDAsIDAsIDEsIC14MCwgLXkwKTtcbiAgICAgIHRoaXMuY2xpcEJib3goZ3JhcGhpY3MsIGJib3gsIHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIGdyYXBoaWNzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTtcbiAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybSgxLCAwLCAwLCAxLCB4MCwgeTApO1xuICAgICAgdGhpcy5jdHguc2NhbGUoMSAvIGRpbXguc2NhbGUsIDEgLyBkaW15LnNjYWxlKTtcbiAgICAgIHJldHVybiB0bXBDYW52YXMuY2FudmFzO1xuICAgIH0sXG4gICAgZ2V0U2l6ZUFuZFNjYWxlOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX2dldFNpemVBbmRTY2FsZShzdGVwLCByZWFsT3V0cHV0U2l6ZSwgc2NhbGUpIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmFicyhzdGVwKTtcbiAgICAgIHZhciBtYXhTaXplID0gTWF0aC5tYXgoTUFYX1BBVFRFUk5fU0laRSwgcmVhbE91dHB1dFNpemUpO1xuICAgICAgdmFyIHNpemUgPSBNYXRoLmNlaWwoc3RlcCAqIHNjYWxlKTtcblxuICAgICAgaWYgKHNpemUgPj0gbWF4U2l6ZSkge1xuICAgICAgICBzaXplID0gbWF4U2l6ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjYWxlID0gc2l6ZSAvIHN0ZXA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjYWxlLFxuICAgICAgICBzaXplXG4gICAgICB9O1xuICAgIH0sXG4gICAgY2xpcEJib3g6IGZ1bmN0aW9uIGNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdmFyIGJib3hXaWR0aCA9IHgxIC0geDA7XG4gICAgICAgIHZhciBiYm94SGVpZ2h0ID0geTEgLSB5MDtcbiAgICAgICAgZ3JhcGhpY3MuY3R4LnJlY3QoeDAsIHkwLCBiYm94V2lkdGgsIGJib3hIZWlnaHQpO1xuICAgICAgICBncmFwaGljcy5jbGlwKCk7XG4gICAgICAgIGdyYXBoaWNzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dDogZnVuY3Rpb24gc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gZ3JhcGhpY3MuY3R4LFxuICAgICAgICAgICAgY3VycmVudCA9IGdyYXBoaWNzLmN1cnJlbnQ7XG5cbiAgICAgIHN3aXRjaCAocGFpbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgUGFpbnRUeXBlLkNPTE9SRUQ6XG4gICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgIGN1cnJlbnQuZmlsbENvbG9yID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGFpbnRUeXBlLlVOQ09MT1JFRDpcbiAgICAgICAgICB2YXIgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG5cbiAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjc3NDb2xvcjtcbiAgICAgICAgICBjdXJyZW50LmZpbGxDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICAgIGN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcGFpbnQgdHlwZTogJHtwYWludFR5cGV9YCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX2dldFBhdHRlcm4oY3R4LCBvd25lcikge1xuICAgICAgY3R4ID0gdGhpcy5jdHg7XG4gICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLm1hdHJpeCk7XG4gICAgICB2YXIgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcyA9IHRoaXMuY3JlYXRlUGF0dGVybkNhbnZhcyhvd25lcik7XG4gICAgICByZXR1cm4gY3R4LmNyZWF0ZVBhdHRlcm4odGVtcG9yYXJ5UGF0dGVybkNhbnZhcywgXCJyZXBlYXRcIik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gVGlsaW5nUGF0dGVybjtcbn0oKTtcblxuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gVGlsaW5nUGF0dGVybjtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5leHBvcnRzLkdsb2JhbFdvcmtlck9wdGlvbnMgPSBHbG9iYWxXb3JrZXJPcHRpb25zO1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID0gR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID09PSB1bmRlZmluZWQgPyBudWxsIDogR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0O1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICh0eXBlb2YgcmVhc29uICE9PSBcIm9iamVjdFwiIHx8IHJlYXNvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5zdGF0dXMpO1xuXG4gICAgY2FzZSBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5kZXRhaWxzKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbmNsYXNzIE1lc3NhZ2VIYW5kbGVyIHtcbiAgY29uc3RydWN0b3Ioc291cmNlTmFtZSwgdGFyZ2V0TmFtZSwgY29tT2JqKSB7XG4gICAgdGhpcy5zb3VyY2VOYW1lID0gc291cmNlTmFtZTtcbiAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgIHRoaXMuY29tT2JqID0gY29tT2JqO1xuICAgIHRoaXMuY2FsbGJhY2tJZCA9IDE7XG4gICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHRydWU7XG4gICAgdGhpcy5zdHJlYW1TaW5rcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5hY3Rpb25IYW5kbGVyID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgIGlmIChkYXRhLnRhcmdldE5hbWUgIT09IHRoaXMuc291cmNlTmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbSkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSWQgPSBkYXRhLmNhbGxiYWNrSWQ7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdO1xuXG4gICAgICAgIGlmICghY2FwYWJpbGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgJHtjYWxsYmFja0lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2sgPT09IENhbGxiYWNrS2luZC5EQVRBKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkVSUk9SKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY2FsbGJhY2sgY2FzZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcblxuICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtkYXRhLmFjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICBjb25zdCBjYlNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgIGNvbnN0IGNiVGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKGFjdGlvbihkYXRhLmRhdGEpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuREFUQSxcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IGNiU291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWU6IGNiVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFja0tpbmQuRVJST1IsXG4gICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYWN0aW9uKGRhdGEuZGF0YSk7XG4gICAgfTtcblxuICAgIGNvbU9iai5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxuICBvbihhY3Rpb25OYW1lLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgYWggPSB0aGlzLmFjdGlvbkhhbmRsZXI7XG5cbiAgICBpZiAoYWhbYWN0aW9uTmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcIiR7YWN0aW9uTmFtZX1cImApO1xuICAgIH1cblxuICAgIGFoW2FjdGlvbk5hbWVdID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNlbmQoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgc291cmNlTmFtZTogdGhpcy5zb3VyY2VOYW1lLFxuICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgZGF0YVxuICAgIH0sIHRyYW5zZmVycyk7XG4gIH1cblxuICBzZW5kV2l0aFByb21pc2UoYWN0aW9uTmFtZSwgZGF0YSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3QgY2FsbGJhY2tJZCA9IHRoaXMuY2FsbGJhY2tJZCsrO1xuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXSA9IGNhcGFiaWxpdHk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgIHRhcmdldE5hbWU6IHRoaXMudGFyZ2V0TmFtZSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICBjYWxsYmFja0lkLFxuICAgICAgICBkYXRhXG4gICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgIGNvbnN0IHN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZCsrO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRoaXMudGFyZ2V0TmFtZTtcbiAgICBjb25zdCBjb21PYmogPSB0aGlzLmNvbU9iajtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIHN0YXJ0OiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSA9IHtcbiAgICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgIHB1bGxDYWxsOiBudWxsLFxuICAgICAgICAgIGNhbmNlbENhbGw6IG51bGwsXG4gICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fcG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZVxuICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuXG4gICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBwdWxsOiBjb250cm9sbGVyID0+IHtcbiAgICAgICAgY29uc3QgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsID0gcHVsbENhcGFiaWxpdHk7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHVsbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH0sXG4gICAgICBjYW5jZWw6IHJlYXNvbiA9PiB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLCBcImNhbmNlbCBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG4gICAgICAgIGNvbnN0IGNhbmNlbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5DQU5DRUwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYW5jZWxDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG4gICAgfSwgcXVldWVpbmdTdHJhdGVneSk7XG4gIH1cblxuICBfY3JlYXRlU3RyZWFtU2luayhkYXRhKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbVNpbmsgPSB7XG4gICAgICBlbnF1ZXVlKGNodW5rLCBzaXplID0gMSwgdHJhbnNmZXJzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgIHRoaXMuc2lua0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgdGhpcy5yZWFkeSA9IHRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuX3Bvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgY29uc3Qgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuXG4gICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgY2FzZSBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFOlxuICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uc3RhcnRDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5QVUxMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXS5kZXNpcmVkU2l6ZSA8PSAwICYmIGRhdGEuZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25QdWxsXG4gICAgICAgIH0gPSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUob25QdWxsICYmIG9uUHVsbCgpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5FTlFVRVVFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNMT1NFOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLCBcImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jb250cm9sbGVyLmVycm9yKHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcblxuICAgICAgICB0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuQ0FOQ0VMOlxuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgb25DYW5jZWxcbiAgICAgICAgfSA9IHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF07XG4gICAgICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShvbkNhbmNlbCAmJiBvbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBkZWxldGUgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5zdGFydENhbGwsIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnB1bGxDYWxsLCB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsXS5tYXAoZnVuY3Rpb24gKGNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KSk7XG4gICAgZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdO1xuICB9XG5cbiAgX3Bvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycykge1xuICAgIGlmICh0cmFuc2ZlcnMgJiYgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycykge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gTWVzc2FnZUhhbmRsZXI7XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTWV0YWRhdGEgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfeG1sX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTUpO1xuXG5jbGFzcyBNZXRhZGF0YSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiwgXCJNZXRhZGF0YTogaW5wdXQgaXMgbm90IGEgc3RyaW5nXCIpO1xuICAgIGRhdGEgPSB0aGlzLl9yZXBhaXIoZGF0YSk7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcigpO1xuICAgIGNvbnN0IHhtbERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhKTtcbiAgICB0aGlzLl9tZXRhZGF0YU1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGlmICh4bWxEb2N1bWVudCkge1xuICAgICAgdGhpcy5fcGFyc2UoeG1sRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9yZXBhaXIoZGF0YSkge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL15bXjxdKy8sIFwiXCIpLnJlcGxhY2UoLz5cXFxcMzc2XFxcXDM3NyhbXjxdKykvZywgZnVuY3Rpb24gKGFsbCwgY29kZXMpIHtcbiAgICAgIGNvbnN0IGJ5dGVzID0gY29kZXMucmVwbGFjZSgvXFxcXChbMC0zXSkoWzAtN10pKFswLTddKS9nLCBmdW5jdGlvbiAoY29kZSwgZDEsIGQyLCBkMykge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShkMSAqIDY0ICsgZDIgKiA4ICsgZDMgKiAxKTtcbiAgICAgIH0pLnJlcGxhY2UoLyYoYW1wfGFwb3N8Z3R8bHR8cXVvdCk7L2csIGZ1bmN0aW9uIChzdHIsIG5hbWUpIHtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgY2FzZSBcImFtcFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJlwiO1xuXG4gICAgICAgICAgY2FzZSBcImFwb3NcIjpcbiAgICAgICAgICAgIHJldHVybiBcIidcIjtcblxuICAgICAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiPlwiO1xuXG4gICAgICAgICAgY2FzZSBcImx0XCI6XG4gICAgICAgICAgICByZXR1cm4gXCI8XCI7XG5cbiAgICAgICAgICBjYXNlIFwicXVvdFwiOlxuICAgICAgICAgICAgcmV0dXJuICdcIic7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYF9yZXBhaXI6ICR7bmFtZX0gaXNuJ3QgZGVmaW5lZC5gKTtcbiAgICAgIH0pO1xuICAgICAgbGV0IGNoYXJzID0gXCJcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnl0ZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICBjb25zdCBjb2RlID0gYnl0ZXMuY2hhckNvZGVBdChpKSAqIDI1NiArIGJ5dGVzLmNoYXJDb2RlQXQoaSArIDEpO1xuXG4gICAgICAgIGlmIChjb2RlID49IDMyICYmIGNvZGUgPCAxMjcgJiYgY29kZSAhPT0gNjAgJiYgY29kZSAhPT0gNjIgJiYgY29kZSAhPT0gMzgpIHtcbiAgICAgICAgICBjaGFycyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXJzICs9IFwiJiN4XCIgKyAoMHgxMDAwMCArIGNvZGUpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCI+XCIgKyBjaGFycztcbiAgICB9KTtcbiAgfVxuXG4gIF9wYXJzZSh4bWxEb2N1bWVudCkge1xuICAgIGxldCByZGYgPSB4bWxEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICBpZiAocmRmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICByZGYgPSByZGYuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKHJkZiAmJiByZGYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJyZGY6cmRmXCIpIHtcbiAgICAgICAgcmRmID0gcmRmLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vZGVOYW1lID0gcmRmID8gcmRmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuXG4gICAgaWYgKCFyZGYgfHwgbm9kZU5hbWUgIT09IFwicmRmOnJkZlwiIHx8ICFyZGYuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRyZW4gPSByZGYuY2hpbGROb2RlcztcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGRlc2MgPSBjaGlsZHJlbltpXTtcblxuICAgICAgaWYgKGRlc2Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJyZGY6ZGVzY3JpcHRpb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gZGVzYy5jaGlsZE5vZGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgaWYgKGRlc2MuY2hpbGROb2Rlc1tqXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGRlc2MuY2hpbGROb2Rlc1tqXTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZW50cnkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIHRoaXMuX21ldGFkYXRhTWFwLnNldChuYW1lLCBlbnRyeS50ZXh0Q29udGVudC50cmltKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFNYXAuaGFzKG5hbWUpID8gdGhpcy5fbWV0YWRhdGFNYXAuZ2V0KG5hbWUpIDogbnVsbDtcbiAgfVxuXG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuX21ldGFkYXRhTWFwKTtcbiAgfVxuXG4gIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhTWFwLmhhcyhuYW1lKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTWV0YWRhdGEgPSBNZXRhZGF0YTtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSB2b2lkIDA7XG5jb25zdCBYTUxQYXJzZXJFcnJvckNvZGUgPSB7XG4gIE5vRXJyb3I6IDAsXG4gIEVuZE9mRG9jdW1lbnQ6IC0xLFxuICBVbnRlcm1pbmF0ZWRDZGF0OiAtMixcbiAgVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246IC0zLFxuICBVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246IC00LFxuICBVbnRlcm1pbmF0ZWRDb21tZW50OiAtNSxcbiAgTWFsZm9ybWVkRWxlbWVudDogLTYsXG4gIE91dE9mTWVtb3J5OiAtNyxcbiAgVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6IC04LFxuICBVbnRlcm1pbmF0ZWRFbGVtZW50OiAtOSxcbiAgRWxlbWVudE5ldmVyQmVndW46IC0xMFxufTtcblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKHMsIGluZGV4KSB7XG4gIGNvbnN0IGNoID0gc1tpbmRleF07XG4gIHJldHVybiBjaCA9PT0gXCIgXCIgfHwgY2ggPT09IFwiXFxuXCIgfHwgY2ggPT09IFwiXFxyXCIgfHwgY2ggPT09IFwiXFx0XCI7XG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZVN0cmluZyhzKSB7XG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGlmICghaXNXaGl0ZXNwYWNlKHMsIGkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNsYXNzIFhNTFBhcnNlckJhc2Uge1xuICBfcmVzb2x2ZUVudGl0aWVzKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKC8mKFteO10rKTsvZywgKGFsbCwgZW50aXR5KSA9PiB7XG4gICAgICBpZiAoZW50aXR5LnN1YnN0cmluZygwLCAyKSA9PT0gXCIjeFwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMiksIDE2KSk7XG4gICAgICB9IGVsc2UgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMSkgPT09IFwiI1wiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMSksIDEwKSk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZW50aXR5KSB7XG4gICAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICAgIHJldHVybiBcIjxcIjtcblxuICAgICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgICByZXR1cm4gXCI+XCI7XG5cbiAgICAgICAgY2FzZSBcImFtcFwiOlxuICAgICAgICAgIHJldHVybiBcIiZcIjtcblxuICAgICAgICBjYXNlIFwicXVvdFwiOlxuICAgICAgICAgIHJldHVybiAnXCInO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkoZW50aXR5KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9wYXJzZUNvbnRlbnQocywgc3RhcnQpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gW107XG4gICAgbGV0IHBvcyA9IHN0YXJ0O1xuXG4gICAgZnVuY3Rpb24gc2tpcFdzKCkge1xuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIGlzV2hpdGVzcGFjZShzLCBwb3MpKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiL1wiKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gcy5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7XG4gICAgc2tpcFdzKCk7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiL1wiICYmIHNbcG9zXSAhPT0gXCI/XCIpIHtcbiAgICAgIHNraXBXcygpO1xuICAgICAgbGV0IGF0dHJOYW1lID0gXCJcIixcbiAgICAgICAgICBhdHRyVmFsdWUgPSBcIlwiO1xuXG4gICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgIWlzV2hpdGVzcGFjZShzLCBwb3MpICYmIHNbcG9zXSAhPT0gXCI9XCIpIHtcbiAgICAgICAgYXR0ck5hbWUgKz0gc1twb3NdO1xuICAgICAgICArK3BvcztcbiAgICAgIH1cblxuICAgICAgc2tpcFdzKCk7XG5cbiAgICAgIGlmIChzW3Bvc10gIT09IFwiPVwiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICArK3BvcztcbiAgICAgIHNraXBXcygpO1xuICAgICAgY29uc3QgYXR0ckVuZENoYXIgPSBzW3Bvc107XG5cbiAgICAgIGlmIChhdHRyRW5kQ2hhciAhPT0gJ1wiJyAmJiBhdHRyRW5kQ2hhciAhPT0gXCInXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF0dHJFbmRJbmRleCA9IHMuaW5kZXhPZihhdHRyRW5kQ2hhciwgKytwb3MpO1xuXG4gICAgICBpZiAoYXR0ckVuZEluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXR0clZhbHVlID0gcy5zdWJzdHJpbmcocG9zLCBhdHRyRW5kSW5kZXgpO1xuICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogYXR0ck5hbWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLl9yZXNvbHZlRW50aXRpZXMoYXR0clZhbHVlKVxuICAgICAgfSk7XG4gICAgICBwb3MgPSBhdHRyRW5kSW5kZXggKyAxO1xuICAgICAgc2tpcFdzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocywgc3RhcnQpIHtcbiAgICBsZXQgcG9zID0gc3RhcnQ7XG5cbiAgICBmdW5jdGlvbiBza2lwV3MoKSB7XG4gICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgaXNXaGl0ZXNwYWNlKHMsIHBvcykpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09IFwiPlwiICYmIHNbcG9zXSAhPT0gXCIvXCIpIHtcbiAgICAgICsrcG9zO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBzLnN1YnN0cmluZyhzdGFydCwgcG9zKTtcbiAgICBza2lwV3MoKTtcbiAgICBjb25zdCBhdHRyU3RhcnQgPSBwb3M7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gXCI/XCIgfHwgc1twb3MgKyAxXSAhPT0gXCI+XCIpKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHMuc3Vic3RyaW5nKGF0dHJTdGFydCwgcG9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBwYXJzZVhtbChzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2ggPSBzW2ldO1xuICAgICAgbGV0IGogPSBpO1xuXG4gICAgICBpZiAoY2ggPT09IFwiPFwiKSB7XG4gICAgICAgICsrajtcbiAgICAgICAgY29uc3QgY2gyID0gc1tqXTtcbiAgICAgICAgbGV0IHE7XG5cbiAgICAgICAgc3dpdGNoIChjaDIpIHtcbiAgICAgICAgICBjYXNlIFwiL1wiOlxuICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIj5cIiwgaik7XG5cbiAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICsrajtcblxuICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gXCI/PlwiKSB7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25QaShwaS5uYW1lLCBwaS52YWx1ZSk7XG4gICAgICAgICAgICBqICs9IHBpLnBhcnNlZCArIDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCIhXCI6XG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyAzKSA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoXCItLT5cIiwgaiArIDMpO1xuXG4gICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQocy5zdWJzdHJpbmcoaiArIDMsIHEpKTtcbiAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSBcIltDREFUQVtcIikge1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiXV0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENkYXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICBqID0gcSArIDM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgOCkgPT09IFwiRE9DVFlQRVwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHEyID0gcy5pbmRleE9mKFwiW1wiLCBqICsgOCk7XG4gICAgICAgICAgICAgIGxldCBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiPlwiLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxMiA+IDAgJiYgcSA+IHEyKSB7XG4gICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIl0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbXBsZXhEb2N0eXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICB0aGlzLm9uRG9jdHlwZShkb2N0eXBlQ29udGVudCk7XG4gICAgICAgICAgICAgIGogPSBxICsgKGNvbXBsZXhEb2N0eXBlID8gMiA6IDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fcGFyc2VDb250ZW50KHMsIGopO1xuXG4gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAyKSA9PT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAxKSAhPT0gXCI+XCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uQmVnaW5FbGVtZW50KGNvbnRlbnQubmFtZSwgY29udGVudC5hdHRyaWJ1dGVzLCBpc0Nsb3NlZCk7XG4gICAgICAgICAgICBqICs9IGNvbnRlbnQucGFyc2VkICsgKGlzQ2xvc2VkID8gMiA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChqIDwgcy5sZW5ndGggJiYgc1tqXSAhPT0gXCI8XCIpIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIHRoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyh0ZXh0KSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgcmV0dXJuIGAmJHtuYW1lfTtgO1xuICB9XG5cbiAgb25QaShuYW1lLCB2YWx1ZSkge31cblxuICBvbkNvbW1lbnQodGV4dCkge31cblxuICBvbkNkYXRhKHRleHQpIHt9XG5cbiAgb25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KSB7fVxuXG4gIG9uVGV4dCh0ZXh0KSB7fVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHt9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHt9XG5cbiAgb25FcnJvcihjb2RlKSB7fVxuXG59XG5cbmNsYXNzIFNpbXBsZURPTU5vZGUge1xuICBjb25zdHJ1Y3Rvcihub2RlTmFtZSwgbm9kZVZhbHVlKSB7XG4gICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgIHRoaXMubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcyAmJiB0aGlzLmNoaWxkTm9kZXNbMF07XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICB9XG5cbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIGlmICghdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50ZXh0Q29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9XG5cbiAgaGFzQ2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICB9XG5cbn1cblxuY2xhc3MgU2ltcGxlWE1MUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9zdGFjayA9IG51bGw7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gIH1cblxuICBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IFtdO1xuICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5wYXJzZVhtbChkYXRhKTtcblxuICAgIGlmICh0aGlzLl9lcnJvckNvZGUgIT09IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IFtkb2N1bWVudEVsZW1lbnRdID0gdGhpcy5fY3VycmVudEZyYWdtZW50O1xuXG4gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvY3VtZW50RWxlbWVudFxuICAgIH07XG4gIH1cblxuICBvblJlc29sdmVFbnRpdHkobmFtZSkge1xuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSBcImFwb3NcIjpcbiAgICAgICAgcmV0dXJuIFwiJ1wiO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5vblJlc29sdmVFbnRpdHkobmFtZSk7XG4gIH1cblxuICBvblRleHQodGV4dCkge1xuICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoXCIjdGV4dFwiLCB0ZXh0KTtcblxuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICB9XG5cbiAgb25DZGF0YSh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKFwiI3RleHRcIiwgdGV4dCk7XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcbiAgfVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHtcbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUobmFtZSk7XG4gICAgbm9kZS5jaGlsZE5vZGVzID0gW107XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbm9kZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRGcmFnbWVudFt0aGlzLl9jdXJyZW50RnJhZ21lbnQubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGFzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsYXN0RWxlbWVudC5jaGlsZE5vZGVzW2ldLnBhcmVudE5vZGUgPSBsYXN0RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBvbkVycm9yKGNvZGUpIHtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSBTaW1wbGVYTUxQYXJzZXI7XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuT3B0aW9uYWxDb250ZW50Q29uZmlnID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBPcHRpb25hbENvbnRlbnRHcm91cCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGludGVudCkge1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmludGVudCA9IGludGVudDtcbiAgfVxuXG59XG5cbmNsYXNzIE9wdGlvbmFsQ29udGVudENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRvciA9IG51bGw7XG4gICAgdGhpcy5fb3JkZXIgPSBudWxsO1xuICAgIHRoaXMuX2dyb3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuY3JlYXRvciA9IGRhdGEuY3JlYXRvcjtcbiAgICB0aGlzLl9vcmRlciA9IGRhdGEub3JkZXI7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRhdGEuZ3JvdXBzKSB7XG4gICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwLmlkLCBuZXcgT3B0aW9uYWxDb250ZW50R3JvdXAoZ3JvdXAubmFtZSwgZ3JvdXAuaW50ZW50KSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuYmFzZVN0YXRlID09PSBcIk9GRlwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2dyb3Vwcykge1xuICAgICAgICBncm91cC52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvbiBvZiBkYXRhLm9uKSB7XG4gICAgICB0aGlzLl9ncm91cHMuZ2V0KG9uKS52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9mZiBvZiBkYXRhLm9mZikge1xuICAgICAgdGhpcy5fZ3JvdXBzLmdldChvZmYpLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1Zpc2libGUoZ3JvdXApIHtcbiAgICBpZiAoZ3JvdXAudHlwZSA9PT0gXCJPQ0dcIikge1xuICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGdyb3VwLmlkKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2dyb3VwLmlkfWApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXAuaWQpLnZpc2libGU7XG4gICAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcIk9DTURcIikge1xuICAgICAgaWYgKGdyb3VwLmV4cHJlc3Npb24pIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVmlzaWJpbGl0eSBleHByZXNzaW9uIG5vdCBzdXBwb3J0ZWQgeWV0LlwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFncm91cC5wb2xpY3kgfHwgZ3JvdXAucG9saWN5ID09PSBcIkFueU9uXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuX2dyb3Vwcy5nZXQoaWQpLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZ3JvdXAucG9saWN5ID09PSBcIkFsbE9uXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnBvbGljeSA9PT0gXCJBbnlPZmZcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdyb3VwLmlkcykge1xuICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7aWR9YCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMuX2dyb3Vwcy5nZXQoaWQpLnZpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoZ3JvdXAucG9saWN5ID09PSBcIkFsbE9mZlwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgVW5rbm93biBvcHRpb25hbCBjb250ZW50IHBvbGljeSAke2dyb3VwLnBvbGljeX0uYCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFVua25vd24gZ3JvdXAgdHlwZSAke2dyb3VwLnR5cGV9LmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2V0VmlzaWJpbGl0eShpZCwgdmlzaWJsZSA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoaWQpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2dyb3Vwcy5nZXQoaWQpLnZpc2libGUgPSAhIXZpc2libGU7XG4gIH1cblxuICBnZXRPcmRlcigpIHtcbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5zaXplKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3JkZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vcmRlci5zbGljZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2dyb3Vwcy5rZXlzKCkpO1xuICB9XG5cbiAgZ2V0R3JvdXBzKCkge1xuICAgIGlmICghdGhpcy5fZ3JvdXBzLnNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5fZ3JvdXBzKTtcbiAgfVxuXG4gIGdldEdyb3VwKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyb3Vwcy5nZXQoaWQpIHx8IG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLk9wdGlvbmFsQ29udGVudENvbmZpZyA9IE9wdGlvbmFsQ29udGVudENvbmZpZztcblxuLyoqKi8gfSksXG4vKiAxNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtIHtcbiAgY29uc3RydWN0b3IocGFyYW1zLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShwZGZEYXRhUmFuZ2VUcmFuc3BvcnQsICdQREZEYXRhVHJhbnNwb3J0U3RyZWFtIC0gbWlzc2luZyByZXF1aXJlZCBcInBkZkRhdGFSYW5nZVRyYW5zcG9ydFwiIGFyZ3VtZW50LicpO1xuICAgIHRoaXMuX3F1ZXVlZENodW5rcyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZSA9IHBhcmFtcy5wcm9ncmVzc2l2ZURvbmUgfHwgZmFsc2U7XG4gICAgY29uc3QgaW5pdGlhbERhdGEgPSBwYXJhbXMuaW5pdGlhbERhdGE7XG5cbiAgICBpZiAoaW5pdGlhbERhdGEgJiYgaW5pdGlhbERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoaW5pdGlhbERhdGEpLmJ1ZmZlcjtcblxuICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goYnVmZmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQgPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQ7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhcGFyYW1zLmRpc2FibGVTdHJlYW07XG4gICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFwYXJhbXMuZGlzYWJsZVJhbmdlO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBwYXJhbXMubGVuZ3RoO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlYWRlcnMgPSBbXTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRSYW5nZUxpc3RlbmVyKChiZWdpbiwgY2h1bmspID0+IHtcbiAgICAgIHRoaXMuX29uUmVjZWl2ZURhdGEoe1xuICAgICAgICBiZWdpbixcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzTGlzdGVuZXIoKGxvYWRlZCwgdG90YWwpID0+IHtcbiAgICAgIHRoaXMuX29uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQsXG4gICAgICAgIHRvdGFsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcihjaHVuayA9PiB7XG4gICAgICB0aGlzLl9vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX29uUHJvZ3Jlc3NpdmVEb25lKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQudHJhbnNwb3J0UmVhZHkoKTtcbiAgfVxuXG4gIF9vblJlY2VpdmVEYXRhKGFyZ3MpIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShhcmdzLmNodW5rKS5idWZmZXI7XG5cbiAgICBpZiAoYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuX2VucXVldWUoYnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoZnVuY3Rpb24gKHJhbmdlUmVhZGVyKSB7XG4gICAgICAgIGlmIChyYW5nZVJlYWRlci5fYmVnaW4gIT09IGFyZ3MuYmVnaW4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZVJlYWRlci5fZW5xdWV1ZShidWZmZXIpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGZvdW5kLCBcIl9vblJlY2VpdmVEYXRhIC0gbm8gYFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcmAgaW5zdGFuY2UgZm91bmQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA/IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9sb2FkZWQgOiAwO1xuICB9XG5cbiAgX29uUHJvZ3Jlc3MoZXZ0KSB7XG4gICAgaWYgKGV2dC50b3RhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaXJzdFJlYWRlciA9IHRoaXMuX3JhbmdlUmVhZGVyc1swXTtcblxuICAgICAgaWYgKGZpcnN0UmVhZGVyICYmIGZpcnN0UmVhZGVyLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgZmlyc3RSZWFkZXIub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG5cbiAgICAgIGlmIChmdWxsUmVhZGVyICYmIGZ1bGxSZWFkZXIub25Qcm9ncmVzcykge1xuICAgICAgICBmdWxsUmVhZGVyLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCxcbiAgICAgICAgICB0b3RhbDogZXZ0LnRvdGFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblByb2dyZXNzaXZlRG9uZSgpIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLnByb2dyZXNzaXZlRG9uZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZSA9IHRydWU7XG4gIH1cblxuICBfcmVtb3ZlUmFuZ2VSZWFkZXIocmVhZGVyKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHJlYWRlcik7XG5cbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9yYW5nZVJlYWRlcnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERkRhdGFUcmFuc3BvcnRTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgY29uc3QgcXVldWVkQ2h1bmtzID0gdGhpcy5fcXVldWVkQ2h1bmtzO1xuICAgIHRoaXMuX3F1ZXVlZENodW5rcyA9IG51bGw7XG4gICAgcmV0dXJuIG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyKHRoaXMsIHF1ZXVlZENodW5rcywgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lKTtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlcnMgPSB0aGlzLl9yYW5nZVJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJhbmdlUmVhZGVyKSB7XG4gICAgICByYW5nZVJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gUERGRGF0YVRyYW5zcG9ydFN0cmVhbTtcblxuY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgcXVldWVkQ2h1bmtzLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9kb25lID0gcHJvZ3Jlc3NpdmVEb25lIHx8IGZhbHNlO1xuICAgIHRoaXMuX2ZpbGVuYW1lID0gbnVsbDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBxdWV1ZWRDaHVua3MgfHwgW107XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcblxuICAgIGZvciAoY29uc3QgY2h1bmsgb2YgdGhpcy5fcXVldWVkQ2h1bmtzKSB7XG4gICAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2hlYWRlcnNSZWFkeSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHN0cmVhbS5fZnVsbFJlcXVlc3RSZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBfZW5xdWV1ZShjaHVuaykge1xuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVhZHk7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNSYW5nZVN1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVua3Muc2hpZnQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgfVxuXG4gIHByb2dyZXNzaXZlRG9uZSgpIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuICB9XG5cbn1cblxuY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX2JlZ2luID0gYmVnaW47XG4gICAgdGhpcy5fZW5kID0gZW5kO1xuICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgX2VucXVldWUoY2h1bmspIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gY2h1bms7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzQ2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RzQ2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuaykge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICB0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpO1xuICB9XG5cbn1cblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5XZWJHTENvbnRleHQgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIFdlYkdMQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBlbmFibGUgPSBmYWxzZVxuICB9KSB7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGVuYWJsZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc0VuYWJsZWQoKSB7XG4gICAgbGV0IGVuYWJsZWQgPSB0aGlzLl9lbmFibGVkO1xuXG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVuYWJsZWQgPSBXZWJHTFV0aWxzLnRyeUluaXRHTCgpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzRW5hYmxlZFwiLCBlbmFibGVkKTtcbiAgfVxuXG4gIGNvbXBvc2VTTWFzayh7XG4gICAgbGF5ZXIsXG4gICAgbWFzayxcbiAgICBwcm9wZXJ0aWVzXG4gIH0pIHtcbiAgICByZXR1cm4gV2ViR0xVdGlscy5jb21wb3NlU01hc2sobGF5ZXIsIG1hc2ssIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgZHJhd0ZpZ3VyZXMoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgZmlndXJlcyxcbiAgICBjb250ZXh0XG4gIH0pIHtcbiAgICByZXR1cm4gV2ViR0xVdGlscy5kcmF3RmlndXJlcyh3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kQ29sb3IsIGZpZ3VyZXMsIGNvbnRleHQpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgV2ViR0xVdGlscy5jbGVhbnVwKCk7XG4gIH1cblxufVxuXG5leHBvcnRzLldlYkdMQ29udGV4dCA9IFdlYkdMQ29udGV4dDtcblxudmFyIFdlYkdMVXRpbHMgPSBmdW5jdGlvbiBXZWJHTFV0aWxzQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gbG9hZFNoYWRlcihnbCwgY29kZSwgc2hhZGVyVHlwZSkge1xuICAgIHZhciBzaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7XG4gICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgY29kZSk7XG4gICAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpO1xuICAgIHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTtcblxuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIHZhciBlcnJvck1zZyA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGR1cmluZyBzaGFkZXIgY29tcGlsYXRpb246IFwiICsgZXJyb3JNc2cpO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFkZXI7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVWZXJ0ZXhTaGFkZXIoZ2wsIGNvZGUpIHtcbiAgICByZXR1cm4gbG9hZFNoYWRlcihnbCwgY29kZSwgZ2wuVkVSVEVYX1NIQURFUik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudFNoYWRlcihnbCwgY29kZSkge1xuICAgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBjb2RlLCBnbC5GUkFHTUVOVF9TSEFERVIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJvZ3JhbShnbCwgc2hhZGVycykge1xuICAgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2hhZGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyc1tpXSk7XG4gICAgfVxuXG4gICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG4gICAgdmFyIGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpO1xuXG4gICAgaWYgKCFsaW5rZWQpIHtcbiAgICAgIHZhciBlcnJvck1zZyA9IGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZHVyaW5nIHByb2dyYW0gbGlua2luZzogXCIgKyBlcnJvck1zZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2dyYW07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVUZXh0dXJlKGdsLCBpbWFnZSwgdGV4dHVyZUlkKSB7XG4gICAgZ2wuYWN0aXZlVGV4dHVyZSh0ZXh0dXJlSWQpO1xuICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTtcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7XG4gICAgcmV0dXJuIHRleHR1cmU7XG4gIH1cblxuICB2YXIgY3VycmVudEdMLCBjdXJyZW50Q2FudmFzO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlR0woKSB7XG4gICAgaWYgKGN1cnJlbnRHTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGN1cnJlbnRDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGN1cnJlbnRHTCA9IGN1cnJlbnRDYW52YXMuZ2V0Q29udGV4dChcIndlYmdsXCIsIHtcbiAgICAgIHByZW11bHRpcGxpZWRhbHBoYTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzbWFza1ZlcnRleFNoYWRlckNvZGUgPSBcIlxcXG4gIGF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjMiB1X3Jlc29sdXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZlYzIgY2xpcFNwYWNlID0gKGFfcG9zaXRpb24gLyB1X3Jlc29sdXRpb24pICogMi4wIC0gMS4wOyAgIFxcXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBTcGFjZSAqIHZlYzIoMSwgLTEpLCAwLCAxKTsgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI7XG4gIHZhciBzbWFza0ZyYWdtZW50U2hhZGVyQ29kZSA9IFwiXFxcbiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjNCB1X2JhY2tkcm9wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSBpbnQgdV9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gc2FtcGxlcjJEIHVfbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZlYzQgaW1hZ2VDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleENvb3JkKTsgICAgICAgICAgIFxcXG4gICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQodV9tYXNrLCB2X3RleENvb3JkKTsgICAgICAgICAgICAgXFxcbiAgICBpZiAodV9iYWNrZHJvcC5hID4gMC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgbWFza0NvbG9yLnJnYiA9IG1hc2tDb2xvci5yZ2IgKiBtYXNrQ29sb3IuYSArICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgdV9iYWNrZHJvcC5yZ2IgKiAoMS4wIC0gbWFza0NvbG9yLmEpOyAgICAgXFxcbiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGZsb2F0IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaWYgKHVfc3VidHlwZSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgIGx1bSA9IG1hc2tDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICBsdW0gPSBtYXNrQ29sb3IuciAqIDAuMyArIG1hc2tDb2xvci5nICogMC41OSArICAgICAgICAgICAgXFxcbiAgICAgICAgICAgIG1hc2tDb2xvci5iICogMC4xMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaW1hZ2VDb2xvci5hICo9IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICBpbWFnZUNvbG9yLnJnYiAqPSBpbWFnZUNvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IGltYWdlQ29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI7XG4gIHZhciBzbWFza0NhY2hlID0gbnVsbDtcblxuICBmdW5jdGlvbiBpbml0U21hc2tHTCgpIHtcbiAgICB2YXIgY2FudmFzLCBnbDtcbiAgICBnZW5lcmF0ZUdMKCk7XG4gICAgY2FudmFzID0gY3VycmVudENhbnZhcztcbiAgICBjdXJyZW50Q2FudmFzID0gbnVsbDtcbiAgICBnbCA9IGN1cnJlbnRHTDtcbiAgICBjdXJyZW50R0wgPSBudWxsO1xuICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoZ2wsIHNtYXNrVmVydGV4U2hhZGVyQ29kZSk7XG4gICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIHNtYXNrRnJhZ21lbnRTaGFkZXJDb2RlKTtcbiAgICB2YXIgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oZ2wsIFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyXSk7XG4gICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICB2YXIgY2FjaGUgPSB7fTtcbiAgICBjYWNoZS5nbCA9IGdsO1xuICAgIGNhY2hlLmNhbnZhcyA9IGNhbnZhcztcbiAgICBjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgXCJ1X3Jlc29sdXRpb25cIik7XG4gICAgY2FjaGUucG9zaXRpb25Mb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIFwiYV9wb3NpdGlvblwiKTtcbiAgICBjYWNoZS5iYWNrZHJvcExvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9iYWNrZHJvcFwiKTtcbiAgICBjYWNoZS5zdWJ0eXBlTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgXCJ1X3N1YnR5cGVcIik7XG4gICAgdmFyIHRleENvb3JkTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBcImFfdGV4Q29vcmRcIik7XG4gICAgdmFyIHRleExheWVyTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgXCJ1X2ltYWdlXCIpO1xuICAgIHZhciB0ZXhNYXNrTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgXCJ1X21hc2tcIik7XG4gICAgdmFyIHRleENvb3JkQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHRleENvb3JkQnVmZmVyKTtcbiAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAxLjAsIDEuMCwgMC4wLCAxLjAsIDEuMF0pLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGV4Q29vcmRMb2NhdGlvbik7XG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcih0ZXhDb29yZExvY2F0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnVuaWZvcm0xaSh0ZXhMYXllckxvY2F0aW9uLCAwKTtcbiAgICBnbC51bmlmb3JtMWkodGV4TWFza0xvY2F0aW9uLCAxKTtcbiAgICBzbWFza0NhY2hlID0gY2FjaGU7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb3NlU01hc2sobGF5ZXIsIG1hc2ssIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgd2lkdGggPSBsYXllci53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gbGF5ZXIuaGVpZ2h0O1xuXG4gICAgaWYgKCFzbWFza0NhY2hlKSB7XG4gICAgICBpbml0U21hc2tHTCgpO1xuICAgIH1cblxuICAgIHZhciBjYWNoZSA9IHNtYXNrQ2FjaGUsXG4gICAgICAgIGNhbnZhcyA9IGNhY2hlLmNhbnZhcyxcbiAgICAgICAgZ2wgPSBjYWNoZS5nbDtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGdsLnZpZXdwb3J0KDAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCk7XG4gICAgZ2wudW5pZm9ybTJmKGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICBpZiAocHJvcGVydGllcy5iYWNrZHJvcCkge1xuICAgICAgZ2wudW5pZm9ybTRmKGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiwgcHJvcGVydGllcy5iYWNrZHJvcFswXSwgcHJvcGVydGllcy5iYWNrZHJvcFsxXSwgcHJvcGVydGllcy5iYWNrZHJvcFsyXSwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsLnVuaWZvcm00ZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIDAsIDAsIDAsIDApO1xuICAgIH1cblxuICAgIGdsLnVuaWZvcm0xaShjYWNoZS5zdWJ0eXBlTG9jYXRpb24sIHByb3BlcnRpZXMuc3VidHlwZSA9PT0gXCJMdW1pbm9zaXR5XCIgPyAxIDogMCk7XG4gICAgdmFyIHRleHR1cmUgPSBjcmVhdGVUZXh0dXJlKGdsLCBsYXllciwgZ2wuVEVYVFVSRTApO1xuICAgIHZhciBtYXNrVGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoZ2wsIG1hc2ssIGdsLlRFWFRVUkUxKTtcbiAgICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIHdpZHRoLCAwLCAwLCBoZWlnaHQsIDAsIGhlaWdodCwgd2lkdGgsIDAsIHdpZHRoLCBoZWlnaHRdKSwgZ2wuU1RBVElDX0RSQVcpO1xuICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNhY2hlLnBvc2l0aW9uTG9jYXRpb24pO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY2FjaGUucG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xuICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG4gICAgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XG4gICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XG4gICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpO1xuICAgIGdsLmZsdXNoKCk7XG4gICAgZ2wuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICBnbC5kZWxldGVUZXh0dXJlKG1hc2tUZXh0dXJlKTtcbiAgICBnbC5kZWxldGVCdWZmZXIoYnVmZmVyKTtcbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG5cbiAgdmFyIGZpZ3VyZXNWZXJ0ZXhTaGFkZXJDb2RlID0gXCJcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIGF0dHJpYnV0ZSB2ZWMzIGFfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjMiB1X3NjYWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjNCB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdmVjMiBwb3NpdGlvbiA9IChhX3Bvc2l0aW9uICsgdV9vZmZzZXQpICogdV9zY2FsZTsgICAgICAgICAgXFxcbiAgICB2ZWMyIGNsaXBTcGFjZSA9IChwb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgICBcXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwU3BhY2UgKiB2ZWMyKDEsIC0xKSwgMCwgMSk7ICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2X2NvbG9yID0gdmVjNChhX2NvbG9yIC8gMjU1LjAsIDEuMCk7ICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiO1xuICB2YXIgZmlndXJlc0ZyYWdtZW50U2hhZGVyQ29kZSA9IFwiXFxcbiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjNCB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjtcbiAgdmFyIGZpZ3VyZXNDYWNoZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gaW5pdEZpZ3VyZXNHTCgpIHtcbiAgICB2YXIgY2FudmFzLCBnbDtcbiAgICBnZW5lcmF0ZUdMKCk7XG4gICAgY2FudmFzID0gY3VycmVudENhbnZhcztcbiAgICBjdXJyZW50Q2FudmFzID0gbnVsbDtcbiAgICBnbCA9IGN1cnJlbnRHTDtcbiAgICBjdXJyZW50R0wgPSBudWxsO1xuICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBjcmVhdGVWZXJ0ZXhTaGFkZXIoZ2wsIGZpZ3VyZXNWZXJ0ZXhTaGFkZXJDb2RlKTtcbiAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBjcmVhdGVGcmFnbWVudFNoYWRlcihnbCwgZmlndXJlc0ZyYWdtZW50U2hhZGVyQ29kZSk7XG4gICAgdmFyIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCBbdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcl0pO1xuICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgdmFyIGNhY2hlID0ge307XG4gICAgY2FjaGUuZ2wgPSBnbDtcbiAgICBjYWNoZS5jYW52YXMgPSBjYW52YXM7XG4gICAgY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9yZXNvbHV0aW9uXCIpO1xuICAgIGNhY2hlLnNjYWxlTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgXCJ1X3NjYWxlXCIpO1xuICAgIGNhY2hlLm9mZnNldExvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIFwidV9vZmZzZXRcIik7XG4gICAgY2FjaGUucG9zaXRpb25Mb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIFwiYV9wb3NpdGlvblwiKTtcbiAgICBjYWNoZS5jb2xvckxvY2F0aW9uID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgXCJhX2NvbG9yXCIpO1xuICAgIGZpZ3VyZXNDYWNoZSA9IGNhY2hlO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhd0ZpZ3VyZXMod2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZENvbG9yLCBmaWd1cmVzLCBjb250ZXh0KSB7XG4gICAgaWYgKCFmaWd1cmVzQ2FjaGUpIHtcbiAgICAgIGluaXRGaWd1cmVzR0woKTtcbiAgICB9XG5cbiAgICB2YXIgY2FjaGUgPSBmaWd1cmVzQ2FjaGUsXG4gICAgICAgIGNhbnZhcyA9IGNhY2hlLmNhbnZhcyxcbiAgICAgICAgZ2wgPSBjYWNoZS5nbDtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGdsLnZpZXdwb3J0KDAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCk7XG4gICAgZ2wudW5pZm9ybTJmKGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiwgd2lkdGgsIGhlaWdodCk7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgaSwgaWksIHJvd3M7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgc3dpdGNoIChmaWd1cmVzW2ldLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxhdHRpY2VcIjpcbiAgICAgICAgICByb3dzID0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoIC8gZmlndXJlc1tpXS52ZXJ0aWNlc1BlclJvdyB8IDA7XG4gICAgICAgICAgY291bnQgKz0gKHJvd3MgLSAxKSAqIChmaWd1cmVzW2ldLnZlcnRpY2VzUGVyUm93IC0gMSkgKiA2O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0cmlhbmdsZXNcIjpcbiAgICAgICAgICBjb3VudCArPSBmaWd1cmVzW2ldLmNvb3Jkcy5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvb3JkcyA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAyKTtcbiAgICB2YXIgY29sb3JzID0gbmV3IFVpbnQ4QXJyYXkoY291bnQgKiAzKTtcbiAgICB2YXIgY29vcmRzTWFwID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgIGNvbG9yc01hcCA9IGNvbnRleHQuY29sb3JzO1xuICAgIHZhciBwSW5kZXggPSAwLFxuICAgICAgICBjSW5kZXggPSAwO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBmaWd1cmUgPSBmaWd1cmVzW2ldLFxuICAgICAgICAgIHBzID0gZmlndXJlLmNvb3JkcyxcbiAgICAgICAgICBjcyA9IGZpZ3VyZS5jb2xvcnM7XG5cbiAgICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxhdHRpY2VcIjpcbiAgICAgICAgICB2YXIgY29scyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgICAgICByb3dzID0gcHMubGVuZ3RoIC8gY29scyB8IDA7XG5cbiAgICAgICAgICBmb3IgKHZhciByb3cgPSAxOyByb3cgPCByb3dzOyByb3crKykge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJvdyAqIGNvbHMgKyAxO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAxOyBjb2wgPCBjb2xzOyBjb2wrKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleF0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29scyAtIDFdXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHMgLSAxXSArIDFdO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMl0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgM10gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDRdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDVdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdICsgMV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXhdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzIC0gMV0gKyAxXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDJdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXSArIDJdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgM10gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgNF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDVdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHNdICsgMl07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA2XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXV07XG4gICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXSArIDFdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgOF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gMV0gKyAyXTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDZdID0gY29vcmRzW3BJbmRleCArIDJdO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgN10gPSBjb29yZHNbcEluZGV4ICsgM107XG4gICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA4XSA9IGNvb3Jkc1twSW5kZXggKyA0XTtcbiAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDldID0gY29vcmRzW3BJbmRleCArIDVdO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTBdID0gY29vcmRzTWFwW3BzW29mZnNldF1dO1xuICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTFdID0gY29vcmRzTWFwW3BzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDldID0gY29sb3JzW2NJbmRleCArIDNdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTBdID0gY29sb3JzW2NJbmRleCArIDRdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTFdID0gY29sb3JzW2NJbmRleCArIDVdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTJdID0gY29sb3JzW2NJbmRleCArIDZdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTNdID0gY29sb3JzW2NJbmRleCArIDddO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTRdID0gY29sb3JzW2NJbmRleCArIDhdO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTVdID0gY29sb3JzTWFwW2NzW29mZnNldF1dO1xuICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTZdID0gY29sb3JzTWFwW2NzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXRdICsgMl07XG4gICAgICAgICAgICAgIHBJbmRleCArPSAxMjtcbiAgICAgICAgICAgICAgY0luZGV4ICs9IDE4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0cmlhbmdsZXNcIjpcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBwcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICBjb29yZHNbcEluZGV4XSA9IGNvb3Jkc01hcFtwc1tqXV07XG4gICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMV0gPSBjb29yZHNNYXBbcHNbal0gKyAxXTtcbiAgICAgICAgICAgIGNvbG9yc1tjSW5kZXhdID0gY29sb3JzTWFwW2NzW2pdXTtcbiAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tqXSArIDFdO1xuICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDJdID0gY29sb3JzTWFwW2NzW2pdICsgMl07XG4gICAgICAgICAgICBwSW5kZXggKz0gMjtcbiAgICAgICAgICAgIGNJbmRleCArPSAzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgIGdsLmNsZWFyQ29sb3IoYmFja2dyb3VuZENvbG9yWzBdIC8gMjU1LCBiYWNrZ3JvdW5kQ29sb3JbMV0gLyAyNTUsIGJhY2tncm91bmRDb2xvclsyXSAvIDI1NSwgMS4wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcbiAgICB9XG5cbiAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcbiAgICB2YXIgY29vcmRzQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvb3Jkc0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvb3JkcywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNhY2hlLnBvc2l0aW9uTG9jYXRpb24pO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY2FjaGUucG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICB2YXIgY29sb3JzQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvbG9yc0J1ZmZlcik7XG4gICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNhY2hlLmNvbG9yTG9jYXRpb24pO1xuICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY2FjaGUuY29sb3JMb2NhdGlvbiwgMywgZ2wuVU5TSUdORURfQllURSwgZmFsc2UsIDAsIDApO1xuICAgIGdsLnVuaWZvcm0yZihjYWNoZS5zY2FsZUxvY2F0aW9uLCBjb250ZXh0LnNjYWxlWCwgY29udGV4dC5zY2FsZVkpO1xuICAgIGdsLnVuaWZvcm0yZihjYWNoZS5vZmZzZXRMb2NhdGlvbiwgY29udGV4dC5vZmZzZXRYLCBjb250ZXh0Lm9mZnNldFkpO1xuICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCBjb3VudCk7XG4gICAgZ2wuZmx1c2goKTtcbiAgICBnbC5kZWxldGVCdWZmZXIoY29vcmRzQnVmZmVyKTtcbiAgICBnbC5kZWxldGVCdWZmZXIoY29sb3JzQnVmZmVyKTtcbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0cnlJbml0R0woKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnZW5lcmF0ZUdMKCk7XG4gICAgICAgIHJldHVybiAhIWN1cnJlbnRHTDtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGNvbXBvc2VTTWFzayxcbiAgICBkcmF3RmlndXJlcyxcblxuICAgIGNsZWFudXAoKSB7XG4gICAgICBpZiAoc21hc2tDYWNoZSAmJiBzbWFza0NhY2hlLmNhbnZhcykge1xuICAgICAgICBzbWFza0NhY2hlLmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgIHNtYXNrQ2FjaGUuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWd1cmVzQ2FjaGUgJiYgZmlndXJlc0NhY2hlLmNhbnZhcykge1xuICAgICAgICBmaWd1cmVzQ2FjaGUuY2FudmFzLndpZHRoID0gMDtcbiAgICAgICAgZmlndXJlc0NhY2hlLmNhbnZhcy5oZWlnaHQgPSAwO1xuICAgICAgfVxuXG4gICAgICBzbWFza0NhY2hlID0gbnVsbDtcbiAgICAgIGZpZ3VyZXNDYWNoZSA9IG51bGw7XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQW5ub3RhdGlvbkxheWVyID0gdm9pZCAwO1xuXG52YXIgX2Rpc3BsYXlfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2Fubm90YXRpb25fc3RvcmFnZSA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIEFubm90YXRpb25FbGVtZW50RmFjdG9yeSB7XG4gIHN0YXRpYyBjcmVhdGUocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHN1YnR5cGUgPSBwYXJhbWV0ZXJzLmRhdGEuYW5ub3RhdGlvblR5cGU7XG5cbiAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElOSzpcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuVEVYVDpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuV0lER0VUOlxuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBwYXJhbWV0ZXJzLmRhdGEuZmllbGRUeXBlO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgY2FzZSBcIlR4XCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJCdG5cIjpcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmRhdGEucmFkaW9CdXR0b24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJDaFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9QVVA6XG4gICAgICAgIHJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5GUkVFVEVYVDpcbiAgICAgICAgcmV0dXJuIG5ldyBGcmVlVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkxJTkU6XG4gICAgICAgIHJldHVybiBuZXcgTGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlNRVUFSRTpcbiAgICAgICAgcmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DSVJDTEU6XG4gICAgICAgIHJldHVybiBuZXcgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6XG4gICAgICAgIHJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBDYXJldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLklOSzpcbiAgICAgICAgcmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OOlxuICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6XG4gICAgICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOlxuICAgICAgICByZXR1cm4gbmV3IFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOlxuICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUOlxuICAgICAgICByZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlNUQU1QOlxuICAgICAgICByZXR1cm4gbmV3IFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ6XG4gICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSA9IGZhbHNlLCBpZ25vcmVCb3JkZXIgPSBmYWxzZSkge1xuICAgIHRoaXMuaXNSZW5kZXJhYmxlID0gaXNSZW5kZXJhYmxlO1xuICAgIHRoaXMuZGF0YSA9IHBhcmFtZXRlcnMuZGF0YTtcbiAgICB0aGlzLmxheWVyID0gcGFyYW1ldGVycy5sYXllcjtcbiAgICB0aGlzLnBhZ2UgPSBwYXJhbWV0ZXJzLnBhZ2U7XG4gICAgdGhpcy52aWV3cG9ydCA9IHBhcmFtZXRlcnMudmlld3BvcnQ7XG4gICAgdGhpcy5saW5rU2VydmljZSA9IHBhcmFtZXRlcnMubGlua1NlcnZpY2U7XG4gICAgdGhpcy5kb3dubG9hZE1hbmFnZXIgPSBwYXJhbWV0ZXJzLmRvd25sb2FkTWFuYWdlcjtcbiAgICB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCA9IHBhcmFtZXRlcnMuaW1hZ2VSZXNvdXJjZXNQYXRoO1xuICAgIHRoaXMucmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9IHBhcmFtZXRlcnMucmVuZGVySW50ZXJhY3RpdmVGb3JtcztcbiAgICB0aGlzLnN2Z0ZhY3RvcnkgPSBwYXJhbWV0ZXJzLnN2Z0ZhY3Rvcnk7XG4gICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZSA9IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2U7XG5cbiAgICBpZiAoaXNSZW5kZXJhYmxlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIpO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDb250YWluZXIoaWdub3JlQm9yZGVyID0gZmFsc2UpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnBhZ2UsXG4gICAgICAgICAgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIpO1xuICAgIGxldCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBsZXQgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFubm90YXRpb24taWRcIiwgZGF0YS5pZCk7XG5cbiAgICBjb25zdCByZWN0ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KFtkYXRhLnJlY3RbMF0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgZGF0YS5yZWN0WzJdLCBwYWdlLnZpZXdbM10gLSBkYXRhLnJlY3RbM10gKyBwYWdlLnZpZXdbMV1dKTtcblxuICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgbWF0cml4KCR7dmlld3BvcnQudHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgLSR7cmVjdFswXX1weCAtJHtyZWN0WzFdfXB4YDtcblxuICAgIGlmICghaWdub3JlQm9yZGVyICYmIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggPiAwKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSBgJHtkYXRhLmJvcmRlclN0eWxlLndpZHRofXB4YDtcblxuICAgICAgaWYgKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUgIT09IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FKSB7XG4gICAgICAgIHdpZHRoID0gd2lkdGggLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0IC0gMiAqIGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFJhZGl1cyA9IGRhdGEuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7XG5cbiAgICAgIGlmIChob3Jpem9udGFsUmFkaXVzID4gMCB8fCB2ZXJ0aWNhbFJhZGl1cyA+IDApIHtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gYCR7aG9yaXpvbnRhbFJhZGl1c31weCAvICR7dmVydGljYWxSYWRpdXN9cHhgO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyUmFkaXVzID0gcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUpIHtcbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwiZGFzaGVkXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGJldmVsZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJCb3R0b21TdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jb2xvcikge1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IoZGF0YS5jb2xvclswXSB8IDAsIGRhdGEuY29sb3JbMV0gfCAwLCBkYXRhLmNvbG9yWzJdIHwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gYCR7cmVjdFswXX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IGAke3JlY3RbMV19cHhgO1xuICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgX2NyZWF0ZVBvcHVwKGNvbnRhaW5lciwgdHJpZ2dlciwgZGF0YSkge1xuICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGNvbG9yOiBkYXRhLmNvbG9yLFxuICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiBkYXRhLm1vZGlmaWNhdGlvbkRhdGUsXG4gICAgICBjb250ZW50czogZGF0YS5jb250ZW50cyxcbiAgICAgIGhpZGVXcmFwcGVyOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgcG9wdXAgPSBwb3B1cEVsZW1lbnQucmVuZGVyKCk7XG4gICAgcG9wdXAuc3R5bGUubGVmdCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQocG9wdXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTGlua0Fubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLnVybCB8fCBwYXJhbWV0ZXJzLmRhdGEuZGVzdCB8fCBwYXJhbWV0ZXJzLmRhdGEuYWN0aW9uKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwibGlua0Fubm90YXRpb25cIjtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhLFxuICAgICAgbGlua1NlcnZpY2VcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG5cbiAgICBpZiAoZGF0YS51cmwpIHtcbiAgICAgICgwLCBfZGlzcGxheV91dGlscy5hZGRMaW5rQXR0cmlidXRlcykobGluaywge1xuICAgICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgICB0YXJnZXQ6IGRhdGEubmV3V2luZG93ID8gX2Rpc3BsYXlfdXRpbHMuTGlua1RhcmdldC5CTEFOSyA6IGxpbmtTZXJ2aWNlLmV4dGVybmFsTGlua1RhcmdldCxcbiAgICAgICAgcmVsOiBsaW5rU2VydmljZS5leHRlcm5hbExpbmtSZWwsXG4gICAgICAgIGVuYWJsZWQ6IGxpbmtTZXJ2aWNlLmV4dGVybmFsTGlua0VuYWJsZWRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuX2JpbmROYW1lZEFjdGlvbihsaW5rLCBkYXRhLmFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssIGRhdGEuZGVzdCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbiAgX2JpbmRMaW5rKGxpbmssIGRlc3RpbmF0aW9uKSB7XG4gICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXREZXN0aW5hdGlvbkhhc2goZGVzdGluYXRpb24pO1xuXG4gICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UubmF2aWdhdGVUbyhkZXN0aW5hdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICBsaW5rLmNsYXNzTmFtZSA9IFwiaW50ZXJuYWxMaW5rXCI7XG4gICAgfVxuICB9XG5cbiAgX2JpbmROYW1lZEFjdGlvbihsaW5rLCBhY3Rpb24pIHtcbiAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybChcIlwiKTtcblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMubGlua1NlcnZpY2UuZXhlY3V0ZU5hbWVkQWN0aW9uKGFjdGlvbik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwidGV4dEFubm90YXRpb25cIjtcbiAgICBjb25zdCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgaW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jb250YWluZXIuc3R5bGUuaGVpZ2h0O1xuICAgIGltYWdlLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgaW1hZ2Uuc3JjID0gdGhpcy5pbWFnZVJlc291cmNlc1BhdGggKyBcImFubm90YXRpb24tXCIgKyB0aGlzLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpICsgXCIuc3ZnXCI7XG4gICAgaW1hZ2UuYWx0ID0gXCJbe3t0eXBlfX0gQW5ub3RhdGlvbl1cIjtcbiAgICBpbWFnZS5kYXRhc2V0LmwxMG5JZCA9IFwidGV4dF9hbm5vdGF0aW9uX3R5cGVcIjtcbiAgICBpbWFnZS5kYXRhc2V0LmwxMG5BcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdHlwZTogdGhpcy5kYXRhLm5hbWVcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgaW1hZ2UsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2UpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zIHx8ICFwYXJhbWV0ZXJzLmRhdGEuaGFzQXBwZWFyYW5jZSAmJiAhIXBhcmFtZXRlcnMuZGF0YS5maWVsZFZhbHVlO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgVEVYVF9BTElHTk1FTlQgPSBbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwicmlnaHRcIl07XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgaWQgPSB0aGlzLmRhdGEuaWQ7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0V2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpIHtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gc3RvcmFnZS5nZXRPckNyZWF0ZVZhbHVlKGlkLCB0aGlzLmRhdGEuZmllbGRWYWx1ZSk7XG5cbiAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlMaW5lKSB7XG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgIGVsZW1lbnQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIHRleHRDb250ZW50KTtcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7XG4gICAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmRhdGEuZmllbGROYW1lO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLm1heExlbiAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50Lm1heExlbmd0aCA9IHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuY29tYikge1xuICAgICAgICBjb25zdCBmaWVsZFdpZHRoID0gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTtcbiAgICAgICAgY29uc3QgY29tYldpZHRoID0gZmllbGRXaWR0aCAvIHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbWJcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGV0dGVyU3BhY2luZyA9IGBjYWxjKCR7Y29tYldpZHRofXB4IC0gMWNoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgZWxlbWVudC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gXCJtaWRkbGVcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwidGFibGUtY2VsbFwiO1xuICAgICAgbGV0IGZvbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmZvbnRSZWZOYW1lICYmIHRoaXMucGFnZS5jb21tb25PYmpzLmhhcyh0aGlzLmRhdGEuZm9udFJlZk5hbWUpKSB7XG4gICAgICAgIGZvbnQgPSB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5nZXQodGhpcy5kYXRhLmZvbnRSZWZOYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0VGV4dFN0eWxlKGVsZW1lbnQsIGZvbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEudGV4dEFsaWdubWVudCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSBURVhUX0FMSUdOTUVOVFt0aGlzLmRhdGEudGV4dEFsaWdubWVudF07XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbiAgX3NldFRleHRTdHlsZShlbGVtZW50LCBmb250KSB7XG4gICAgY29uc3Qgc3R5bGUgPSBlbGVtZW50LnN0eWxlO1xuICAgIHN0eWxlLmZvbnRTaXplID0gYCR7dGhpcy5kYXRhLmZvbnRTaXplfXB4YDtcbiAgICBzdHlsZS5kaXJlY3Rpb24gPSB0aGlzLmRhdGEuZm9udERpcmVjdGlvbiA8IDAgPyBcInJ0bFwiIDogXCJsdHJcIjtcblxuICAgIGlmICghZm9udCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBib2xkID0gXCJub3JtYWxcIjtcblxuICAgIGlmIChmb250LmJsYWNrKSB7XG4gICAgICBib2xkID0gXCI5MDBcIjtcbiAgICB9IGVsc2UgaWYgKGZvbnQuYm9sZCkge1xuICAgICAgYm9sZCA9IFwiYm9sZFwiO1xuICAgIH1cblxuICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBib2xkO1xuICAgIHN0eWxlLmZvbnRTdHlsZSA9IGZvbnQuaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCI7XG4gICAgY29uc3QgZm9udEZhbWlseSA9IGZvbnQubG9hZGVkTmFtZSA/IGBcIiR7Zm9udC5sb2FkZWROYW1lfVwiLCBgIDogXCJcIjtcbiAgICBjb25zdCBmYWxsYmFja05hbWUgPSBmb250LmZhbGxiYWNrTmFtZSB8fCBcIkhlbHZldGljYSwgc2Fucy1zZXJpZlwiO1xuICAgIHN0eWxlLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5ICsgZmFsbGJhY2tOYW1lO1xuICB9XG5cbn1cblxuY2xhc3MgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlcnMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7XG4gICAgY29uc3QgdmFsdWUgPSBzdG9yYWdlLmdldE9yQ3JlYXRlVmFsdWUoaWQsIGRhdGEuZmllbGRWYWx1ZSAmJiBkYXRhLmZpZWxkVmFsdWUgIT09IFwiT2ZmXCIpO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBjaGVja0JveFwiO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgZWxlbWVudC5kaXNhYmxlZCA9IGRhdGEucmVhZE9ubHk7XG4gICAgZWxlbWVudC50eXBlID0gXCJjaGVja2JveFwiO1xuICAgIGVsZW1lbnQubmFtZSA9IHRoaXMuZGF0YS5maWVsZE5hbWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCBldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgfSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlcnMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHJhZGlvQnV0dG9uXCI7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7XG4gICAgY29uc3QgdmFsdWUgPSBzdG9yYWdlLmdldE9yQ3JlYXRlVmFsdWUoaWQsIGRhdGEuZmllbGRWYWx1ZSA9PT0gZGF0YS5idXR0b25WYWx1ZSk7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBlbGVtZW50LmRpc2FibGVkID0gZGF0YS5yZWFkT25seTtcbiAgICBlbGVtZW50LnR5cGUgPSBcInJhZGlvXCI7XG4gICAgZWxlbWVudC5uYW1lID0gZGF0YS5maWVsZE5hbWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCBuYW1lID0gZXZlbnQudGFyZ2V0Lm5hbWU7XG5cbiAgICAgIGZvciAoY29uc3QgcmFkaW8gb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgaWYgKHJhZGlvICE9PSBldmVudC50YXJnZXQpIHtcbiAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKHJhZGlvLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1hbm5vdGF0aW9uLWlkXCIpLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwgZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH0pO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIExpbmtBbm5vdGF0aW9uRWxlbWVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b25cIjtcbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2hvaWNlV2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlO1xuICAgIGNvbnN0IGlkID0gdGhpcy5kYXRhLmlkO1xuICAgIHN0b3JhZ2UuZ2V0T3JDcmVhdGVWYWx1ZShpZCwgdGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZGF0YS5maWVsZFZhbHVlWzBdIDogbnVsbCk7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIik7XG4gICAgc2VsZWN0RWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICBzZWxlY3RFbGVtZW50Lm5hbWUgPSB0aGlzLmRhdGEuZmllbGROYW1lO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuY29tYm8pIHtcbiAgICAgIHNlbGVjdEVsZW1lbnQuc2l6ZSA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5tdWx0aVNlbGVjdCkge1xuICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0aGlzLmRhdGEub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uLmRpc3BsYXlWYWx1ZTtcbiAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb24uZXhwb3J0VmFsdWU7XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZS5pbmNsdWRlcyhvcHRpb24uZXhwb3J0VmFsdWUpKSB7XG4gICAgICAgIG9wdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIiwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQob3B0aW9uRWxlbWVudCk7XG4gICAgfVxuXG4gICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnM7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0aW9ucy5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxlY3RFbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBQb3B1cEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBJR05PUkVfVFlQRVMgPSBbXCJMaW5lXCIsIFwiU3F1YXJlXCIsIFwiQ2lyY2xlXCIsIFwiUG9seUxpbmVcIiwgXCJQb2x5Z29uXCIsIFwiSW5rXCJdO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwicG9wdXBBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoSUdOT1JFX1RZUEVTLmluY2x1ZGVzKHRoaXMuZGF0YS5wYXJlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYFtkYXRhLWFubm90YXRpb24taWQ9XCIke3RoaXMuZGF0YS5wYXJlbnRJZH1cIl1gO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLmxheWVyLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4gICAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgfVxuXG4gICAgY29uc3QgcG9wdXAgPSBuZXcgUG9wdXBFbGVtZW50KHtcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsXG4gICAgICB0cmlnZ2VyOiBwYXJlbnRFbGVtZW50LFxuICAgICAgY29sb3I6IHRoaXMuZGF0YS5jb2xvcixcbiAgICAgIHRpdGxlOiB0aGlzLmRhdGEudGl0bGUsXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSxcbiAgICAgIGNvbnRlbnRzOiB0aGlzLmRhdGEuY29udGVudHNcbiAgICB9KTtcbiAgICBjb25zdCBwYXJlbnRMZWZ0ID0gcGFyc2VGbG9hdChwYXJlbnRFbGVtZW50LnN0eWxlLmxlZnQpO1xuICAgIGNvbnN0IHBhcmVudFdpZHRoID0gcGFyc2VGbG9hdChwYXJlbnRFbGVtZW50LnN0eWxlLndpZHRoKTtcbiAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgLSR7cGFyZW50TGVmdCArIHBhcmVudFdpZHRofXB4IC0ke3BhcmVudEVsZW1lbnQuc3R5bGUudG9wfWA7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IGAke3BhcmVudExlZnQgKyBwYXJlbnRXaWR0aH1weGA7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQocG9wdXAucmVuZGVyKCkpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFBvcHVwRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICB0aGlzLmNvbnRhaW5lciA9IHBhcmFtZXRlcnMuY29udGFpbmVyO1xuICAgIHRoaXMudHJpZ2dlciA9IHBhcmFtZXRlcnMudHJpZ2dlcjtcbiAgICB0aGlzLmNvbG9yID0gcGFyYW1ldGVycy5jb2xvcjtcbiAgICB0aGlzLnRpdGxlID0gcGFyYW1ldGVycy50aXRsZTtcbiAgICB0aGlzLm1vZGlmaWNhdGlvbkRhdGUgPSBwYXJhbWV0ZXJzLm1vZGlmaWNhdGlvbkRhdGU7XG4gICAgdGhpcy5jb250ZW50cyA9IHBhcmFtZXRlcnMuY29udGVudHM7XG4gICAgdGhpcy5oaWRlV3JhcHBlciA9IHBhcmFtZXRlcnMuaGlkZVdyYXBwZXIgfHwgZmFsc2U7XG4gICAgdGhpcy5waW5uZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBCQUNLR1JPVU5EX0VOTElHSFQgPSAwLjc7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgd3JhcHBlci5jbGFzc05hbWUgPSBcInBvcHVwV3JhcHBlclwiO1xuICAgIHRoaXMuaGlkZUVsZW1lbnQgPSB0aGlzLmhpZGVXcmFwcGVyID8gd3JhcHBlciA6IHRoaXMuY29udGFpbmVyO1xuICAgIHRoaXMuaGlkZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIHRydWUpO1xuICAgIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBwb3B1cC5jbGFzc05hbWUgPSBcInBvcHVwXCI7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbG9yO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBjb25zdCByID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzBdKSArIGNvbG9yWzBdO1xuICAgICAgY29uc3QgZyA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsxXSkgKyBjb2xvclsxXTtcbiAgICAgIGNvbnN0IGIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMl0pICsgY29sb3JbMl07XG4gICAgICBwb3B1cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociB8IDAsIGcgfCAwLCBiIHwgMCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaDFcIik7XG4gICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aGlzLnRpdGxlO1xuICAgIHBvcHVwLmFwcGVuZENoaWxkKHRpdGxlKTtcblxuICAgIGNvbnN0IGRhdGVPYmplY3QgPSBfZGlzcGxheV91dGlscy5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdCh0aGlzLm1vZGlmaWNhdGlvbkRhdGUpO1xuXG4gICAgaWYgKGRhdGVPYmplY3QpIHtcbiAgICAgIGNvbnN0IG1vZGlmaWNhdGlvbkRhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIG1vZGlmaWNhdGlvbkRhdGUudGV4dENvbnRlbnQgPSBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5kYXRhc2V0LmwxMG5JZCA9IFwiYW5ub3RhdGlvbl9kYXRlX3N0cmluZ1wiO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5kYXRhc2V0LmwxMG5BcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBkYXRlOiBkYXRlT2JqZWN0LnRvTG9jYWxlRGF0ZVN0cmluZygpLFxuICAgICAgICB0aW1lOiBkYXRlT2JqZWN0LnRvTG9jYWxlVGltZVN0cmluZygpXG4gICAgICB9KTtcbiAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG1vZGlmaWNhdGlvbkRhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRzID0gdGhpcy5fZm9ybWF0Q29udGVudHModGhpcy5jb250ZW50cyk7XG5cbiAgICBwb3B1cC5hcHBlbmRDaGlsZChjb250ZW50cyk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl90b2dnbGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5fc2hvdy5iaW5kKHRoaXMsIGZhbHNlKSk7XG4gICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICBwb3B1cC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGlkZS5iaW5kKHRoaXMsIHRydWUpKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHBvcHVwKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxuXG4gIF9mb3JtYXRDb250ZW50cyhjb250ZW50cykge1xuICAgIGNvbnN0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGxpbmVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICAgIHAuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpO1xuXG4gICAgICBpZiAoaSA8IGlpIC0gMSkge1xuICAgICAgICBwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBfdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLnBpbm5lZCkge1xuICAgICAgdGhpcy5faGlkZSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2hvdyh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBfc2hvdyhwaW4gPSBmYWxzZSkge1xuICAgIGlmIChwaW4pIHtcbiAgICAgIHRoaXMucGlubmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlRWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJoaWRkZW5cIikpIHtcbiAgICAgIHRoaXMuaGlkZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ICs9IDE7XG4gICAgfVxuICB9XG5cbiAgX2hpZGUodW5waW4gPSB0cnVlKSB7XG4gICAgaWYgKHVucGluKSB7XG4gICAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oaWRlRWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJoaWRkZW5cIikgJiYgIXRoaXMucGlubmVkKSB7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCB0cnVlKTtcbiAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleCAtPSAxO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIEZyZWVUZXh0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImZyZWVUZXh0QW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIExpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwibGluZUFubm90YXRpb25cIjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGNvbnN0IGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGxpbmUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpsaW5lXCIpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwieDFcIiwgZGF0YS5yZWN0WzJdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0pO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgZGF0YS5yZWN0WzNdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0pO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwieDJcIiwgZGF0YS5yZWN0WzJdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0pO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgZGF0YS5yZWN0WzNdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10pO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggfHwgMSk7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQobGluZSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbGluZSwgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwic3F1YXJlQW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgIGNvbnN0IHNxdWFyZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcInhcIiwgYm9yZGVyV2lkdGggLyAyKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwieVwiLCBib3JkZXJXaWR0aCAvIDIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCB3aWR0aCAtIGJvcmRlcldpZHRoKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGhlaWdodCAtIGJvcmRlcldpZHRoKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGJvcmRlcldpZHRoIHx8IDEpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKHNxdWFyZSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgc3F1YXJlLCBkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIENpcmNsZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJjaXJjbGVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgY29uc3QgY2lyY2xlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6ZWxsaXBzZVwiKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwiY3hcIiwgd2lkdGggLyAyKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwiY3lcIiwgaGVpZ2h0IC8gMik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcInJ4XCIsIHdpZHRoIC8gMiAtIGJvcmRlcldpZHRoIC8gMik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcInJ5XCIsIGhlaWdodCAvIDIgLSBib3JkZXJXaWR0aCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgYm9yZGVyV2lkdGggfHwgMSk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBjaXJjbGUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJwb2x5bGluZUFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWxpbmVcIjtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGNvbnN0IGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGxldCBwb2ludHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmRpbmF0ZSBvZiBkYXRhLnZlcnRpY2VzKSB7XG4gICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgY29uc3QgeSA9IGRhdGEucmVjdFszXSAtIGNvb3JkaW5hdGUueTtcbiAgICAgIHBvaW50cy5wdXNoKHggKyBcIixcIiArIHkpO1xuICAgIH1cblxuICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICBjb25zdCBwb2x5bGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBwb2ludHMpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJub25lXCIpO1xuICAgIHN2Zy5hcHBlbmRDaGlsZChwb2x5bGluZSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgcG9seWxpbmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9seWdvbkFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwicG9seWdvbkFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWdvblwiO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2FyZXRBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgSW5rQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwiaW5rQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5bGluZVwiO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG5cbiAgICBmb3IgKGNvbnN0IGlua0xpc3Qgb2YgZGF0YS5pbmtMaXN0cykge1xuICAgICAgbGV0IHBvaW50cyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvb3JkaW5hdGUgb2YgaW5rTGlzdCkge1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICBjb25zdCB5ID0gZGF0YS5yZWN0WzNdIC0gY29vcmRpbmF0ZS55O1xuICAgICAgICBwb2ludHMucHVzaChgJHt4fSwke3l9YCk7XG4gICAgICB9XG5cbiAgICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICAgIGNvbnN0IHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgcG9pbnRzKTtcbiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwibm9uZVwiKTtcblxuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIHBvbHlsaW5lLCBkYXRhKTtcblxuICAgICAgc3ZnLmFwcGVuZENoaWxkKHBvbHlsaW5lKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiaGlnaGxpZ2h0QW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFVuZGVybGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ1bmRlcmxpbmVBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwic3F1aWdnbHlBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgc3VwZXIocGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0cmlrZW91dEFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdGFtcEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzdGFtcEFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBGaWxlQXR0YWNobWVudEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycywgdHJ1ZSk7XG4gICAgY29uc3Qge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBjb250ZW50XG4gICAgfSA9IHRoaXMuZGF0YS5maWxlO1xuICAgIHRoaXMuZmlsZW5hbWUgPSAoMCwgX2Rpc3BsYXlfdXRpbHMuZ2V0RmlsZW5hbWVGcm9tVXJsKShmaWxlbmFtZSk7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcblxuICAgIGlmICh0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKSB7XG4gICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzLmRpc3BhdGNoKFwiZmlsZWF0dGFjaG1lbnRhbm5vdGF0aW9uXCIsIHtcbiAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICBpZDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShmaWxlbmFtZSksXG4gICAgICAgIGZpbGVuYW1lLFxuICAgICAgICBjb250ZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJmaWxlQXR0YWNobWVudEFubm90YXRpb25cIjtcbiAgICBjb25zdCB0cmlnZ2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIiwgdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCAmJiAodGhpcy5kYXRhLnRpdGxlIHx8IHRoaXMuZGF0YS5jb250ZW50cykpIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCB0cmlnZ2VyLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9kb3dubG9hZCgpIHtcbiAgICBpZiAoIXRoaXMuZG93bmxvYWRNYW5hZ2VyKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEb3dubG9hZCBjYW5ub3QgYmUgc3RhcnRlZCBkdWUgdG8gdW5hdmFpbGFibGUgZG93bmxvYWQgbWFuYWdlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRvd25sb2FkTWFuYWdlci5kb3dubG9hZERhdGEodGhpcy5jb250ZW50LCB0aGlzLmZpbGVuYW1lLCBcIlwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFubm90YXRpb25MYXllciB7XG4gIHN0YXRpYyByZW5kZXIocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHNvcnRlZEFubm90YXRpb25zID0gW10sXG4gICAgICAgICAgcG9wdXBBbm5vdGF0aW9ucyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHBhcmFtZXRlcnMuYW5ub3RhdGlvbnMpIHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuYW5ub3RhdGlvblR5cGUgPT09IF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQKSB7XG4gICAgICAgIHBvcHVwQW5ub3RhdGlvbnMucHVzaChkYXRhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNvcnRlZEFubm90YXRpb25zLnB1c2goZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHBvcHVwQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzb3J0ZWRBbm5vdGF0aW9ucy5wdXNoKC4uLnBvcHVwQW5ub3RhdGlvbnMpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBzb3J0ZWRBbm5vdGF0aW9ucykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IEFubm90YXRpb25FbGVtZW50RmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBkYXRhLFxuICAgICAgICBsYXllcjogcGFyYW1ldGVycy5kaXYsXG4gICAgICAgIHBhZ2U6IHBhcmFtZXRlcnMucGFnZSxcbiAgICAgICAgdmlld3BvcnQ6IHBhcmFtZXRlcnMudmlld3BvcnQsXG4gICAgICAgIGxpbmtTZXJ2aWNlOiBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlLFxuICAgICAgICBkb3dubG9hZE1hbmFnZXI6IHBhcmFtZXRlcnMuZG93bmxvYWRNYW5hZ2VyLFxuICAgICAgICBpbWFnZVJlc291cmNlc1BhdGg6IHBhcmFtZXRlcnMuaW1hZ2VSZXNvdXJjZXNQYXRoIHx8IFwiXCIsXG4gICAgICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXM6IHR5cGVvZiBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgPT09IFwiYm9vbGVhblwiID8gcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zIDogdHJ1ZSxcbiAgICAgICAgc3ZnRmFjdG9yeTogbmV3IF9kaXNwbGF5X3V0aWxzLkRPTVNWR0ZhY3RvcnkoKSxcbiAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2UgfHwgbmV3IF9hbm5vdGF0aW9uX3N0b3JhZ2UuQW5ub3RhdGlvblN0b3JhZ2UoKVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUmVuZGVyYWJsZSkge1xuICAgICAgICBwYXJhbWV0ZXJzLmRpdi5hcHBlbmRDaGlsZChlbGVtZW50LnJlbmRlcigpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKHBhcmFtZXRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgcGFyYW1ldGVycy5hbm5vdGF0aW9ucykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHBhcmFtZXRlcnMuZGl2LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWFubm90YXRpb24taWQ9XCIke2RhdGEuaWR9XCJdYCk7XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYG1hdHJpeCgke3BhcmFtZXRlcnMudmlld3BvcnQudHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcmFtZXRlcnMuZGl2LnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkxheWVyID0gQW5ub3RhdGlvbkxheWVyO1xuXG4vKioqLyB9KSxcbi8qIDIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlbmRlclRleHRMYXllciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIHJlbmRlclRleHRMYXllciA9IGZ1bmN0aW9uIHJlbmRlclRleHRMYXllckNsb3N1cmUoKSB7XG4gIHZhciBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUiA9IDEwMDAwMDtcbiAgdmFyIE5vbldoaXRlc3BhY2VSZWdleHAgPSAvXFxTLztcblxuICBmdW5jdGlvbiBpc0FsbFdoaXRlc3BhY2Uoc3RyKSB7XG4gICAgcmV0dXJuICFOb25XaGl0ZXNwYWNlUmVnZXhwLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZFRleHQodGFzaywgZ2VvbSwgc3R5bGVzKSB7XG4gICAgdmFyIHRleHREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICB2YXIgdGV4dERpdlByb3BlcnRpZXMgPSB7XG4gICAgICBhbmdsZTogMCxcbiAgICAgIGNhbnZhc1dpZHRoOiAwLFxuICAgICAgaXNXaGl0ZXNwYWNlOiBmYWxzZSxcbiAgICAgIG9yaWdpbmFsVHJhbnNmb3JtOiBudWxsLFxuICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgICAgcGFkZGluZ1JpZ2h0OiAwLFxuICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgIHNjYWxlOiAxXG4gICAgfTtcblxuICAgIHRhc2suX3RleHREaXZzLnB1c2godGV4dERpdik7XG5cbiAgICBpZiAoaXNBbGxXaGl0ZXNwYWNlKGdlb20uc3RyKSkge1xuICAgICAgdGV4dERpdlByb3BlcnRpZXMuaXNXaGl0ZXNwYWNlID0gdHJ1ZTtcblxuICAgICAgdGFzay5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0eCA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRhc2suX3ZpZXdwb3J0LnRyYW5zZm9ybSwgZ2VvbS50cmFuc2Zvcm0pO1xuXG4gICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMih0eFsxXSwgdHhbMF0pO1xuICAgIHZhciBzdHlsZSA9IHN0eWxlc1tnZW9tLmZvbnROYW1lXTtcblxuICAgIGlmIChzdHlsZS52ZXJ0aWNhbCkge1xuICAgICAgYW5nbGUgKz0gTWF0aC5QSSAvIDI7XG4gICAgfVxuXG4gICAgdmFyIGZvbnRIZWlnaHQgPSBNYXRoLnNxcnQodHhbMl0gKiB0eFsyXSArIHR4WzNdICogdHhbM10pO1xuICAgIHZhciBmb250QXNjZW50ID0gZm9udEhlaWdodDtcblxuICAgIGlmIChzdHlsZS5hc2NlbnQpIHtcbiAgICAgIGZvbnRBc2NlbnQgPSBzdHlsZS5hc2NlbnQgKiBmb250QXNjZW50O1xuICAgIH0gZWxzZSBpZiAoc3R5bGUuZGVzY2VudCkge1xuICAgICAgZm9udEFzY2VudCA9ICgxICsgc3R5bGUuZGVzY2VudCkgKiBmb250QXNjZW50O1xuICAgIH1cblxuICAgIGxldCBsZWZ0LCB0b3A7XG5cbiAgICBpZiAoYW5nbGUgPT09IDApIHtcbiAgICAgIGxlZnQgPSB0eFs0XTtcbiAgICAgIHRvcCA9IHR4WzVdIC0gZm9udEFzY2VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IHR4WzRdICsgZm9udEFzY2VudCAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIHRvcCA9IHR4WzVdIC0gZm9udEFzY2VudCAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICB9XG5cbiAgICB0ZXh0RGl2LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICB0ZXh0RGl2LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgdGV4dERpdi5zdHlsZS5mb250U2l6ZSA9IGAke2ZvbnRIZWlnaHR9cHhgO1xuICAgIHRleHREaXYuc3R5bGUuZm9udEZhbWlseSA9IHN0eWxlLmZvbnRGYW1pbHk7XG4gICAgdGV4dERpdi50ZXh0Q29udGVudCA9IGdlb20uc3RyO1xuXG4gICAgaWYgKHRhc2suX2ZvbnRJbnNwZWN0b3JFbmFibGVkKSB7XG4gICAgICB0ZXh0RGl2LmRhdGFzZXQuZm9udE5hbWUgPSBnZW9tLmZvbnROYW1lO1xuICAgIH1cblxuICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgdGV4dERpdlByb3BlcnRpZXMuYW5nbGUgPSBhbmdsZSAqICgxODAgLyBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBsZXQgc2hvdWxkU2NhbGVUZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoZ2VvbS5zdHIubGVuZ3RoID4gMSkge1xuICAgICAgc2hvdWxkU2NhbGVUZXh0ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGdlb20udHJhbnNmb3JtWzBdICE9PSBnZW9tLnRyYW5zZm9ybVszXSkge1xuICAgICAgY29uc3QgYWJzU2NhbGVYID0gTWF0aC5hYnMoZ2VvbS50cmFuc2Zvcm1bMF0pLFxuICAgICAgICAgICAgYWJzU2NhbGVZID0gTWF0aC5hYnMoZ2VvbS50cmFuc2Zvcm1bM10pO1xuXG4gICAgICBpZiAoYWJzU2NhbGVYICE9PSBhYnNTY2FsZVkgJiYgTWF0aC5tYXgoYWJzU2NhbGVYLCBhYnNTY2FsZVkpIC8gTWF0aC5taW4oYWJzU2NhbGVYLCBhYnNTY2FsZVkpID4gMS41KSB7XG4gICAgICAgIHNob3VsZFNjYWxlVGV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFNjYWxlVGV4dCkge1xuICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoID0gZ2VvbS5oZWlnaHQgKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoID0gZ2VvbS53aWR0aCAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldCh0ZXh0RGl2LCB0ZXh0RGl2UHJvcGVydGllcyk7XG5cbiAgICBpZiAodGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdik7XG4gICAgfVxuXG4gICAgaWYgKHRhc2suX2VuaGFuY2VUZXh0U2VsZWN0aW9uKSB7XG4gICAgICB2YXIgYW5nbGVDb3MgPSAxLFxuICAgICAgICAgIGFuZ2xlU2luID0gMDtcblxuICAgICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICAgIGFuZ2xlQ29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICBhbmdsZVNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpdldpZHRoID0gKHN0eWxlLnZlcnRpY2FsID8gZ2VvbS5oZWlnaHQgOiBnZW9tLndpZHRoKSAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgICAgdmFyIGRpdkhlaWdodCA9IGZvbnRIZWlnaHQ7XG4gICAgICB2YXIgbSwgYjtcblxuICAgICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICAgIG0gPSBbYW5nbGVDb3MsIGFuZ2xlU2luLCAtYW5nbGVTaW4sIGFuZ2xlQ29zLCBsZWZ0LCB0b3BdO1xuICAgICAgICBiID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgZGl2V2lkdGgsIGRpdkhlaWdodF0sIG0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYiA9IFtsZWZ0LCB0b3AsIGxlZnQgKyBkaXZXaWR0aCwgdG9wICsgZGl2SGVpZ2h0XTtcbiAgICAgIH1cblxuICAgICAgdGFzay5fYm91bmRzLnB1c2goe1xuICAgICAgICBsZWZ0OiBiWzBdLFxuICAgICAgICB0b3A6IGJbMV0sXG4gICAgICAgIHJpZ2h0OiBiWzJdLFxuICAgICAgICBib3R0b206IGJbM10sXG4gICAgICAgIGRpdjogdGV4dERpdixcbiAgICAgICAgc2l6ZTogW2RpdldpZHRoLCBkaXZIZWlnaHRdLFxuICAgICAgICBtXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXIodGFzaykge1xuICAgIGlmICh0YXNrLl9jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0ZXh0RGl2cyA9IHRhc2suX3RleHREaXZzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gdGFzay5fY2FwYWJpbGl0eTtcbiAgICB2YXIgdGV4dERpdnNMZW5ndGggPSB0ZXh0RGl2cy5sZW5ndGg7XG5cbiAgICBpZiAodGV4dERpdnNMZW5ndGggPiBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUikge1xuICAgICAgdGFzay5fcmVuZGVyaW5nRG9uZSA9IHRydWU7XG4gICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhc2suX3RleHRDb250ZW50U3RyZWFtKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHREaXZzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFzay5fbGF5b3V0VGV4dCh0ZXh0RGl2c1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGFzay5fcmVuZGVyaW5nRG9uZSA9IHRydWU7XG4gICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kUG9zaXRpdmVNaW4odHMsIG9mZnNldCwgY291bnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdCA9IHRzW29mZnNldCsrXTtcblxuICAgICAgaWYgKHQgPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IE1hdGgubWluKHQsIHJlc3VsdCkgOiB0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBleHBhbmQodGFzaykge1xuICAgIHZhciBib3VuZHMgPSB0YXNrLl9ib3VuZHM7XG4gICAgdmFyIHZpZXdwb3J0ID0gdGFzay5fdmlld3BvcnQ7XG4gICAgdmFyIGV4cGFuZGVkID0gZXhwYW5kQm91bmRzKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQsIGJvdW5kcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGFuZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGl2ID0gYm91bmRzW2ldLmRpdjtcblxuICAgICAgdmFyIGRpdlByb3BlcnRpZXMgPSB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgICAgaWYgKGRpdlByb3BlcnRpZXMuYW5nbGUgPT09IDApIHtcbiAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGJvdW5kc1tpXS5sZWZ0IC0gZXhwYW5kZWRbaV0ubGVmdDtcbiAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gYm91bmRzW2ldLnRvcCAtIGV4cGFuZGVkW2ldLnRvcDtcbiAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nUmlnaHQgPSBleHBhbmRlZFtpXS5yaWdodCAtIGJvdW5kc1tpXS5yaWdodDtcbiAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nQm90dG9tID0gZXhwYW5kZWRbaV0uYm90dG9tIC0gYm91bmRzW2ldLmJvdHRvbTtcblxuICAgICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGUgPSBleHBhbmRlZFtpXSxcbiAgICAgICAgICBiID0gYm91bmRzW2ldO1xuICAgICAgdmFyIG0gPSBiLm0sXG4gICAgICAgICAgYyA9IG1bMF0sXG4gICAgICAgICAgcyA9IG1bMV07XG4gICAgICB2YXIgcG9pbnRzID0gW1swLCAwXSwgWzAsIGIuc2l6ZVsxXV0sIFtiLnNpemVbMF0sIDBdLCBiLnNpemVdO1xuICAgICAgdmFyIHRzID0gbmV3IEZsb2F0NjRBcnJheSg2NCk7XG4gICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocCwgaikge1xuICAgICAgICB2YXIgdCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0ocCwgbSk7XG5cbiAgICAgICAgdHNbaiArIDBdID0gYyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBjO1xuICAgICAgICB0c1tqICsgNF0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gcztcbiAgICAgICAgdHNbaiArIDhdID0gYyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gYztcbiAgICAgICAgdHNbaiArIDEyXSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyBzO1xuICAgICAgICB0c1tqICsgMTZdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtcztcbiAgICAgICAgdHNbaiArIDIwXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyBjO1xuICAgICAgICB0c1tqICsgMjRdID0gcyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gLXM7XG4gICAgICAgIHRzW2ogKyAyOF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gYztcbiAgICAgICAgdHNbaiArIDMyXSA9IGMgJiYgKGUubGVmdCAtIHRbMF0pIC8gLWM7XG4gICAgICAgIHRzW2ogKyAzNl0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gLXM7XG4gICAgICAgIHRzW2ogKyA0MF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtYztcbiAgICAgICAgdHNbaiArIDQ0XSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtcztcbiAgICAgICAgdHNbaiArIDQ4XSA9IHMgJiYgKGUubGVmdCAtIHRbMF0pIC8gcztcbiAgICAgICAgdHNbaiArIDUyXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyAtYztcbiAgICAgICAgdHNbaiArIDU2XSA9IHMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIHM7XG4gICAgICAgIHRzW2ogKyA2MF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gLWM7XG4gICAgICB9KTtcbiAgICAgIHZhciBib3hTY2FsZSA9IDEgKyBNYXRoLm1pbihNYXRoLmFicyhjKSwgTWF0aC5hYnMocykpO1xuICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMzIsIDE2KSAvIGJveFNjYWxlO1xuICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gZmluZFBvc2l0aXZlTWluKHRzLCA0OCwgMTYpIC8gYm94U2NhbGU7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMCwgMTYpIC8gYm94U2NhbGU7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBmaW5kUG9zaXRpdmVNaW4odHMsIDE2LCAxNikgLyBib3hTY2FsZTtcblxuICAgICAgdGFzay5fdGV4dERpdlByb3BlcnRpZXMuc2V0KGRpdiwgZGl2UHJvcGVydGllcyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwYW5kQm91bmRzKHdpZHRoLCBoZWlnaHQsIGJveGVzKSB7XG4gICAgdmFyIGJvdW5kcyA9IGJveGVzLm1hcChmdW5jdGlvbiAoYm94LCBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4MTogYm94LmxlZnQsXG4gICAgICAgIHkxOiBib3gudG9wLFxuICAgICAgICB4MjogYm94LnJpZ2h0LFxuICAgICAgICB5MjogYm94LmJvdHRvbSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHgxTmV3OiB1bmRlZmluZWQsXG4gICAgICAgIHgyTmV3OiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgZXhwYW5kQm91bmRzTFRSKHdpZHRoLCBib3VuZHMpO1xuICAgIHZhciBleHBhbmRlZCA9IG5ldyBBcnJheShib3hlcy5sZW5ndGgpO1xuICAgIGJvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgaSA9IGIuaW5kZXg7XG4gICAgICBleHBhbmRlZFtpXSA9IHtcbiAgICAgICAgbGVmdDogYi54MU5ldyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICByaWdodDogYi54Mk5ldyxcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGJveGVzLm1hcChmdW5jdGlvbiAoYm94LCBpKSB7XG4gICAgICB2YXIgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgICBiLngxID0gYm94LnRvcDtcbiAgICAgIGIueTEgPSB3aWR0aCAtIGUucmlnaHQ7XG4gICAgICBiLngyID0gYm94LmJvdHRvbTtcbiAgICAgIGIueTIgPSB3aWR0aCAtIGUubGVmdDtcbiAgICAgIGIuaW5kZXggPSBpO1xuICAgICAgYi54MU5ldyA9IHVuZGVmaW5lZDtcbiAgICAgIGIueDJOZXcgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgZXhwYW5kQm91bmRzTFRSKGhlaWdodCwgYm91bmRzKTtcbiAgICBib3VuZHMuZm9yRWFjaChmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGkgPSBiLmluZGV4O1xuICAgICAgZXhwYW5kZWRbaV0udG9wID0gYi54MU5ldztcbiAgICAgIGV4cGFuZGVkW2ldLmJvdHRvbSA9IGIueDJOZXc7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cGFuZGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhwYW5kQm91bmRzTFRSKHdpZHRoLCBib3VuZHMpIHtcbiAgICBib3VuZHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEueDEgLSBiLngxIHx8IGEuaW5kZXggLSBiLmluZGV4O1xuICAgIH0pO1xuICAgIHZhciBmYWtlQm91bmRhcnkgPSB7XG4gICAgICB4MTogLUluZmluaXR5LFxuICAgICAgeTE6IC1JbmZpbml0eSxcbiAgICAgIHgyOiAwLFxuICAgICAgeTI6IEluZmluaXR5LFxuICAgICAgaW5kZXg6IC0xLFxuICAgICAgeDFOZXc6IDAsXG4gICAgICB4Mk5ldzogMFxuICAgIH07XG4gICAgdmFyIGhvcml6b24gPSBbe1xuICAgICAgc3RhcnQ6IC1JbmZpbml0eSxcbiAgICAgIGVuZDogSW5maW5pdHksXG4gICAgICBib3VuZGFyeTogZmFrZUJvdW5kYXJ5XG4gICAgfV07XG4gICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgaG9yaXpvbi5sZW5ndGggJiYgaG9yaXpvbltpXS5lbmQgPD0gYm91bmRhcnkueTEpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICB2YXIgaiA9IGhvcml6b24ubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGogPj0gMCAmJiBob3Jpem9uW2pdLnN0YXJ0ID49IGJvdW5kYXJ5LnkyKSB7XG4gICAgICAgIGotLTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhvcml6b25QYXJ0LCBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgdmFyIHEsXG4gICAgICAgICAgayxcbiAgICAgICAgICBtYXhYTmV3ID0gLUluZmluaXR5O1xuXG4gICAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgICBob3Jpem9uUGFydCA9IGhvcml6b25bcV07XG4gICAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcbiAgICAgICAgdmFyIHhOZXc7XG5cbiAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDIgPiBib3VuZGFyeS54MSkge1xuICAgICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LmluZGV4ID4gYm91bmRhcnkuaW5kZXggPyBhZmZlY3RlZEJvdW5kYXJ5LngxTmV3IDogYm91bmRhcnkueDE7XG4gICAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgeE5ldyA9IChhZmZlY3RlZEJvdW5kYXJ5LngyICsgYm91bmRhcnkueDEpIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4TmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh4TmV3ID4gbWF4WE5ldykge1xuICAgICAgICAgIG1heFhOZXcgPSB4TmV3O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJvdW5kYXJ5LngxTmV3ID0gbWF4WE5ldztcblxuICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDEpIHtcbiAgICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LmluZGV4ID4gYm91bmRhcnkuaW5kZXgpIHtcbiAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IGFmZmVjdGVkQm91bmRhcnkueDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBtYXhYTmV3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID4gbWF4WE5ldykge1xuICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heChtYXhYTmV3LCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY2hhbmdlZEhvcml6b24gPSBbXSxcbiAgICAgICAgICBsYXN0Qm91bmRhcnkgPSBudWxsO1xuXG4gICAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgICBob3Jpem9uUGFydCA9IGhvcml6b25bcV07XG4gICAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcbiAgICAgICAgdmFyIHVzZUJvdW5kYXJ5ID0gYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngyID8gYWZmZWN0ZWRCb3VuZGFyeSA6IGJvdW5kYXJ5O1xuXG4gICAgICAgIGlmIChsYXN0Qm91bmRhcnkgPT09IHVzZUJvdW5kYXJ5KSB7XG4gICAgICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gaG9yaXpvblBhcnQuZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYW5nZWRIb3Jpem9uLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IGhvcml6b25QYXJ0LnN0YXJ0LFxuICAgICAgICAgICAgZW5kOiBob3Jpem9uUGFydC5lbmQsXG4gICAgICAgICAgICBib3VuZGFyeTogdXNlQm91bmRhcnlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsYXN0Qm91bmRhcnkgPSB1c2VCb3VuZGFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaG9yaXpvbltpXS5zdGFydCA8IGJvdW5kYXJ5LnkxKSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uWzBdLnN0YXJ0ID0gYm91bmRhcnkueTE7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uLnVuc2hpZnQoe1xuICAgICAgICAgIHN0YXJ0OiBob3Jpem9uW2ldLnN0YXJ0LFxuICAgICAgICAgIGVuZDogYm91bmRhcnkueTEsXG4gICAgICAgICAgYm91bmRhcnk6IGhvcml6b25baV0uYm91bmRhcnlcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChib3VuZGFyeS55MiA8IGhvcml6b25bal0uZW5kKSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uW2NoYW5nZWRIb3Jpem9uLmxlbmd0aCAtIDFdLmVuZCA9IGJvdW5kYXJ5LnkyO1xuICAgICAgICBjaGFuZ2VkSG9yaXpvbi5wdXNoKHtcbiAgICAgICAgICBzdGFydDogYm91bmRhcnkueTIsXG4gICAgICAgICAgZW5kOiBob3Jpem9uW2pdLmVuZCxcbiAgICAgICAgICBib3VuZGFyeTogaG9yaXpvbltqXS5ib3VuZGFyeVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVzZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGsgPSBpIC0gMTsgIXVzZWQgJiYgayA+PSAwICYmIGhvcml6b25ba10uc3RhcnQgPj0gYWZmZWN0ZWRCb3VuZGFyeS55MTsgay0tKSB7XG4gICAgICAgICAgdXNlZCA9IGhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsgPSBqICsgMTsgIXVzZWQgJiYgayA8IGhvcml6b24ubGVuZ3RoICYmIGhvcml6b25ba10uZW5kIDw9IGFmZmVjdGVkQm91bmRhcnkueTI7IGsrKykge1xuICAgICAgICAgIHVzZWQgPSBob3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChrID0gMDsgIXVzZWQgJiYgayA8IGNoYW5nZWRIb3Jpem9uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgdXNlZCA9IGNoYW5nZWRIb3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1c2VkKSB7XG4gICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShob3Jpem9uLCBbaSwgaiAtIGkgKyAxXS5jb25jYXQoY2hhbmdlZEhvcml6b24pKTtcbiAgICB9KTtcbiAgICBob3Jpem9uLmZvckVhY2goZnVuY3Rpb24gKGhvcml6b25QYXJ0KSB7XG4gICAgICB2YXIgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heCh3aWR0aCwgYWZmZWN0ZWRCb3VuZGFyeS54Mik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBUZXh0TGF5ZXJSZW5kZXJUYXNrKHtcbiAgICB0ZXh0Q29udGVudCxcbiAgICB0ZXh0Q29udGVudFN0cmVhbSxcbiAgICBjb250YWluZXIsXG4gICAgdmlld3BvcnQsXG4gICAgdGV4dERpdnMsXG4gICAgdGV4dENvbnRlbnRJdGVtc1N0cixcbiAgICBlbmhhbmNlVGV4dFNlbGVjdGlvblxuICB9KSB7XG4gICAgdGhpcy5fdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICB0aGlzLl90ZXh0Q29udGVudFN0cmVhbSA9IHRleHRDb250ZW50U3RyZWFtO1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgdGhpcy5fdGV4dERpdnMgPSB0ZXh0RGl2cyB8fCBbXTtcbiAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyID0gdGV4dENvbnRlbnRJdGVtc1N0ciB8fCBbXTtcbiAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgdGhpcy5fZm9udEluc3BlY3RvckVuYWJsZWQgPSAhIShnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yLmVuYWJsZWQpO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250RmFtaWx5ID0gbnVsbDtcbiAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4ID0gbnVsbDtcbiAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdGhpcy5fcmVuZGVyaW5nRG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgdGhpcy5fYm91bmRzID0gW107XG5cbiAgICB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fbGF5b3V0VGV4dEN0eCkge1xuICAgICAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4LmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHguY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHggPSBudWxsO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIFRleHRMYXllclJlbmRlclRhc2sucHJvdG90eXBlID0ge1xuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9LFxuXG4gICAgY2FuY2VsOiBmdW5jdGlvbiBUZXh0TGF5ZXJfY2FuY2VsKCkge1xuICAgICAgdGhpcy5fY2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG5cbiAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3JlbmRlclRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICAgIHRoaXMuX3JlbmRlclRpbWVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG4gICAgfSxcblxuICAgIF9wcm9jZXNzSXRlbXMoaXRlbXMsIHN0eWxlQ2FjaGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2goaXRlbXNbaV0uc3RyKTtcblxuICAgICAgICBhcHBlbmRUZXh0KHRoaXMsIGl0ZW1zW2ldLCBzdHlsZUNhY2hlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xheW91dFRleHQodGV4dERpdikge1xuICAgICAgY29uc3QgdGV4dERpdlByb3BlcnRpZXMgPSB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQodGV4dERpdik7XG5cbiAgICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHJhbnNmb3JtID0gXCJcIjtcblxuICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICBmb250RmFtaWx5XG4gICAgICAgIH0gPSB0ZXh0RGl2LnN0eWxlO1xuXG4gICAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4LmZvbnQgPSBgJHtmb250U2l6ZX0gJHtmb250RmFtaWx5fWA7XG4gICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGhcbiAgICAgICAgfSA9IHRoaXMuX2xheW91dFRleHRDdHgubWVhc3VyZVRleHQodGV4dERpdi50ZXh0Q29udGVudCk7XG5cbiAgICAgICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLnNjYWxlID0gdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggLyB3aWR0aDtcbiAgICAgICAgICB0cmFuc2Zvcm0gPSBgc2NhbGVYKCR7dGV4dERpdlByb3BlcnRpZXMuc2NhbGV9KWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlICE9PSAwKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IGByb3RhdGUoJHt0ZXh0RGl2UHJvcGVydGllcy5hbmdsZX1kZWcpICR7dHJhbnNmb3JtfWA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2Zvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHREaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpO1xuXG4gICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGV4dERpdik7XG4gICAgfSxcblxuICAgIF9yZW5kZXI6IGZ1bmN0aW9uIFRleHRMYXllcl9yZW5kZXIodGltZW91dCkge1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGxldCBzdHlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgICAgY2FudmFzLm1vek9wYXF1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiLCB7XG4gICAgICAgIGFscGhhOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl90ZXh0Q29udGVudCkge1xuICAgICAgICBjb25zdCB0ZXh0SXRlbXMgPSB0aGlzLl90ZXh0Q29udGVudC5pdGVtcztcbiAgICAgICAgY29uc3QgdGV4dFN0eWxlcyA9IHRoaXMuX3RleHRDb250ZW50LnN0eWxlcztcblxuICAgICAgICB0aGlzLl9wcm9jZXNzSXRlbXModGV4dEl0ZW1zLCB0ZXh0U3R5bGVzKTtcblxuICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICAgICAgY29uc3QgcHVtcCA9ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZG9uZVxuICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGVDYWNoZSwgdmFsdWUuc3R5bGVzKTtcblxuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0l0ZW1zKHZhbHVlLml0ZW1zLCBzdHlsZUNhY2hlKTtcblxuICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9yZWFkZXIgPSB0aGlzLl90ZXh0Q29udGVudFN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgcHVtcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWl0aGVyIFwidGV4dENvbnRlbnRcIiBub3IgXCJ0ZXh0Q29udGVudFN0cmVhbVwiJyArIFwiIHBhcmFtZXRlcnMgc3BlY2lmaWVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICBzdHlsZUNhY2hlID0gbnVsbDtcblxuICAgICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgICByZW5kZXIodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmVuZGVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlcih0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbWVyID0gbnVsbDtcbiAgICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgIH0sXG4gICAgZXhwYW5kVGV4dERpdnM6IGZ1bmN0aW9uIFRleHRMYXllcl9leHBhbmRUZXh0RGl2cyhleHBhbmREaXZzKSB7XG4gICAgICBpZiAoIXRoaXMuX2VuaGFuY2VUZXh0U2VsZWN0aW9uIHx8ICF0aGlzLl9yZW5kZXJpbmdEb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvdW5kcyAhPT0gbnVsbCkge1xuICAgICAgICBleHBhbmQodGhpcyk7XG4gICAgICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybUJ1ZiA9IFtdLFxuICAgICAgICAgICAgcGFkZGluZ0J1ZiA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl90ZXh0RGl2cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpdiA9IHRoaXMuX3RleHREaXZzW2ldO1xuXG4gICAgICAgIGNvbnN0IGRpdlByb3BzID0gdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KGRpdik7XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLmlzV2hpdGVzcGFjZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4cGFuZERpdnMpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1CdWYubGVuZ3RoID0gMDtcbiAgICAgICAgICBwYWRkaW5nQnVmLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICBpZiAoZGl2UHJvcHMub3JpZ2luYWxUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybUJ1Zi5wdXNoKGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ1RvcCA+IDApIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaChgJHtkaXZQcm9wcy5wYWRkaW5nVG9wfXB4YCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm1CdWYucHVzaChgdHJhbnNsYXRlWSgkey1kaXZQcm9wcy5wYWRkaW5nVG9wfXB4KWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdSaWdodCA+IDApIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaChgJHtkaXZQcm9wcy5wYWRkaW5nUmlnaHQgLyBkaXZQcm9wcy5zY2FsZX1weGApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdCb3R0b20gPiAwKSB7XG4gICAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goYCR7ZGl2UHJvcHMucGFkZGluZ0JvdHRvbX1weGApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdMZWZ0ID4gMCkge1xuICAgICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdMZWZ0IC8gZGl2UHJvcHMuc2NhbGV9cHhgKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybUJ1Zi5wdXNoKGB0cmFuc2xhdGVYKCR7LWRpdlByb3BzLnBhZGRpbmdMZWZ0IC8gZGl2UHJvcHMuc2NhbGV9cHgpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaXYuc3R5bGUucGFkZGluZyA9IHBhZGRpbmdCdWYuam9pbihcIiBcIik7XG5cbiAgICAgICAgICBpZiAodHJhbnNmb3JtQnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybUJ1Zi5qb2luKFwiIFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGl2LnN0eWxlLnBhZGRpbmcgPSBudWxsO1xuICAgICAgICAgIGRpdi5zdHlsZS50cmFuc2Zvcm0gPSBkaXZQcm9wcy5vcmlnaW5hbFRyYW5zZm9ybTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZW5kZXJUZXh0TGF5ZXIocmVuZGVyUGFyYW1ldGVycykge1xuICAgIHZhciB0YXNrID0gbmV3IFRleHRMYXllclJlbmRlclRhc2soe1xuICAgICAgdGV4dENvbnRlbnQ6IHJlbmRlclBhcmFtZXRlcnMudGV4dENvbnRlbnQsXG4gICAgICB0ZXh0Q29udGVudFN0cmVhbTogcmVuZGVyUGFyYW1ldGVycy50ZXh0Q29udGVudFN0cmVhbSxcbiAgICAgIGNvbnRhaW5lcjogcmVuZGVyUGFyYW1ldGVycy5jb250YWluZXIsXG4gICAgICB2aWV3cG9ydDogcmVuZGVyUGFyYW1ldGVycy52aWV3cG9ydCxcbiAgICAgIHRleHREaXZzOiByZW5kZXJQYXJhbWV0ZXJzLnRleHREaXZzLFxuICAgICAgdGV4dENvbnRlbnRJdGVtc1N0cjogcmVuZGVyUGFyYW1ldGVycy50ZXh0Q29udGVudEl0ZW1zU3RyLFxuICAgICAgZW5oYW5jZVRleHRTZWxlY3Rpb246IHJlbmRlclBhcmFtZXRlcnMuZW5oYW5jZVRleHRTZWxlY3Rpb25cbiAgICB9KTtcblxuICAgIHRhc2suX3JlbmRlcihyZW5kZXJQYXJhbWV0ZXJzLnRpbWVvdXQpO1xuXG4gICAgcmV0dXJuIHRhc2s7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyVGV4dExheWVyO1xufSgpO1xuXG5leHBvcnRzLnJlbmRlclRleHRMYXllciA9IHJlbmRlclRleHRMYXllcjtcblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TVkdHcmFwaGljcyA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxubGV0IFNWR0dyYXBoaWNzID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzXCIpO1xufTtcblxuZXhwb3J0cy5TVkdHcmFwaGljcyA9IFNWR0dyYXBoaWNzO1xue1xuICBjb25zdCBTVkdfREVGQVVMVFMgPSB7XG4gICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiLFxuICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgZmlsbENvbG9yOiBcIiMwMDAwMDBcIlxuICB9O1xuICBjb25zdCBYTUxfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiO1xuICBjb25zdCBYTElOS19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiO1xuICBjb25zdCBMSU5FX0NBUF9TVFlMRVMgPSBbXCJidXR0XCIsIFwicm91bmRcIiwgXCJzcXVhcmVcIl07XG4gIGNvbnN0IExJTkVfSk9JTl9TVFlMRVMgPSBbXCJtaXRlclwiLCBcInJvdW5kXCIsIFwiYmV2ZWxcIl07XG5cbiAgY29uc3QgY29udmVydEltZ0RhdGFUb1BuZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBQTkdfSEVBREVSID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODksIDB4NTAsIDB4NGUsIDB4NDcsIDB4MGQsIDB4MGEsIDB4MWEsIDB4MGFdKTtcbiAgICBjb25zdCBDSFVOS19XUkFQUEVSX1NJWkUgPSAxMjtcbiAgICBjb25zdCBjcmNUYWJsZSA9IG5ldyBJbnQzMkFycmF5KDI1Nik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICBsZXQgYyA9IGk7XG5cbiAgICAgIGZvciAobGV0IGggPSAwOyBoIDwgODsgaCsrKSB7XG4gICAgICAgIGlmIChjICYgMSkge1xuICAgICAgICAgIGMgPSAweGVkYjg4MzIwIF4gYyA+PiAxICYgMHg3ZmZmZmZmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjID0gYyA+PiAxICYgMHg3ZmZmZmZmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjcmNUYWJsZVtpXSA9IGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JjMzIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IGNyYyA9IC0xO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICBjb25zdCBhID0gKGNyYyBeIGRhdGFbaV0pICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IGNyY1RhYmxlW2FdO1xuICAgICAgICBjcmMgPSBjcmMgPj4+IDggXiBiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JjIF4gLTE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd3JpdGVQbmdDaHVuayh0eXBlLCBib2R5LCBkYXRhLCBvZmZzZXQpIHtcbiAgICAgIGxldCBwID0gb2Zmc2V0O1xuICAgICAgY29uc3QgbGVuID0gYm9keS5sZW5ndGg7XG4gICAgICBkYXRhW3BdID0gbGVuID4+IDI0ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDFdID0gbGVuID4+IDE2ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDJdID0gbGVuID4+IDggJiAweGZmO1xuICAgICAgZGF0YVtwICsgM10gPSBsZW4gJiAweGZmO1xuICAgICAgcCArPSA0O1xuICAgICAgZGF0YVtwXSA9IHR5cGUuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAxXSA9IHR5cGUuY2hhckNvZGVBdCgxKSAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAyXSA9IHR5cGUuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAzXSA9IHR5cGUuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgICBwICs9IDQ7XG4gICAgICBkYXRhLnNldChib2R5LCBwKTtcbiAgICAgIHAgKz0gYm9keS5sZW5ndGg7XG4gICAgICBjb25zdCBjcmMgPSBjcmMzMihkYXRhLCBvZmZzZXQgKyA0LCBwKTtcbiAgICAgIGRhdGFbcF0gPSBjcmMgPj4gMjQgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMV0gPSBjcmMgPj4gMTYgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMl0gPSBjcmMgPj4gOCAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAzXSA9IGNyYyAmIDB4ZmY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRsZXIzMihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICBsZXQgYSA9IDE7XG4gICAgICBsZXQgYiA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICAgIGEgPSAoYSArIChkYXRhW2ldICYgMHhmZikpICUgNjU1MjE7XG4gICAgICAgIGIgPSAoYiArIGEpICUgNjU1MjE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiIDw8IDE2IHwgYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZsYXRlU3luYyhsaXRlcmFscykge1xuICAgICAgaWYgKCFfaXNfbm9kZS5pc05vZGVKUykge1xuICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgaW5wdXQ7XG5cbiAgICAgICAgaWYgKHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbnMubm9kZSkgPj0gOCkge1xuICAgICAgICAgIGlucHV0ID0gbGl0ZXJhbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5wdXQgPSBCdWZmZXIuZnJvbShsaXRlcmFscyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXRwdXQgPSByZXF1aXJlKFwiemxpYlwiKS5kZWZsYXRlU3luYyhpbnB1dCwge1xuICAgICAgICAgIGxldmVsOiA5XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBvdXRwdXQgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gb3V0cHV0IDogbmV3IFVpbnQ4QXJyYXkob3V0cHV0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6IFwiICsgZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZsYXRlU3luY1VuY29tcHJlc3NlZChsaXRlcmFscyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpIHtcbiAgICAgIGxldCBsZW4gPSBsaXRlcmFscy5sZW5ndGg7XG4gICAgICBjb25zdCBtYXhCbG9ja0xlbmd0aCA9IDB4ZmZmZjtcbiAgICAgIGNvbnN0IGRlZmxhdGVCbG9ja3MgPSBNYXRoLmNlaWwobGVuIC8gbWF4QmxvY2tMZW5ndGgpO1xuICAgICAgY29uc3QgaWRhdCA9IG5ldyBVaW50OEFycmF5KDIgKyBsZW4gKyBkZWZsYXRlQmxvY2tzICogNSArIDQpO1xuICAgICAgbGV0IHBpID0gMDtcbiAgICAgIGlkYXRbcGkrK10gPSAweDc4O1xuICAgICAgaWRhdFtwaSsrXSA9IDB4OWM7XG4gICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgd2hpbGUgKGxlbiA+IG1heEJsb2NrTGVuZ3RoKSB7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweDAwO1xuICAgICAgICBpZGF0W3BpKytdID0gMHhmZjtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4ZmY7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweDAwO1xuICAgICAgICBpZGF0W3BpKytdID0gMHgwMDtcbiAgICAgICAgaWRhdC5zZXQobGl0ZXJhbHMuc3ViYXJyYXkocG9zLCBwb3MgKyBtYXhCbG9ja0xlbmd0aCksIHBpKTtcbiAgICAgICAgcGkgKz0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICAgIHBvcyArPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgICAgbGVuIC09IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZGF0W3BpKytdID0gMHgwMTtcbiAgICAgIGlkYXRbcGkrK10gPSBsZW4gJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSB+bGVuICYgMHhmZmZmICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSAofmxlbiAmIDB4ZmZmZikgPj4gOCAmIDB4ZmY7XG4gICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MpLCBwaSk7XG4gICAgICBwaSArPSBsaXRlcmFscy5sZW5ndGggLSBwb3M7XG4gICAgICBjb25zdCBhZGxlciA9IGFkbGVyMzIobGl0ZXJhbHMsIDAsIGxpdGVyYWxzLmxlbmd0aCk7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gMjQgJiAweGZmO1xuICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDE2ICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiA4ICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBhZGxlciAmIDB4ZmY7XG4gICAgICByZXR1cm4gaWRhdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmNvZGUoaW1nRGF0YSwga2luZCwgZm9yY2VEYXRhU2NoZW1hLCBpc01hc2spIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgbGV0IGJpdERlcHRoLCBjb2xvclR5cGUsIGxpbmVTaXplO1xuICAgICAgY29uc3QgYnl0ZXMgPSBpbWdEYXRhLmRhdGE7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpcbiAgICAgICAgICBjb2xvclR5cGUgPSAwO1xuICAgICAgICAgIGJpdERlcHRoID0gMTtcbiAgICAgICAgICBsaW5lU2l6ZSA9IHdpZHRoICsgNyA+PiAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDpcbiAgICAgICAgICBjb2xvclR5cGUgPSAyO1xuICAgICAgICAgIGJpdERlcHRoID0gODtcbiAgICAgICAgICBsaW5lU2l6ZSA9IHdpZHRoICogMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQOlxuICAgICAgICAgIGNvbG9yVHlwZSA9IDY7XG4gICAgICAgICAgYml0RGVwdGggPSA4O1xuICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKiA0O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXRcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpdGVyYWxzID0gbmV3IFVpbnQ4QXJyYXkoKDEgKyBsaW5lU2l6ZSkgKiBoZWlnaHQpO1xuICAgICAgbGV0IG9mZnNldExpdGVyYWxzID0gMCxcbiAgICAgICAgICBvZmZzZXRCeXRlcyA9IDA7XG5cbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHtcbiAgICAgICAgbGl0ZXJhbHNbb2Zmc2V0TGl0ZXJhbHMrK10gPSAwO1xuICAgICAgICBsaXRlcmFscy5zZXQoYnl0ZXMuc3ViYXJyYXkob2Zmc2V0Qnl0ZXMsIG9mZnNldEJ5dGVzICsgbGluZVNpemUpLCBvZmZzZXRMaXRlcmFscyk7XG4gICAgICAgIG9mZnNldEJ5dGVzICs9IGxpbmVTaXplO1xuICAgICAgICBvZmZzZXRMaXRlcmFscyArPSBsaW5lU2l6ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCAmJiBpc01hc2spIHtcbiAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICBvZmZzZXRMaXRlcmFscysrO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBsaXRlcmFsc1tvZmZzZXRMaXRlcmFscysrXSBePSAweGZmO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpaGRyID0gbmV3IFVpbnQ4QXJyYXkoW3dpZHRoID4+IDI0ICYgMHhmZiwgd2lkdGggPj4gMTYgJiAweGZmLCB3aWR0aCA+PiA4ICYgMHhmZiwgd2lkdGggJiAweGZmLCBoZWlnaHQgPj4gMjQgJiAweGZmLCBoZWlnaHQgPj4gMTYgJiAweGZmLCBoZWlnaHQgPj4gOCAmIDB4ZmYsIGhlaWdodCAmIDB4ZmYsIGJpdERlcHRoLCBjb2xvclR5cGUsIDB4MDAsIDB4MDAsIDB4MDBdKTtcbiAgICAgIGNvbnN0IGlkYXQgPSBkZWZsYXRlU3luYyhsaXRlcmFscyk7XG4gICAgICBjb25zdCBwbmdMZW5ndGggPSBQTkdfSEVBREVSLmxlbmd0aCArIENIVU5LX1dSQVBQRVJfU0laRSAqIDMgKyBpaGRyLmxlbmd0aCArIGlkYXQubGVuZ3RoO1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHBuZ0xlbmd0aCk7XG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgIGRhdGEuc2V0KFBOR19IRUFERVIsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gUE5HX0hFQURFUi5sZW5ndGg7XG4gICAgICB3cml0ZVBuZ0NodW5rKFwiSUhEUlwiLCBpaGRyLCBkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IENIVU5LX1dSQVBQRVJfU0laRSArIGloZHIubGVuZ3RoO1xuICAgICAgd3JpdGVQbmdDaHVuayhcIklEQVRBXCIsIGlkYXQsIGRhdGEsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gQ0hVTktfV1JBUFBFUl9TSVpFICsgaWRhdC5sZW5ndGg7XG4gICAgICB3cml0ZVBuZ0NodW5rKFwiSUVORFwiLCBuZXcgVWludDhBcnJheSgwKSwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuY3JlYXRlT2JqZWN0VVJMKShkYXRhLCBcImltYWdlL3BuZ1wiLCBmb3JjZURhdGFTY2hlbWEpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBjb252ZXJ0SW1nRGF0YVRvUG5nKGltZ0RhdGEsIGZvcmNlRGF0YVNjaGVtYSwgaXNNYXNrKSB7XG4gICAgICBjb25zdCBraW5kID0gaW1nRGF0YS5raW5kID09PSB1bmRlZmluZWQgPyBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgOiBpbWdEYXRhLmtpbmQ7XG4gICAgICByZXR1cm4gZW5jb2RlKGltZ0RhdGEsIGtpbmQsIGZvcmNlRGF0YVNjaGVtYSwgaXNNYXNrKTtcbiAgICB9O1xuICB9KCk7XG5cbiAgY2xhc3MgU1ZHRXh0cmFTdGF0ZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgICAgdGhpcy5mb250V2VpZ2h0ID0gU1ZHX0RFRkFVTFRTLmZvbnRXZWlnaHQ7XG4gICAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgIHRoaXMudGV4dFJlbmRlcmluZ01vZGUgPSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMO1xuICAgICAgdGhpcy50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgdGhpcy54ID0gMDtcbiAgICAgIHRoaXMueSA9IDA7XG4gICAgICB0aGlzLmxpbmVYID0gMDtcbiAgICAgIHRoaXMubGluZVkgPSAwO1xuICAgICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgICB0aGlzLndvcmRTcGFjaW5nID0gMDtcbiAgICAgIHRoaXMudGV4dEhTY2FsZSA9IDE7XG4gICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgIHRoaXMuZmlsbENvbG9yID0gU1ZHX0RFRkFVTFRTLmZpbGxDb2xvcjtcbiAgICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBcIiMwMDAwMDBcIjtcbiAgICAgIHRoaXMuZmlsbEFscGhhID0gMTtcbiAgICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgdGhpcy5saW5lSm9pbiA9IFwiXCI7XG4gICAgICB0aGlzLmxpbmVDYXAgPSBcIlwiO1xuICAgICAgdGhpcy5taXRlckxpbWl0ID0gMDtcbiAgICAgIHRoaXMuZGFzaEFycmF5ID0gW107XG4gICAgICB0aGlzLmRhc2hQaGFzZSA9IDA7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IFtdO1xuICAgICAgdGhpcy5hY3RpdmVDbGlwVXJsID0gbnVsbDtcbiAgICAgIHRoaXMuY2xpcEdyb3VwID0gbnVsbDtcbiAgICAgIHRoaXMubWFza0lkID0gXCJcIjtcbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICB0aGlzLnggPSB4O1xuICAgICAgdGhpcy55ID0geTtcbiAgICB9XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wTGlzdFRvVHJlZShvcExpc3QpIHtcbiAgICBsZXQgb3BUcmVlID0gW107XG4gICAgY29uc3QgdG1wID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG9wTGlzdEVsZW1lbnQgb2Ygb3BMaXN0KSB7XG4gICAgICBpZiAob3BMaXN0RWxlbWVudC5mbiA9PT0gXCJzYXZlXCIpIHtcbiAgICAgICAgb3BUcmVlLnB1c2goe1xuICAgICAgICAgIGZuSWQ6IDkyLFxuICAgICAgICAgIGZuOiBcImdyb3VwXCIsXG4gICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICB0bXAucHVzaChvcFRyZWUpO1xuICAgICAgICBvcFRyZWUgPSBvcFRyZWVbb3BUcmVlLmxlbmd0aCAtIDFdLml0ZW1zO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wTGlzdEVsZW1lbnQuZm4gPT09IFwicmVzdG9yZVwiKSB7XG4gICAgICAgIG9wVHJlZSA9IHRtcC5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wVHJlZS5wdXNoKG9wTGlzdEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcFRyZWU7XG4gIH1cblxuICBmdW5jdGlvbiBwZih2YWx1ZSkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcyA9IHZhbHVlLnRvRml4ZWQoMTApO1xuICAgIGxldCBpID0gcy5sZW5ndGggLSAxO1xuXG4gICAgaWYgKHNbaV0gIT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICBpLS07XG4gICAgfSB3aGlsZSAoc1tpXSA9PT0gXCIwXCIpO1xuXG4gICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIHNbaV0gPT09IFwiLlwiID8gaSA6IGkgKyAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBtKG0pIHtcbiAgICBpZiAobVs0XSA9PT0gMCAmJiBtWzVdID09PSAwKSB7XG4gICAgICBpZiAobVsxXSA9PT0gMCAmJiBtWzJdID09PSAwKSB7XG4gICAgICAgIGlmIChtWzBdID09PSAxICYmIG1bM10gPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgc2NhbGUoJHtwZihtWzBdKX0gJHtwZihtWzNdKX0pYDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1bMF0gPT09IG1bM10gJiYgbVsxXSA9PT0gLW1bMl0pIHtcbiAgICAgICAgY29uc3QgYSA9IE1hdGguYWNvcyhtWzBdKSAqIDE4MCAvIE1hdGguUEk7XG4gICAgICAgIHJldHVybiBgcm90YXRlKCR7cGYoYSl9KWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtWzBdID09PSAxICYmIG1bMV0gPT09IDAgJiYgbVsyXSA9PT0gMCAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7cGYobVs0XSl9ICR7cGYobVs1XSl9KWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGBtYXRyaXgoJHtwZihtWzBdKX0gJHtwZihtWzFdKX0gJHtwZihtWzJdKX0gJHtwZihtWzNdKX0gJHtwZihtWzRdKX0gYCArIGAke3BmKG1bNV0pfSlgO1xuICB9XG5cbiAgbGV0IGNsaXBDb3VudCA9IDA7XG4gIGxldCBtYXNrQ291bnQgPSAwO1xuICBsZXQgc2hhZGluZ0NvdW50ID0gMDtcbiAgZXhwb3J0cy5TVkdHcmFwaGljcyA9IFNWR0dyYXBoaWNzID0gY2xhc3MgU1ZHR3JhcGhpY3Mge1xuICAgIGNvbnN0cnVjdG9yKGNvbW1vbk9ianMsIG9ianMsIGZvcmNlRGF0YVNjaGVtYSA9IGZhbHNlKSB7XG4gICAgICB0aGlzLnN2Z0ZhY3RvcnkgPSBuZXcgX2Rpc3BsYXlfdXRpbHMuRE9NU1ZHRmFjdG9yeSgpO1xuICAgICAgdGhpcy5jdXJyZW50ID0gbmV3IFNWR0V4dHJhU3RhdGUoKTtcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgdGhpcy50cmFuc2Zvcm1TdGFjayA9IFtdO1xuICAgICAgdGhpcy5leHRyYVN0YWNrID0gW107XG4gICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgdGhpcy5vYmpzID0gb2JqcztcbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICB0aGlzLmVtYmVkRm9udHMgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1iZWRkZWRGb250cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB0aGlzLmNzc1N0eWxlID0gbnVsbDtcbiAgICAgIHRoaXMuZm9yY2VEYXRhU2NoZW1hID0gISFmb3JjZURhdGFTY2hlbWE7XG4gICAgICB0aGlzLl9vcGVyYXRvcklkTWFwcGluZyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wIGluIF91dGlsLk9QUykge1xuICAgICAgICB0aGlzLl9vcGVyYXRvcklkTWFwcGluZ1tfdXRpbC5PUFNbb3BdXSA9IG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy50cmFuc2Zvcm1NYXRyaXgpO1xuICAgICAgY29uc3Qgb2xkID0gdGhpcy5jdXJyZW50O1xuICAgICAgdGhpcy5leHRyYVN0YWNrLnB1c2gob2xkKTtcbiAgICAgIHRoaXMuY3VycmVudCA9IG9sZC5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJlc3RvcmUoKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmV4dHJhU3RhY2sucG9wKCk7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ3JvdXAoaXRlbXMpIHtcbiAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKGl0ZW1zKTtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIGxvYWREZXBlbmRlbmNpZXMob3BlcmF0b3JMaXN0KSB7XG4gICAgICBjb25zdCBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgICBjb25zdCBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmbkFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy5kZXBlbmRlbmN5KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhcmdzQXJyYXlbaV0pIHtcbiAgICAgICAgICBjb25zdCBvYmpzUG9vbCA9IG9iai5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMgOiB0aGlzLm9ianM7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgb2Jqc1Bvb2wuZ2V0KG9iaiwgcmVzb2x2ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHByb21pc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgY29uc3QgdHJhbnNmb3JtTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCwgdHJhbnNmb3JtTWF0cml4KTtcbiAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U1ZHKG9wZXJhdG9yTGlzdCwgdmlld3BvcnQpIHtcbiAgICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDtcblxuICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IHRoaXMuX2luaXRpYWxpemUodmlld3BvcnQpO1xuXG4gICAgICByZXR1cm4gdGhpcy5sb2FkRGVwZW5kZW5jaWVzKG9wZXJhdG9yTGlzdCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICB0aGlzLmV4ZWN1dGVPcFRyZWUodGhpcy5jb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCkpO1xuICAgICAgICByZXR1cm4gc3ZnRWxlbWVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnZlcnRPcExpc3Qob3BlcmF0b3JMaXN0KSB7XG4gICAgICBjb25zdCBvcGVyYXRvcklkTWFwcGluZyA9IHRoaXMuX29wZXJhdG9ySWRNYXBwaW5nO1xuICAgICAgY29uc3QgYXJnc0FycmF5ID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheTtcbiAgICAgIGNvbnN0IGZuQXJyYXkgPSBvcGVyYXRvckxpc3QuZm5BcnJheTtcbiAgICAgIGNvbnN0IG9wTGlzdCA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmbkFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgZm5JZCA9IGZuQXJyYXlbaV07XG4gICAgICAgIG9wTGlzdC5wdXNoKHtcbiAgICAgICAgICBmbklkLFxuICAgICAgICAgIGZuOiBvcGVyYXRvcklkTWFwcGluZ1tmbklkXSxcbiAgICAgICAgICBhcmdzOiBhcmdzQXJyYXlbaV1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcExpc3RUb1RyZWUob3BMaXN0KTtcbiAgICB9XG5cbiAgICBleGVjdXRlT3BUcmVlKG9wVHJlZSkge1xuICAgICAgZm9yIChjb25zdCBvcFRyZWVFbGVtZW50IG9mIG9wVHJlZSkge1xuICAgICAgICBjb25zdCBmbiA9IG9wVHJlZUVsZW1lbnQuZm47XG4gICAgICAgIGNvbnN0IGZuSWQgPSBvcFRyZWVFbGVtZW50LmZuSWQ7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBvcFRyZWVFbGVtZW50LmFyZ3M7XG5cbiAgICAgICAgc3dpdGNoIChmbklkIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luVGV4dDpcbiAgICAgICAgICAgIHRoaXMuYmVnaW5UZXh0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmRlcGVuZGVuY3k6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmc6XG4gICAgICAgICAgICB0aGlzLnNldExlYWRpbmcoYXJncyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpcbiAgICAgICAgICAgIHRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdGhpcy5zZXRGb250KGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIHRoaXMuc2hvd1RleHQoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgdGhpcy5zaG93VGV4dChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kVGV4dDpcbiAgICAgICAgICAgIHRoaXMuZW5kVGV4dCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVGV4dDpcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nOlxuICAgICAgICAgICAgdGhpcy5zZXRDaGFyU3BhY2luZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmc6XG4gICAgICAgICAgICB0aGlzLnNldFdvcmRTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRIU2NhbGU6XG4gICAgICAgICAgICB0aGlzLnNldEhTY2FsZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dE1hdHJpeChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dFJpc2U6XG4gICAgICAgICAgICB0aGlzLnNldFRleHRSaXNlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dFJlbmRlcmluZ01vZGUoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExpbmVXaWR0aDpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZVdpZHRoKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMaW5lSm9pbjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4oYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExpbmVDYXA6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVDYXAoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldE1pdGVyTGltaXQ6XG4gICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbFJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlUkdCQ29sb3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlQ29sb3JOKGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOOlxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsQ29sb3JOKGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaGFkaW5nRmlsbDpcbiAgICAgICAgICAgIHRoaXMuc2hhZGluZ0ZpbGwoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldERhc2g6XG4gICAgICAgICAgICB0aGlzLnNldERhc2goYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFJlbmRlcmluZ0ludGVudDpcbiAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGbGF0bmVzczpcbiAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3MoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIHRoaXMuc2V0R1N0YXRlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5maWxsOlxuICAgICAgICAgICAgdGhpcy5maWxsKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvRmlsbDpcbiAgICAgICAgICAgIHRoaXMuZW9GaWxsKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmZpbGxTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xpcDpcbiAgICAgICAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvQ2xpcDpcbiAgICAgICAgICAgIHRoaXMuY2xpcChcImV2ZW5vZGRcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazpcbiAgICAgICAgICAgIHRoaXMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgdGhpcy5wYWludEltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6XG4gICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICB0aGlzLnBhaW50SW1hZ2VNYXNrWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luOlxuICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6XG4gICAgICAgICAgICB0aGlzLnBhaW50Rm9ybVhPYmplY3RFbmQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmNsb3NlU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlRmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VGaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgIHRoaXMubmV4dExpbmUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMudHJhbnNmb3JtOlxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGg6XG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdFBhdGgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFBhdGg6XG4gICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA5MjpcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAob3BUcmVlRWxlbWVudC5pdGVtcyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgJHtmbn1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpIHtcbiAgICAgIHRoaXMuY3VycmVudC53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nO1xuICAgIH1cblxuICAgIHNldENoYXJTcGFjaW5nKGNoYXJTcGFjaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuY2hhclNwYWNpbmcgPSBjaGFyU3BhY2luZztcbiAgICB9XG5cbiAgICBuZXh0TGluZSgpIHtcbiAgICAgIHRoaXMubW92ZVRleHQoMCwgdGhpcy5jdXJyZW50LmxlYWRpbmcpO1xuICAgIH1cblxuICAgIHNldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeCA9IGN1cnJlbnQubGluZU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuICAgICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCA9IDA7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZID0gMDtcbiAgICAgIGN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC55Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dHNwYW5cIik7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1mYW1pbHlcIiwgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXNpemVcIiwgYCR7cGYoY3VycmVudC5mb250U2l6ZSl9cHhgKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRleHRcIik7XG4gICAgICBjdXJyZW50LnR4dEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudC50c3Bhbik7XG4gICAgfVxuXG4gICAgYmVnaW5UZXh0KCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGN1cnJlbnQueCA9IGN1cnJlbnQubGluZVggPSAwO1xuICAgICAgY3VycmVudC55ID0gY3VycmVudC5saW5lWSA9IDA7XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICBjdXJyZW50LmxpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgICBjdXJyZW50LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dHNwYW5cIik7XG4gICAgICBjdXJyZW50LnR4dEVsZW1lbnQgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0ZXh0XCIpO1xuICAgICAgY3VycmVudC50eHRncnAgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpnXCIpO1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICB9XG5cbiAgICBtb3ZlVGV4dCh4LCB5KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCArPSB4O1xuICAgICAgY3VycmVudC55ID0gY3VycmVudC5saW5lWSArPSB5O1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LWZhbWlseVwiLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBgJHtwZihjdXJyZW50LmZvbnRTaXplKX1weGApO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLWN1cnJlbnQueSkpO1xuICAgIH1cblxuICAgIHNob3dUZXh0KGdseXBocykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7XG5cbiAgICAgIGlmIChmb250U2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvbnRTaXplU2NhbGUgPSBjdXJyZW50LmZvbnRTaXplU2NhbGU7XG4gICAgICBjb25zdCBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7XG4gICAgICBjb25zdCB3b3JkU3BhY2luZyA9IGN1cnJlbnQud29yZFNwYWNpbmc7XG4gICAgICBjb25zdCBmb250RGlyZWN0aW9uID0gY3VycmVudC5mb250RGlyZWN0aW9uO1xuICAgICAgY29uc3QgdGV4dEhTY2FsZSA9IGN1cnJlbnQudGV4dEhTY2FsZSAqIGZvbnREaXJlY3Rpb247XG4gICAgICBjb25zdCB2ZXJ0aWNhbCA9IGZvbnQudmVydGljYWw7XG4gICAgICBjb25zdCBzcGFjaW5nRGlyID0gdmVydGljYWwgPyAxIDogLTE7XG4gICAgICBjb25zdCBkZWZhdWx0Vk1ldHJpY3MgPSBmb250LmRlZmF1bHRWTWV0cmljcztcbiAgICAgIGNvbnN0IHdpZHRoQWR2YW5jZVNjYWxlID0gZm9udFNpemUgKiBjdXJyZW50LmZvbnRNYXRyaXhbMF07XG4gICAgICBsZXQgeCA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7XG4gICAgICAgIGlmIChnbHlwaCA9PT0gbnVsbCkge1xuICAgICAgICAgIHggKz0gZm9udERpcmVjdGlvbiAqIHdvcmRTcGFjaW5nO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoZ2x5cGgpKSB7XG4gICAgICAgICAgeCArPSBzcGFjaW5nRGlyICogZ2x5cGggKiBmb250U2l6ZSAvIDEwMDA7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFjaW5nID0gKGdseXBoLmlzU3BhY2UgPyB3b3JkU3BhY2luZyA6IDApICsgY2hhclNwYWNpbmc7XG4gICAgICAgIGNvbnN0IGNoYXJhY3RlciA9IGdseXBoLmZvbnRDaGFyO1xuICAgICAgICBsZXQgc2NhbGVkWCwgc2NhbGVkWTtcbiAgICAgICAgbGV0IHdpZHRoID0gZ2x5cGgud2lkdGg7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgICAgbGV0IHZ4O1xuICAgICAgICAgIGNvbnN0IHZtZXRyaWMgPSBnbHlwaC52bWV0cmljIHx8IGRlZmF1bHRWTWV0cmljcztcbiAgICAgICAgICB2eCA9IGdseXBoLnZtZXRyaWMgPyB2bWV0cmljWzFdIDogd2lkdGggKiAwLjU7XG4gICAgICAgICAgdnggPSAtdnggKiB3aWR0aEFkdmFuY2VTY2FsZTtcbiAgICAgICAgICBjb25zdCB2eSA9IHZtZXRyaWNbMl0gKiB3aWR0aEFkdmFuY2VTY2FsZTtcbiAgICAgICAgICB3aWR0aCA9IHZtZXRyaWMgPyAtdm1ldHJpY1swXSA6IHdpZHRoO1xuICAgICAgICAgIHNjYWxlZFggPSB2eCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgc2NhbGVkWSA9ICh4ICsgdnkpIC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2FsZWRYID0geCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgc2NhbGVkWSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2x5cGguaXNJbkZvbnQgfHwgZm9udC5taXNzaW5nRmlsZSkge1xuICAgICAgICAgIGN1cnJlbnQueGNvb3Jkcy5wdXNoKGN1cnJlbnQueCArIHNjYWxlZFgpO1xuXG4gICAgICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgICAgICBjdXJyZW50Lnljb29yZHMucHVzaCgtY3VycmVudC55ICsgc2NhbGVkWSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudC50c3Bhbi50ZXh0Q29udGVudCArPSBjaGFyYWN0ZXI7XG4gICAgICAgIH0gZWxzZSB7fVxuXG4gICAgICAgIGxldCBjaGFyV2lkdGg7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgICAgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSAtIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXJXaWR0aCA9IHdpZHRoICogd2lkdGhBZHZhbmNlU2NhbGUgKyBzcGFjaW5nICogZm9udERpcmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHggKz0gY2hhcldpZHRoO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBjdXJyZW50Lnhjb29yZHMubWFwKHBmKS5qb2luKFwiIFwiKSk7XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBjdXJyZW50Lnljb29yZHMubWFwKHBmKS5qb2luKFwiIFwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtY3VycmVudC55KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBjdXJyZW50LnkgLT0geDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQueCArPSB4ICogdGV4dEhTY2FsZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIGN1cnJlbnQuZm9udEZhbWlseSk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zaXplXCIsIGAke3BmKGN1cnJlbnQuZm9udFNpemUpfXB4YCk7XG5cbiAgICAgIGlmIChjdXJyZW50LmZvbnRTdHlsZSAhPT0gU1ZHX0RFRkFVTFRTLmZvbnRTdHlsZSkge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zdHlsZVwiLCBjdXJyZW50LmZvbnRTdHlsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50LmZvbnRXZWlnaHQgIT09IFNWR19ERUZBVUxUUy5mb250V2VpZ2h0KSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXdlaWdodFwiLCBjdXJyZW50LmZvbnRXZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWxsU3Ryb2tlTW9kZSA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO1xuXG4gICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgIGlmIChjdXJyZW50LmZpbGxDb2xvciAhPT0gU1ZHX0RFRkFVTFRTLmZpbGxDb2xvcikge1xuICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50LmZpbGxBbHBoYSA8IDEpIHtcbiAgICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIGN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSCkge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgXCJub25lXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoU2NhbGUgPSAxIC8gKGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlIHx8IDEpO1xuXG4gICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC50c3BhbiwgbGluZVdpZHRoU2NhbGUpO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGV4dE1hdHJpeCA9IGN1cnJlbnQudGV4dE1hdHJpeDtcblxuICAgICAgaWYgKGN1cnJlbnQudGV4dFJpc2UgIT09IDApIHtcbiAgICAgICAgdGV4dE1hdHJpeCA9IHRleHRNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgdGV4dE1hdHJpeFs1XSArPSBjdXJyZW50LnRleHRSaXNlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ0cmFuc2Zvcm1cIiwgYCR7cG0odGV4dE1hdHJpeCl9IHNjYWxlKCR7cGYodGV4dEhTY2FsZSl9LCAtMSlgKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhYTUxfTlMsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICBjdXJyZW50LnR4dEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudC50c3Bhbik7XG4gICAgICBjdXJyZW50LnR4dGdycC5hcHBlbmRDaGlsZChjdXJyZW50LnR4dEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgc2V0TGVhZGluZ01vdmVUZXh0KHgsIHkpIHtcbiAgICAgIHRoaXMuc2V0TGVhZGluZygteSk7XG4gICAgICB0aGlzLm1vdmVUZXh0KHgsIHkpO1xuICAgIH1cblxuICAgIGFkZEZvbnRTdHlsZShmb250T2JqKSB7XG4gICAgICBpZiAoIWZvbnRPYmouZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRGb250U3R5bGU6IE5vIGZvbnQgZGF0YSBhdmFpbGFibGUsIFwiICsgJ2Vuc3VyZSB0aGF0IHRoZSBcImZvbnRFeHRyYVByb3BlcnRpZXNcIiBBUEkgcGFyYW1ldGVyIGlzIHNldC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmNzc1N0eWxlKSB7XG4gICAgICAgIHRoaXMuY3NzU3R5bGUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpzdHlsZVwiKTtcbiAgICAgICAgdGhpcy5jc3NTdHlsZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKHRoaXMuY3NzU3R5bGUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1cmwgPSAoMCwgX3V0aWwuY3JlYXRlT2JqZWN0VVJMKShmb250T2JqLmRhdGEsIGZvbnRPYmoubWltZXR5cGUsIHRoaXMuZm9yY2VEYXRhU2NoZW1hKTtcbiAgICAgIHRoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQgKz0gYEBmb250LWZhY2UgeyBmb250LWZhbWlseTogXCIke2ZvbnRPYmoubG9hZGVkTmFtZX1cIjtgICsgYCBzcmM6IHVybCgke3VybH0pOyB9XFxuYDtcbiAgICB9XG5cbiAgICBzZXRGb250KGRldGFpbHMpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjb25zdCBmb250T2JqID0gdGhpcy5jb21tb25PYmpzLmdldChkZXRhaWxzWzBdKTtcbiAgICAgIGxldCBzaXplID0gZGV0YWlsc1sxXTtcbiAgICAgIGN1cnJlbnQuZm9udCA9IGZvbnRPYmo7XG5cbiAgICAgIGlmICh0aGlzLmVtYmVkRm9udHMgJiYgIWZvbnRPYmoubWlzc2luZ0ZpbGUgJiYgIXRoaXMuZW1iZWRkZWRGb250c1tmb250T2JqLmxvYWRlZE5hbWVdKSB7XG4gICAgICAgIHRoaXMuYWRkRm9udFN0eWxlKGZvbnRPYmopO1xuICAgICAgICB0aGlzLmVtYmVkZGVkRm9udHNbZm9udE9iai5sb2FkZWROYW1lXSA9IGZvbnRPYmo7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuZm9udE1hdHJpeCA9IGZvbnRPYmouZm9udE1hdHJpeCA/IGZvbnRPYmouZm9udE1hdHJpeCA6IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgbGV0IGJvbGQgPSBcIm5vcm1hbFwiO1xuXG4gICAgICBpZiAoZm9udE9iai5ibGFjaykge1xuICAgICAgICBib2xkID0gXCI5MDBcIjtcbiAgICAgIH0gZWxzZSBpZiAoZm9udE9iai5ib2xkKSB7XG4gICAgICAgIGJvbGQgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRhbGljID0gZm9udE9iai5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIjtcblxuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgICAgY3VycmVudC5mb250RGlyZWN0aW9uID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcbiAgICAgIGN1cnJlbnQuZm9udEZhbWlseSA9IGZvbnRPYmoubG9hZGVkTmFtZTtcbiAgICAgIGN1cnJlbnQuZm9udFdlaWdodCA9IGJvbGQ7XG4gICAgICBjdXJyZW50LmZvbnRTdHlsZSA9IGl0YWxpYztcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIGN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC55Y29vcmRzID0gW107XG4gICAgfVxuXG4gICAgZW5kVGV4dCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlICYgX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyAmJiBjdXJyZW50LnR4dEVsZW1lbnQgJiYgY3VycmVudC50eHRFbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnR4dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmVXaWR0aCh3aWR0aCkge1xuICAgICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LmxpbmVDYXAgPSBMSU5FX0NBUF9TVFlMRVNbc3R5bGVdO1xuICAgIH1cblxuICAgIHNldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGluZUpvaW4gPSBMSU5FX0pPSU5fU1RZTEVTW3N0eWxlXTtcbiAgICB9XG5cbiAgICBzZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICB0aGlzLmN1cnJlbnQubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgIH1cblxuICAgIHNldFN0cm9rZUFscGhhKHN0cm9rZUFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTtcbiAgICB9XG5cbiAgICBzZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociwgZywgYik7XG4gICAgfVxuXG4gICAgc2V0RmlsbEFscGhhKGZpbGxBbHBoYSkge1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcbiAgICB9XG5cbiAgICBzZXRGaWxsUkdCQ29sb3IociwgZywgYikge1xuICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyLCBnLCBiKTtcbiAgICAgIHRoaXMuY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgdGhpcy5jdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudC55Y29vcmRzID0gW107XG4gICAgfVxuXG4gICAgc2V0U3Ryb2tlQ29sb3JOKGFyZ3MpIHtcbiAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHRoaXMuX21ha2VDb2xvck5fUGF0dGVybihhcmdzKTtcbiAgICB9XG5cbiAgICBzZXRGaWxsQ29sb3JOKGFyZ3MpIHtcbiAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSB0aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4oYXJncyk7XG4gICAgfVxuXG4gICAgc2hhZGluZ0ZpbGwoYXJncykge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnZpZXdwb3J0LndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy52aWV3cG9ydC5oZWlnaHQ7XG5cbiAgICAgIGNvbnN0IGludiA9IF91dGlsLlV0aWwuaW52ZXJzZVRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCk7XG5cbiAgICAgIGNvbnN0IGJsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgMF0sIGludik7XG5cbiAgICAgIGNvbnN0IGJyID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgY29uc3QgdWwgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgMF0sIGludik7XG5cbiAgICAgIGNvbnN0IHVyID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIGhlaWdodF0sIGludik7XG5cbiAgICAgIGNvbnN0IHgwID0gTWF0aC5taW4oYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgY29uc3QgeTAgPSBNYXRoLm1pbihibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICBjb25zdCB4MSA9IE1hdGgubWF4KGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgIGNvbnN0IHkxID0gTWF0aC5tYXgoYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCB4MCk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCB5MCk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgeDEgLSB4MCk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHkxIC0geTApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKGFyZ3MpKTtcblxuICAgICAgaWYgKHRoaXMuY3VycmVudC5maWxsQWxwaGEgPCAxKSB7XG4gICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfVxuXG4gICAgX21ha2VDb2xvck5fUGF0dGVybihhcmdzKSB7XG4gICAgICBpZiAoYXJnc1swXSA9PT0gXCJUaWxpbmdQYXR0ZXJuXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VUaWxpbmdQYXR0ZXJuKGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fbWFrZVNoYWRpbmdQYXR0ZXJuKGFyZ3MpO1xuICAgIH1cblxuICAgIF9tYWtlVGlsaW5nUGF0dGVybihhcmdzKSB7XG4gICAgICBjb25zdCBjb2xvciA9IGFyZ3NbMV07XG4gICAgICBjb25zdCBvcGVyYXRvckxpc3QgPSBhcmdzWzJdO1xuICAgICAgY29uc3QgbWF0cml4ID0gYXJnc1szXSB8fCBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICBjb25zdCBbeDAsIHkwLCB4MSwgeTFdID0gYXJnc1s0XTtcbiAgICAgIGNvbnN0IHhzdGVwID0gYXJnc1s1XTtcbiAgICAgIGNvbnN0IHlzdGVwID0gYXJnc1s2XTtcbiAgICAgIGNvbnN0IHBhaW50VHlwZSA9IGFyZ3NbN107XG4gICAgICBjb25zdCB0aWxpbmdJZCA9IGBzaGFkaW5nJHtzaGFkaW5nQ291bnQrK31gO1xuXG4gICAgICBjb25zdCBbdHgwLCB0eTBdID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeDAsIHkwXSwgbWF0cml4KTtcblxuICAgICAgY29uc3QgW3R4MSwgdHkxXSA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3gxLCB5MV0sIG1hdHJpeCk7XG5cbiAgICAgIGNvbnN0IFt4c2NhbGUsIHlzY2FsZV0gPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG1hdHJpeCk7XG5cbiAgICAgIGNvbnN0IHR4c3RlcCA9IHhzdGVwICogeHNjYWxlO1xuICAgICAgY29uc3QgdHlzdGVwID0geXN0ZXAgKiB5c2NhbGU7XG4gICAgICBjb25zdCB0aWxpbmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpwYXR0ZXJuXCIpO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgdGlsaW5nSWQpO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwicGF0dGVyblVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIik7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCB0eHN0ZXApO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHR5c3RlcCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIGAke3R4MH1gKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgYCR7dHkwfWApO1xuICAgICAgY29uc3Qgc3ZnID0gdGhpcy5zdmc7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1NYXRyaXggPSB0aGlzLnRyYW5zZm9ybU1hdHJpeDtcbiAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtcbiAgICAgIGNvbnN0IGJib3ggPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHR4MSAtIHR4MCwgdHkxIC0gdHkwKTtcbiAgICAgIHRoaXMuc3ZnID0gYmJveDtcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gbWF0cml4O1xuXG4gICAgICBpZiAocGFpbnRUeXBlID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGNzc0NvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKC4uLmNvbG9yKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gY3NzQ29sb3I7XG4gICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmV4ZWN1dGVPcFRyZWUodGhpcy5jb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCkpO1xuICAgICAgdGhpcy5zdmcgPSBzdmc7XG4gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeDtcbiAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBmaWxsQ29sb3I7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcjtcbiAgICAgIHRpbGluZy5hcHBlbmRDaGlsZChiYm94LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKHRpbGluZyk7XG4gICAgICByZXR1cm4gYHVybCgjJHt0aWxpbmdJZH0pYDtcbiAgICB9XG5cbiAgICBfbWFrZVNoYWRpbmdQYXR0ZXJuKGFyZ3MpIHtcbiAgICAgIHN3aXRjaCAoYXJnc1swXSkge1xuICAgICAgICBjYXNlIFwiUmFkaWFsQXhpYWxcIjpcbiAgICAgICAgICBjb25zdCBzaGFkaW5nSWQgPSBgc2hhZGluZyR7c2hhZGluZ0NvdW50Kyt9YDtcbiAgICAgICAgICBjb25zdCBjb2xvclN0b3BzID0gYXJnc1szXTtcbiAgICAgICAgICBsZXQgZ3JhZGllbnQ7XG5cbiAgICAgICAgICBzd2l0Y2ggKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNhc2UgXCJheGlhbFwiOlxuICAgICAgICAgICAgICBjb25zdCBwb2ludDAgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBwb2ludDEgPSBhcmdzWzVdO1xuICAgICAgICAgICAgICBncmFkaWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmxpbmVhckdyYWRpZW50XCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIHNoYWRpbmdJZCk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZ3JhZGllbnRVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIngxXCIsIHBvaW50MFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTFcIiwgcG9pbnQwWzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4MlwiLCBwb2ludDFbMF0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInkyXCIsIHBvaW50MVsxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwicmFkaWFsXCI6XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUG9pbnQgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBjaXJjbGVQb2ludCA9IGFyZ3NbNV07XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUmFkaXVzID0gYXJnc1s2XTtcbiAgICAgICAgICAgICAgY29uc3QgY2lyY2xlUmFkaXVzID0gYXJnc1s3XTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyYWRpYWxHcmFkaWVudFwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBzaGFkaW5nSWQpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImdyYWRpZW50VW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjeFwiLCBjaXJjbGVQb2ludFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY3lcIiwgY2lyY2xlUG9pbnRbMV0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInJcIiwgY2lyY2xlUmFkaXVzKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeFwiLCBmb2NhbFBvaW50WzBdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeVwiLCBmb2NhbFBvaW50WzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmclwiLCBmb2NhbFJhZGl1cyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogJHthcmdzWzFdfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgY29sb3JTdG9wIG9mIGNvbG9yU3RvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpzdG9wXCIpO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIm9mZnNldFwiLCBjb2xvclN0b3BbMF0pO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0b3AtY29sb3JcIiwgY29sb3JTdG9wWzFdKTtcbiAgICAgICAgICAgIGdyYWRpZW50LmFwcGVuZENoaWxkKHN0b3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChncmFkaWVudCk7XG4gICAgICAgICAgcmV0dXJuIGB1cmwoIyR7c2hhZGluZ0lkfSlgO1xuXG4gICAgICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2hcIik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBcIkR1bW15XCI6XG4gICAgICAgICAgcmV0dXJuIFwiaG90cGlua1wiO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIElSIHR5cGU6ICR7YXJnc1swXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREYXNoKGRhc2hBcnJheSwgZGFzaFBoYXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZGFzaEFycmF5ID0gZGFzaEFycmF5O1xuICAgICAgdGhpcy5jdXJyZW50LmRhc2hQaGFzZSA9IGRhc2hQaGFzZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGxldCB4ID0gY3VycmVudC54LFxuICAgICAgICAgIHkgPSBjdXJyZW50Lnk7XG4gICAgICBsZXQgZCA9IFtdO1xuICAgICAgbGV0IGogPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgICAgICBzd2l0Y2ggKG9wIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpLCBcIkxcIiwgcGYoeHcpLCBwZih5KSwgXCJMXCIsIHBmKHh3KSwgcGYoeWgpLCBcIkxcIiwgcGYoeCksIHBmKHloKSwgXCJaXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICBkLnB1c2goXCJMXCIsIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgNV07XG4gICAgICAgICAgICBkLnB1c2goXCJDXCIsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKGFyZ3NbaiArIDJdKSwgcGYoYXJnc1tqICsgM10pLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgIGQucHVzaChcIkNcIiwgcGYoeCksIHBmKHkpLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSk7XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgICAgZC5wdXNoKFwiQ1wiLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZih4KSwgcGYoeSksIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIGQucHVzaChcIlpcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkID0gZC5qb2luKFwiIFwiKTtcblxuICAgICAgaWYgKGN1cnJlbnQucGF0aCAmJiBvcHMubGVuZ3RoID4gMCAmJiBvcHNbMF0gIT09IF91dGlsLk9QUy5yZWN0YW5nbGUgJiYgb3BzWzBdICE9PSBfdXRpbC5PUFMubW92ZVRvKSB7XG4gICAgICAgIGQgPSBjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIpICsgZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQucGF0aCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdGhcIik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChjdXJyZW50LnBhdGgpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIsIGQpO1xuICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnBhdGg7XG4gICAgICBjdXJyZW50LnNldEN1cnJlbnRQb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBlbmRQYXRoKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGN1cnJlbnQucGF0aCA9IG51bGw7XG5cbiAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsaXBJZCA9IGBjbGlwcGF0aCR7Y2xpcENvdW50Kyt9YDtcbiAgICAgIGNvbnN0IGNsaXBQYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Y2xpcFBhdGhcIik7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIGNsaXBJZCk7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgY29uc3QgY2xpcEVsZW1lbnQgPSBjdXJyZW50LmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCA9PT0gXCJldmVub2RkXCIpIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJub256ZXJvXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIGNsaXBQYXRoLmFwcGVuZENoaWxkKGNsaXBFbGVtZW50KTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChjbGlwUGF0aCk7XG5cbiAgICAgIGlmIChjdXJyZW50LmFjdGl2ZUNsaXBVcmwpIHtcbiAgICAgICAgY3VycmVudC5jbGlwR3JvdXAgPSBudWxsO1xuICAgICAgICB0aGlzLmV4dHJhU3RhY2suZm9yRWFjaChmdW5jdGlvbiAocHJldikge1xuICAgICAgICAgIHByZXYuY2xpcEdyb3VwID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY2xpcC1wYXRoXCIsIGN1cnJlbnQuYWN0aXZlQ2xpcFVybCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQuYWN0aXZlQ2xpcFVybCA9IGB1cmwoIyR7Y2xpcElkfSlgO1xuICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICB9XG5cbiAgICBjbGlwKHR5cGUpIHtcbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSB0eXBlO1xuICAgIH1cblxuICAgIGNsb3NlUGF0aCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LnBhdGgpIHtcbiAgICAgICAgY29uc3QgZCA9IGAke2N1cnJlbnQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIil9WmA7XG4gICAgICAgIGN1cnJlbnQucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIiwgZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TGVhZGluZyhsZWFkaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICAgIH1cblxuICAgIHNldFRleHRSaXNlKHRleHRSaXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dFJpc2UgPSB0ZXh0UmlzZTtcbiAgICB9XG5cbiAgICBzZXRUZXh0UmVuZGVyaW5nTW9kZSh0ZXh0UmVuZGVyaW5nTW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID0gdGV4dFJlbmRlcmluZ01vZGU7XG4gICAgfVxuXG4gICAgc2V0SFNjYWxlKHNjYWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQudGV4dEhTY2FsZSA9IHNjYWxlIC8gMTAwO1xuICAgIH1cblxuICAgIHNldFJlbmRlcmluZ0ludGVudChpbnRlbnQpIHt9XG5cbiAgICBzZXRGbGF0bmVzcyhmbGF0bmVzcykge31cblxuICAgIHNldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHN0YXRlcykge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgXCJMV1wiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTENcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUNhcCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJNTFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RGFzaCh2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9udCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJDQVwiOlxuICAgICAgICAgICAgdGhpcy5zZXRTdHJva2VBbHBoYSh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjYVwiOlxuICAgICAgICAgICAgdGhpcy5zZXRGaWxsQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmltcGxlbWVudGVkIGdyYXBoaWMgc3RhdGUgb3BlcmF0b3IgJHtrZXl9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZpbGwoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIGN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHJva2UoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC5lbGVtZW50KTtcblxuICAgICAgICBjdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwibm9uZVwiKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3NldFN0cm9rZUF0dHJpYnV0ZXMoZWxlbWVudCwgbGluZVdpZHRoU2NhbGUgPSAxKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgbGV0IGRhc2hBcnJheSA9IGN1cnJlbnQuZGFzaEFycmF5O1xuXG4gICAgICBpZiAobGluZVdpZHRoU2NhbGUgIT09IDEgJiYgZGFzaEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGFzaEFycmF5ID0gZGFzaEFycmF5Lm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gbGluZVdpZHRoU2NhbGUgKiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2VcIiwgY3VycmVudC5zdHJva2VDb2xvcik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLW9wYWNpdHlcIiwgY3VycmVudC5zdHJva2VBbHBoYSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgcGYoY3VycmVudC5taXRlckxpbWl0KSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWxpbmVjYXBcIiwgY3VycmVudC5saW5lQ2FwKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtbGluZWpvaW5cIiwgY3VycmVudC5saW5lSm9pbik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLXdpZHRoXCIsIHBmKGxpbmVXaWR0aFNjYWxlICogY3VycmVudC5saW5lV2lkdGgpICsgXCJweFwiKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtZGFzaGFycmF5XCIsIGRhc2hBcnJheS5tYXAocGYpLmpvaW4oXCIgXCIpKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBwZihsaW5lV2lkdGhTY2FsZSAqIGN1cnJlbnQuZGFzaFBoYXNlKSArIFwicHhcIik7XG4gICAgfVxuXG4gICAgZW9GaWxsKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxsKCk7XG4gICAgfVxuXG4gICAgZmlsbFN0cm9rZSgpIHtcbiAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmZpbGwoKTtcbiAgICB9XG5cbiAgICBlb0ZpbGxTdHJva2UoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZVN0cm9rZSgpIHtcbiAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICB0aGlzLnN0cm9rZSgpO1xuICAgIH1cblxuICAgIGNsb3NlRmlsbFN0cm9rZSgpIHtcbiAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICB0aGlzLmVvRmlsbFN0cm9rZSgpO1xuICAgIH1cblxuICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzaygpIHtcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgXCIwXCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIFwiMXB4XCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBcIjFweFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIHRoaXMuY3VycmVudC5maWxsQ29sb3IpO1xuXG4gICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKHJlY3QpO1xuICAgIH1cblxuICAgIHBhaW50SW1hZ2VYT2JqZWN0KG9iaklkKSB7XG4gICAgICBjb25zdCBpbWdEYXRhID0gb2JqSWQuc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzLmdldChvYmpJZCkgOiB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgRGVwZW5kZW50IGltYWdlIHdpdGggb2JqZWN0IElEICR7b2JqSWR9IGlzIG5vdCByZWFkeSB5ZXRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgIH1cblxuICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEsIG1hc2spIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgY29uc3QgaW1nU3JjID0gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCB0aGlzLmZvcmNlRGF0YVNjaGVtYSwgISFtYXNrKTtcbiAgICAgIGNvbnN0IGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIjBcIik7XG4gICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgXCIwXCIpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgcGYoaGVpZ2h0KSk7XG4gICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgIGNvbnN0IGltZ0VsID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6aW1hZ2VcIik7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhYTElOS19OUywgXCJ4bGluazpocmVmXCIsIGltZ1NyYyk7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1oZWlnaHQpKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpICsgXCJweFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkgKyBcInB4XCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ0cmFuc2Zvcm1cIiwgYHNjYWxlKCR7cGYoMSAvIHdpZHRoKX0gJHtwZigtMSAvIGhlaWdodCl9KWApO1xuXG4gICAgICBpZiAobWFzaykge1xuICAgICAgICBtYXNrLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoaW1nRWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdChpbWdEYXRhKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY29uc3Qgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgICBjb25zdCBmaWxsQ29sb3IgPSBjdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgIGN1cnJlbnQubWFza0lkID0gYG1hc2ske21hc2tDb3VudCsrfWA7XG4gICAgICBjb25zdCBtYXNrID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bWFza1wiKTtcbiAgICAgIG1hc2suc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBjdXJyZW50Lm1hc2tJZCk7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGZpbGxDb2xvcik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwibWFza1wiLCBgdXJsKCMke2N1cnJlbnQubWFza0lkfSlgKTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChtYXNrKTtcblxuICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChyZWN0KTtcblxuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKTtcbiAgICB9XG5cbiAgICBwYWludEZvcm1YT2JqZWN0QmVnaW4obWF0cml4LCBiYm94KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRyaXgpICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0obWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdLCBtYXRyaXhbNF0sIG1hdHJpeFs1XSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYm94KSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICAgICAgICBjb25zdCBjbGlwcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBiYm94WzBdKTtcbiAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGJib3hbMV0pO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKHdpZHRoKSk7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWludEZvcm1YT2JqZWN0RW5kKCkge31cblxuICAgIF9pbml0aWFsaXplKHZpZXdwb3J0KSB7XG4gICAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpO1xuICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpkZWZzXCIpO1xuICAgICAgc3ZnLmFwcGVuZENoaWxkKGRlZmluaXRpb25zKTtcbiAgICAgIHRoaXMuZGVmcyA9IGRlZmluaXRpb25zO1xuICAgICAgY29uc3Qgcm9vdEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgIHJvb3RHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh2aWV3cG9ydC50cmFuc2Zvcm0pKTtcbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChyb290R3JvdXApO1xuICAgICAgdGhpcy5zdmcgPSByb290R3JvdXA7XG4gICAgICByZXR1cm4gc3ZnO1xuICAgIH1cblxuICAgIF9lbnN1cmVDbGlwR3JvdXAoKSB7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudC5jbGlwR3JvdXApIHtcbiAgICAgICAgY29uc3QgY2xpcEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgY2xpcEdyb3VwLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY2xpcC1wYXRoXCIsIHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQoY2xpcEdyb3VwKTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmNsaXBHcm91cCA9IGNsaXBHcm91cDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXA7XG4gICAgfVxuXG4gICAgX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkge1xuICAgICAgaWYgKCF0aGlzLnRncnApIHtcbiAgICAgICAgdGhpcy50Z3JwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgdGhpcy50Z3JwLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKSB7XG4gICAgICAgICAgdGhpcy5fZW5zdXJlQ2xpcEdyb3VwKCkuYXBwZW5kQ2hpbGQodGhpcy50Z3JwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN2Zy5hcHBlbmRDaGlsZCh0aGlzLnRncnApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRncnA7XG4gICAgfVxuXG4gIH07XG59XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGTm9kZVN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9uZXR3b3JrX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbjtcblxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cbmNvbnN0IGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcblxuY29uc3QgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG5cbmNvbnN0IHVybCA9IHJlcXVpcmUoXCJ1cmxcIik7XG5cbmNvbnN0IGZpbGVVcmlSZWdleCA9IC9eZmlsZTpcXC9cXC9cXC9bYS16QS1aXTpcXC8vO1xuXG5mdW5jdGlvbiBwYXJzZVVybChzb3VyY2VVcmwpIHtcbiAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKHNvdXJjZVVybCk7XG5cbiAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCA9PT0gXCJmaWxlOlwiIHx8IHBhcnNlZFVybC5ob3N0KSB7XG4gICAgcmV0dXJuIHBhcnNlZFVybDtcbiAgfVxuXG4gIGlmICgvXlthLXpdOlsvXFxcXF0vaS50ZXN0KHNvdXJjZVVybCkpIHtcbiAgICByZXR1cm4gdXJsLnBhcnNlKGBmaWxlOi8vLyR7c291cmNlVXJsfWApO1xuICB9XG5cbiAgaWYgKCFwYXJzZWRVcmwuaG9zdCkge1xuICAgIHBhcnNlZFVybC5wcm90b2NvbCA9IFwiZmlsZTpcIjtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWRVcmw7XG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLnVybCA9IHBhcnNlVXJsKHNvdXJjZS51cmwpO1xuICAgIHRoaXMuaXNIdHRwID0gdGhpcy51cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiB8fCB0aGlzLnVybC5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbiAgICB0aGlzLmlzRnNVcmwgPSB0aGlzLnVybC5wcm90b2NvbCA9PT0gXCJmaWxlOlwiO1xuICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBzb3VyY2UuaHR0cEhlYWRlcnMgfHwge307XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgfVxuXG4gIGdldCBfcHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA/IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9sb2FkZWQgOiAwO1xuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGTm9kZVN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IHRoaXMuaXNGc1VybCA/IG5ldyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyKHRoaXMpIDogbmV3IFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2VSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIodGhpcywgc3RhcnQsIGVuZCkgOiBuZXcgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJhbmdlUmVhZGVyKTtcblxuICAgIHJldHVybiByYW5nZVJlYWRlcjtcbiAgfVxuXG4gIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZOb2RlU3RyZWFtID0gUERGTm9kZVN0cmVhbTtcblxuY2xhc3MgQmFzZUZ1bGxSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0pIHtcbiAgICB0aGlzLl91cmwgPSBzdHJlYW0udXJsO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG4gICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVJhbmdlO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gbnVsbDtcbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdHJlYW0pIHtcbiAgICAgIHRoaXMuX2Vycm9yKHJlYXNvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gIH1cblxuICBfZXJyb3IocmVhc29uKSB7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBfc2V0UmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fZXJyb3IobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwic3RyZWFtaW5nIGlzIGRpc2FibGVkXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKTtcblxuICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICghdGhpcy5fcmVhZGFibGVTdHJlYW0pIHtcbiAgICAgIHRoaXMuX2Vycm9yKHJlYXNvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gIH1cblxuICBfZXJyb3IocmVhc29uKSB7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICBfc2V0UmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pIHtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVxdWVzdE9wdGlvbnMocGFyc2VkVXJsLCBoZWFkZXJzKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHBhcnNlZFVybC5wcm90b2NvbCxcbiAgICBhdXRoOiBwYXJzZWRVcmwuYXV0aCxcbiAgICBob3N0OiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcG9ydDogcGFyc2VkVXJsLnBvcnQsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIGhlYWRlcnNcbiAgfTtcbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbUZ1bGxSZWFkZXIgZXh0ZW5kcyBCYXNlRnVsbFJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG5cbiAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihgTWlzc2luZyBQREYgXCIke3RoaXMuX3VybH1cIi5gKTtcbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcblxuICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG5cbiAgICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoXG4gICAgICB9ID0gKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKSh7XG4gICAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgICBpc0h0dHA6IHN0cmVhbS5pc0h0dHAsXG4gICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0cztcbiAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIF9uZXR3b3JrX3V0aWxzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgc3RyZWFtLmh0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3Qub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdC5lbmQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlciBleHRlbmRzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG4gICAgdGhpcy5faHR0cEhlYWRlcnMgPSB7fTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gc3RyZWFtLmh0dHBIZWFkZXJzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHN0cmVhbS5odHRwSGVhZGVyc1twcm9wZXJ0eV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2h0dHBIZWFkZXJzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX2h0dHBIZWFkZXJzLlJhbmdlID0gYGJ5dGVzPSR7c3RhcnR9LSR7ZW5kIC0gMX1gO1xuXG4gICAgY29uc3QgaGFuZGxlUmVzcG9uc2UgPSByZXNwb25zZSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oYE1pc3NpbmcgUERGIFwiJHt0aGlzLl91cmx9XCIuYCk7XG4gICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0ocmVzcG9uc2UpO1xuICAgIH07XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIikge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHAucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHRoaXMuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHRoaXMuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3Qub24oXCJlcnJvclwiLCByZWFzb24gPT4ge1xuICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSByZWFzb247XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0LmVuZCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlciBleHRlbmRzIEJhc2VGdWxsUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLl91cmwucGF0aCk7XG5cbiAgICBpZiAoZmlsZVVyaVJlZ2V4LnRlc3QodGhpcy5fdXJsLmhyZWYpKSB7XG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIik7XG4gICAgfVxuXG4gICAgZnMubHN0YXQocGF0aCwgKGVycm9yLCBzdGF0KSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiBcIiR7cGF0aH1cIi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdGF0LnNpemU7XG5cbiAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aCkpO1xuXG4gICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlciBleHRlbmRzIEJhc2VSYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgIHN1cGVyKHN0cmVhbSk7XG4gICAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy5fdXJsLnBhdGgpO1xuXG4gICAgaWYgKGZpbGVVcmlSZWdleC50ZXN0KHRoaXMuX3VybC5ocmVmKSkge1xuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLy8sIFwiXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aCwge1xuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IGVuZCAtIDFcbiAgICB9KSk7XG4gIH1cblxufVxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IgPSBjcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yO1xuZXhwb3J0cy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyID0gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcjtcbmV4cG9ydHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMgPSB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcztcbmV4cG9ydHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cyA9IHZhbGlkYXRlUmVzcG9uc2VTdGF0dXM7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29udGVudF9kaXNwb3NpdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyh7XG4gIGdldFJlc3BvbnNlSGVhZGVyLFxuICBpc0h0dHAsXG4gIHJhbmdlQ2h1bmtTaXplLFxuICBkaXNhYmxlUmFuZ2Vcbn0pIHtcbiAgKDAsIF91dGlsLmFzc2VydCkocmFuZ2VDaHVua1NpemUgPiAwLCBcIlJhbmdlIGNodW5rIHNpemUgbXVzdCBiZSBsYXJnZXIgdGhhbiB6ZXJvXCIpO1xuICBjb25zdCByZXR1cm5WYWx1ZXMgPSB7XG4gICAgYWxsb3dSYW5nZVJlcXVlc3RzOiBmYWxzZSxcbiAgICBzdWdnZXN0ZWRMZW5ndGg6IHVuZGVmaW5lZFxuICB9O1xuICBjb25zdCBsZW5ndGggPSBwYXJzZUludChnZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIpLCAxMCk7XG5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGxlbmd0aCkpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgcmV0dXJuVmFsdWVzLnN1Z2dlc3RlZExlbmd0aCA9IGxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDw9IDIgKiByYW5nZUNodW5rU2l6ZSkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICBpZiAoZGlzYWJsZVJhbmdlIHx8ICFpc0h0dHApIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgaWYgKGdldFJlc3BvbnNlSGVhZGVyKFwiQWNjZXB0LVJhbmdlc1wiKSAhPT0gXCJieXRlc1wiKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1FbmNvZGluZ1wiKSB8fCBcImlkZW50aXR5XCI7XG5cbiAgaWYgKGNvbnRlbnRFbmNvZGluZyAhPT0gXCJpZGVudGl0eVwiKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIHJldHVyblZhbHVlcy5hbGxvd1JhbmdlUmVxdWVzdHMgPSB0cnVlO1xuICByZXR1cm4gcmV0dXJuVmFsdWVzO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKGdldFJlc3BvbnNlSGVhZGVyKSB7XG4gIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcblxuICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgbGV0IGZpbGVuYW1lID0gKDAsIF9jb250ZW50X2Rpc3Bvc2l0aW9uLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcikoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgIGlmIChmaWxlbmFtZS5pbmNsdWRlcyhcIiVcIikpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbGVuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgIH1cblxuICAgIGlmICgvXFwucGRmJC9pLnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3Ioc3RhdHVzLCB1cmwpIHtcbiAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8IHN0YXR1cyA9PT0gMCAmJiB1cmwuc3RhcnRzV2l0aChcImZpbGU6XCIpKSB7XG4gICAgcmV0dXJuIG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKCdNaXNzaW5nIFBERiBcIicgKyB1cmwgKyAnXCIuJyk7XG4gIH1cblxuICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihcIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlIChcIiArIHN0YXR1cyArICcpIHdoaWxlIHJldHJpZXZpbmcgUERGIFwiJyArIHVybCArICdcIi4nLCBzdGF0dXMpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKHN0YXR1cykge1xuICByZXR1cm4gc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDY7XG59XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyID0gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyO1xuXG5mdW5jdGlvbiBnZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXIoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gIGxldCBuZWVkc0VuY29kaW5nRml4dXAgPSB0cnVlO1xuICBsZXQgdG1wID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXFxcXCpcIiwgXCJpXCIpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgdG1wID0gdG1wWzFdO1xuICAgIGxldCBmaWxlbmFtZSA9IHJmYzI2MTZ1bnF1b3RlKHRtcCk7XG4gICAgZmlsZW5hbWUgPSB1bmVzY2FwZShmaWxlbmFtZSk7XG4gICAgZmlsZW5hbWUgPSByZmM1OTg3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICBmaWxlbmFtZSA9IHJmYzIwNDdkZWNvZGUoZmlsZW5hbWUpO1xuICAgIHJldHVybiBmaXh1cEVuY29kaW5nKGZpbGVuYW1lKTtcbiAgfVxuXG4gIHRtcCA9IHJmYzIyMzFnZXRwYXJhbShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gIGlmICh0bXApIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJmYzIwNDdkZWNvZGUodG1wKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICB0bXAgPSB0b1BhcmFtUmVnRXhwKFwiZmlsZW5hbWVcIiwgXCJpXCIpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgdG1wID0gdG1wWzFdO1xuICAgIGxldCBmaWxlbmFtZSA9IHJmYzI2MTZ1bnF1b3RlKHRtcCk7XG4gICAgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b1BhcmFtUmVnRXhwKGF0dHJpYnV0ZVBhdHRlcm4sIGZsYWdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoPzpefDspXFxcXHMqXCIgKyBhdHRyaWJ1dGVQYXR0ZXJuICsgXCJcXFxccyo9XFxcXHMqXCIgKyBcIihcIiArICdbXlwiO1xcXFxzXVteO1xcXFxzXSonICsgXCJ8XCIgKyAnXCIoPzpbXlwiXFxcXFxcXFxdfFxcXFxcXFxcXCI/KStcIj8nICsgXCIpXCIsIGZsYWdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKSB7XG4gICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICBpZiAoIS9eW1xceDAwLVxceEZGXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIHtcbiAgICAgICAgICBmYXRhbDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBBcnJheS5mcm9tKHZhbHVlLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICByZXR1cm4gY2guY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IGRlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGJ5dGVzKSk7XG4gICAgICAgIG5lZWRzRW5jb2RpbmdGaXh1cCA9IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoL151dGYtPzgkL2kudGVzdChlbmNvZGluZykpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHZhbHVlKSk7XG4gICAgICAgICAgICBuZWVkc0VuY29kaW5nRml4dXAgPSBmYWxzZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaXh1cEVuY29kaW5nKHZhbHVlKSB7XG4gICAgaWYgKG5lZWRzRW5jb2RpbmdGaXh1cCAmJiAvW1xceDgwLVxceGZmXS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdGV4dGRlY29kZShcInV0Zi04XCIsIHZhbHVlKTtcblxuICAgICAgaWYgKG5lZWRzRW5jb2RpbmdGaXh1cCkge1xuICAgICAgICB2YWx1ZSA9IHRleHRkZWNvZGUoXCJpc28tODg1OS0xXCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uU3RyKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuICAgIGxldCBtYXRjaDtcbiAgICBjb25zdCBpdGVyID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXFxcXCooKD8hMFxcXFxkKVxcXFxkKykoXFxcXCo/KVwiLCBcImlnXCIpO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IGl0ZXIuZXhlYyhjb250ZW50RGlzcG9zaXRpb25TdHIpKSAhPT0gbnVsbCkge1xuICAgICAgbGV0IFssIG4sIHF1b3QsIHBhcnRdID0gbWF0Y2g7XG4gICAgICBuID0gcGFyc2VJbnQobiwgMTApO1xuXG4gICAgICBpZiAobiBpbiBtYXRjaGVzKSB7XG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF0Y2hlc1tuXSA9IFtxdW90LCBwYXJ0XTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBtYXRjaGVzLmxlbmd0aDsgKytuKSB7XG4gICAgICBpZiAoIShuIGluIG1hdGNoZXMpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBsZXQgW3F1b3QsIHBhcnRdID0gbWF0Y2hlc1tuXTtcbiAgICAgIHBhcnQgPSByZmMyNjE2dW5xdW90ZShwYXJ0KTtcblxuICAgICAgaWYgKHF1b3QpIHtcbiAgICAgICAgcGFydCA9IHVuZXNjYXBlKHBhcnQpO1xuXG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgcGFydCA9IHJmYzU5ODdkZWNvZGUocGFydCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaChwYXJ0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc2xpY2UoMSkuc3BsaXQoJ1xcXFxcIicpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHF1b3RpbmRleCA9IHBhcnRzW2ldLmluZGV4T2YoJ1wiJyk7XG5cbiAgICAgICAgaWYgKHF1b3RpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnNsaWNlKDAsIHF1b3RpbmRleCk7XG4gICAgICAgICAgcGFydHMubGVuZ3RoID0gaSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJ0c1tpXSA9IHBhcnRzW2ldLnJlcGxhY2UoL1xcXFwoLikvZywgXCIkMVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBwYXJ0cy5qb2luKCdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzU5ODdkZWNvZGUoZXh0dmFsdWUpIHtcbiAgICBjb25zdCBlbmNvZGluZ2VuZCA9IGV4dHZhbHVlLmluZGV4T2YoXCInXCIpO1xuXG4gICAgaWYgKGVuY29kaW5nZW5kID09PSAtMSkge1xuICAgICAgcmV0dXJuIGV4dHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY29kaW5nID0gZXh0dmFsdWUuc2xpY2UoMCwgZW5jb2RpbmdlbmQpO1xuICAgIGNvbnN0IGxhbmd2YWx1ZSA9IGV4dHZhbHVlLnNsaWNlKGVuY29kaW5nZW5kICsgMSk7XG4gICAgY29uc3QgdmFsdWUgPSBsYW5ndmFsdWUucmVwbGFjZSgvXlteJ10qJy8sIFwiXCIpO1xuICAgIHJldHVybiB0ZXh0ZGVjb2RlKGVuY29kaW5nLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZmMyMDQ3ZGVjb2RlKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKFwiPT9cIikgfHwgL1tcXHgwMC1cXHgxOVxceDgwLVxceGZmXS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvPVxcPyhbXFx3LV0qKVxcPyhbUXFCYl0pXFw/KCg/OlteP118XFw/KD8hPSkpKilcXD89L2csIGZ1bmN0aW9uIChtYXRjaGVzLCBjaGFyc2V0LCBlbmNvZGluZywgdGV4dCkge1xuICAgICAgaWYgKGVuY29kaW5nID09PSBcInFcIiB8fCBlbmNvZGluZyA9PT0gXCJRXCIpIHtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXy9nLCBcIiBcIik7XG4gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLz0oWzAtOWEtZkEtRl17Mn0pL2csIGZ1bmN0aW9uIChtYXRjaCwgaGV4KSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoaGV4LCAxNikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRleHQgPSBhdG9iKHRleHQpO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QREZOZXR3b3JrU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25ldHdvcmtfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIzKTtcblxuO1xuY29uc3QgT0tfUkVTUE9OU0UgPSAyMDA7XG5jb25zdCBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UgPSAyMDY7XG5cbmZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKHhocikge1xuICBjb25zdCBkYXRhID0geGhyLnJlc3BvbnNlO1xuXG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3QgYXJyYXkgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGF0YSk7XG4gIHJldHVybiBhcnJheS5idWZmZXI7XG59XG5cbmNsYXNzIE5ldHdvcmtNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IodXJsLCBhcmdzKSB7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgdGhpcy5pc0h0dHAgPSAvXmh0dHBzPzovaS50ZXN0KHVybCk7XG4gICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIGFyZ3MuaHR0cEhlYWRlcnMgfHwge307XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBhcmdzLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcblxuICAgIHRoaXMuZ2V0WGhyID0gYXJncy5nZXRYaHIgfHwgZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfZ2V0WGhyKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1cnJYaHJJZCA9IDA7XG4gICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGxpc3RlbmVycykge1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBiZWdpbixcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gbGlzdGVuZXJzKSB7XG4gICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYXJncyk7XG4gIH1cblxuICByZXF1ZXN0RnVsbChsaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gIH1cblxuICByZXF1ZXN0KGFyZ3MpIHtcbiAgICBjb25zdCB4aHIgPSB0aGlzLmdldFhocigpO1xuICAgIGNvbnN0IHhocklkID0gdGhpcy5jdXJyWGhySWQrKztcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXSA9IHtcbiAgICAgIHhoclxuICAgIH07XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy51cmwpO1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0h0dHAgJiYgXCJiZWdpblwiIGluIGFyZ3MgJiYgXCJlbmRcIiBpbiBhcmdzKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsIGBieXRlcz0ke2FyZ3MuYmVnaW59LSR7YXJncy5lbmQgLSAxfWApO1xuICAgICAgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gT0tfUkVTUE9OU0U7XG4gICAgfVxuXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIGlmIChhcmdzLm9uRXJyb3IpIHtcbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSA9IGFyZ3Mub25Eb25lO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IgPSBhcmdzLm9uRXJyb3I7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICB4aHIuc2VuZChudWxsKTtcbiAgICByZXR1cm4geGhySWQ7XG4gIH1cblxuICBvblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcykge1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyhldnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhdGVDaGFuZ2UoeGhySWQsIGV2dCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhociA9IHBlbmRpbmdSZXF1ZXN0LnhocjtcblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCgpO1xuICAgICAgZGVsZXRlIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIH1cblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IpIHtcbiAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcih4aHIuc3RhdHVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhoclN0YXR1cyA9IHhoci5zdGF0dXMgfHwgT0tfUkVTUE9OU0U7XG4gICAgY29uc3Qgb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCA9IHhoclN0YXR1cyA9PT0gT0tfUkVTUE9OU0UgJiYgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPT09IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRTtcblxuICAgIGlmICghb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCAmJiB4aHJTdGF0dXMgIT09IHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzKSB7XG4gICAgICBpZiAocGVuZGluZ1JlcXVlc3Qub25FcnJvcikge1xuICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKHhoci5zdGF0dXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgaWYgKHhoclN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFKSB7XG4gICAgICBjb25zdCByYW5nZUhlYWRlciA9IHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIik7XG4gICAgICBjb25zdCBtYXRjaGVzID0gL2J5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKykvLmV4ZWMocmFuZ2VIZWFkZXIpO1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgYmVnaW46IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7XG4gICAgICAgIGJlZ2luOiAwLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yKHhoci5zdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlcXVlc3RYaHIoeGhySWQpIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdLnhocjtcbiAgfVxuXG4gIGlzUGVuZGluZ1JlcXVlc3QoeGhySWQpIHtcbiAgICByZXR1cm4geGhySWQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHM7XG4gIH1cblxuICBhYm9ydFJlcXVlc3QoeGhySWQpIHtcbiAgICBjb25zdCB4aHIgPSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF0ueGhyO1xuICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG4gICAgeGhyLmFib3J0KCk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOZXR3b3JrU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuX21hbmFnZXIgPSBuZXcgTmV0d29ya01hbmFnZXIoc291cmNlLnVybCwge1xuICAgICAgaHR0cEhlYWRlcnM6IHNvdXJjZS5odHRwSGVhZGVycyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogc291cmNlLndpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBfb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQocmVhZGVyKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuaW5kZXhPZihyZWFkZXIpO1xuXG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIodGhpcy5fbWFuYWdlciwgdGhpcy5fc291cmNlKTtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIodGhpcy5fbWFuYWdlciwgYmVnaW4sIGVuZCk7XG4gICAgcmVhZGVyLm9uQ2xvc2VkID0gdGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJlYWRlcjtcbiAgfVxuXG4gIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICByZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKHJlYWRlcikge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZOZXR3b3JrU3RyZWFtID0gUERGTmV0d29ya1N0cmVhbTtcblxuY2xhc3MgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyIHtcbiAgY29uc3RydWN0b3IobWFuYWdlciwgc291cmNlKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uSGVhZGVyc1JlY2VpdmVkOiB0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLFxuICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgIH07XG4gICAgdGhpcy5fdXJsID0gc291cmNlLnVybDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdElkID0gbWFuYWdlci5yZXF1ZXN0RnVsbChhcmdzKTtcbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7XG4gICAgY29uc3QgZnVsbFJlcXVlc3RYaHJJZCA9IHRoaXMuX2Z1bGxSZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCBmdWxsUmVxdWVzdFhociA9IHRoaXMuX21hbmFnZXIuZ2V0UmVxdWVzdFhocihmdWxsUmVxdWVzdFhocklkKTtcblxuICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4gZnVsbFJlcXVlc3RYaHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgIHN1Z2dlc3RlZExlbmd0aFxuICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgaXNIdHRwOiB0aGlzLl9tYW5hZ2VyLmlzSHR0cCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dSYW5nZVJlcXVlc3RzKSB7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc3VnZ2VzdGVkTGVuZ3RoIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuXG4gICAgaWYgKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KGZ1bGxSZXF1ZXN0WGhySWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgX29uRG9uZShhcmdzKSB7XG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICB2YWx1ZTogYXJncy5jaHVuayxcbiAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZENodW5rcy5wdXNoKGFyZ3MuY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gIH1cblxuICBfb25FcnJvcihzdGF0dXMpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHN0YXR1cywgdXJsKTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IGV4Y2VwdGlvbjtcblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KGV4Y2VwdGlvbik7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVqZWN0KGV4Y2VwdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2NhY2hlZENodW5rcyA9IFtdO1xuICB9XG5cbiAgX29uUHJvZ3Jlc3MoZGF0YSkge1xuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogZGF0YS5sb2FkZWQsXG4gICAgICAgIHRvdGFsOiBkYXRhLmxlbmd0aENvbXB1dGFibGUgPyBkYXRhLnRvdGFsIDogdGhpcy5fY29udGVudExlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9jYWNoZWRDaHVua3Muc2hpZnQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpO1xuXG4gICAgcmV0dXJuIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX2Z1bGxSZXF1ZXN0SWQpKSB7XG4gICAgICB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOZXR3b3JrU3RyZWFtUmFuZ2VSZXF1ZXN0UmVhZGVyIHtcbiAgY29uc3RydWN0b3IobWFuYWdlciwgYmVnaW4sIGVuZCkge1xuICAgIHRoaXMuX21hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBvbkRvbmU6IHRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLFxuICAgICAgb25Qcm9ncmVzczogdGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpXG4gICAgfTtcbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSBtYW5hZ2VyLnJlcXVlc3RSYW5nZShiZWdpbiwgZW5kLCBhcmdzKTtcbiAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLm9uQ2xvc2VkID0gbnVsbDtcbiAgfVxuXG4gIF9jbG9zZSgpIHtcbiAgICBpZiAodGhpcy5vbkNsb3NlZCkge1xuICAgICAgdGhpcy5vbkNsb3NlZCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfb25Eb25lKGRhdGEpIHtcbiAgICBjb25zdCBjaHVuayA9IGRhdGEuY2h1bms7XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gY2h1bms7XG4gICAgfVxuXG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcblxuICAgIHRoaXMuX2Nsb3NlKCk7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICBpZiAoIXRoaXMuaXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5vblByb2dyZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuayAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpO1xuXG47XG5cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoT3B0aW9ucyhoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHMsIGFib3J0Q29udHJvbGxlcikge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICBoZWFkZXJzLFxuICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyICYmIGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgbW9kZTogXCJjb3JzXCIsXG4gICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/IFwiaW5jbHVkZVwiIDogXCJzYW1lLW9yaWdpblwiLFxuICAgIHJlZGlyZWN0OiBcImZvbGxvd1wiXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnMoaHR0cEhlYWRlcnMpIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBodHRwSGVhZGVycykge1xuICAgIGNvbnN0IHZhbHVlID0gaHR0cEhlYWRlcnNbcHJvcGVydHldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaGVhZGVycy5hcHBlbmQocHJvcGVydHksIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5jbGFzcyBQREZGZXRjaFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdChzb3VyY2UudXJsKTtcbiAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPyB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5fbG9hZGVkIDogMDtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmVhZGVyKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlcnMgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApO1xuXG4gICAgcmVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChyZWFkZXIpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSBQREZGZXRjaFN0cmVhbTtcblxuY2xhc3MgUERGRmV0Y2hTdHJlYW1SZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0pIHtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9sb2FkZWQgPSAwO1xuICAgIHRoaXMuX2ZpbGVuYW1lID0gbnVsbDtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHNvdXJjZS53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcblxuICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlU3RyZWFtO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVSYW5nZTtcbiAgICB0aGlzLl9oZWFkZXJzID0gY3JlYXRlSGVhZGVycyh0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpO1xuICAgIGNvbnN0IHVybCA9IHNvdXJjZS51cmw7XG4gICAgZmV0Y2godXJsLCBjcmVhdGVGZXRjaE9wdGlvbnModGhpcy5faGVhZGVycywgdGhpcy5fd2l0aENyZWRlbnRpYWxzLCB0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHJlc3BvbnNlLnN0YXR1cywgdXJsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcblxuICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICBjb25zdCBnZXRSZXNwb25zZUhlYWRlciA9IG5hbWUgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaGVhZGVycy5nZXQobmFtZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoXG4gICAgICB9ID0gKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKSh7XG4gICAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgICBpc0h0dHA6IHRoaXMuX3N0cmVhbS5pc0h0dHAsXG4gICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0cztcbiAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIF9uZXR3b3JrX3V0aWxzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTtcblxuICAgICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIlN0cmVhbWluZyBpcyBkaXNhYmxlZC5cIikpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgY29uc3Qge1xuICAgICAgdmFsdWUsXG4gICAgICBkb25lXG4gICAgfSA9IGF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7XG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRvbmVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkICs9IHZhbHVlLmJ5dGVMZW5ndGg7XG5cbiAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZCxcbiAgICAgICAgdG90YWw6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIGJlZ2luLCBlbmQpIHtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9sb2FkZWQgPSAwO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcbiAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcblxuICAgIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVhZGVycyA9IGNyZWF0ZUhlYWRlcnModGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKTtcblxuICAgIHRoaXMuX2hlYWRlcnMuYXBwZW5kKFwiUmFuZ2VcIiwgYGJ5dGVzPSR7YmVnaW59LSR7ZW5kIC0gMX1gKTtcblxuICAgIGNvbnN0IHVybCA9IHNvdXJjZS51cmw7XG4gICAgZmV0Y2godXJsLCBjcmVhdGVGZXRjaE9wdGlvbnModGhpcy5faGVhZGVycywgdGhpcy5fd2l0aENyZWRlbnRpYWxzLCB0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICghKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHJlc3BvbnNlLnN0YXR1cywgdXJsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICB0aGlzLl9yZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRvbmVcbiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZG9uZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblxuICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh2YWx1ZSkuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9yZWFkZXIpIHtcbiAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxufVxuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBkZi5qcy5tYXAiLCIvKipcbiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZVxuICogSmF2YXNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZVxuICpcbiAqIENvcHlyaWdodCAyMDIwIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqL1xuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlclwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXJcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyXCJdID0gcm9vdC5wZGZqc1dvcmtlciA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd19wZGZqc19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dfcGRmanNfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193X3BkZmpzX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193X3BkZmpzX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193X3BkZmpzX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd19wZGZqc19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193X3BkZmpzX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193X3BkZmpzX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd19wZGZqc19yZXF1aXJlX18oX193X3BkZmpzX3JlcXVpcmVfXy5zID0gMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXb3JrZXJNZXNzYWdlSGFuZGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfd29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICB9XG59KTtcblxudmFyIF93b3JrZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEpO1xuXG5jb25zdCBwZGZqc1ZlcnNpb24gPSAnMi42LjM0Nyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJzNiZTljNjVmJztcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gZXhwb3J0cy5Xb3JrZXJUYXNrID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3BkZl9tYW5hZ2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ2KTtcblxudmFyIF93b3JrZXJfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg0Nyk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIFdvcmtlclRhc2sge1xuICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnRlcm1pbmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgZ2V0IGZpbmlzaGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBmaW5pc2goKSB7XG4gICAgdGhpcy5fY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICB0ZXJtaW5hdGUoKSB7XG4gICAgdGhpcy50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgaWYgKHRoaXMudGVybWluYXRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWRcIik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Xb3JrZXJUYXNrID0gV29ya2VyVGFzaztcblxuY2xhc3MgV29ya2VyTWVzc2FnZUhhbmRsZXIge1xuICBzdGF0aWMgc2V0dXAoaGFuZGxlciwgcG9ydCkge1xuICAgIHZhciB0ZXN0TWVzc2FnZVByb2Nlc3NlZCA9IGZhbHNlO1xuICAgIGhhbmRsZXIub24oXCJ0ZXN0XCIsIGZ1bmN0aW9uIHdwaFNldHVwVGVzdChkYXRhKSB7XG4gICAgICBpZiAodGVzdE1lc3NhZ2VQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0ZXN0TWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7XG5cbiAgICAgIGlmICghKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICBoYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1cHBvcnRUcmFuc2ZlcnMgPSBkYXRhWzBdID09PSAyNTU7XG4gICAgICBoYW5kbGVyLnBvc3RNZXNzYWdlVHJhbnNmZXJzID0gc3VwcG9ydFRyYW5zZmVycztcbiAgICAgIGhhbmRsZXIuc2VuZChcInRlc3RcIiwge1xuICAgICAgICBzdXBwb3J0VHJhbnNmZXJzXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiY29uZmlndXJlXCIsIGZ1bmN0aW9uIHdwaENvbmZpZ3VyZShkYXRhKSB7XG4gICAgICAoMCwgX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKGRhdGEudmVyYm9zaXR5KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0RG9jUmVxdWVzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cERvYyhkYXRhKSB7XG4gICAgICByZXR1cm4gV29ya2VyTWVzc2FnZUhhbmRsZXIuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGRhdGEsIHBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZURvY3VtZW50SGFuZGxlcihkb2NQYXJhbXMsIHBvcnQpIHtcbiAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlO1xuICAgIHZhciBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICB2YXIgV29ya2VyVGFza3MgPSBbXTtcbiAgICBjb25zdCB2ZXJib3NpdHkgPSAoMCwgX3V0aWwuZ2V0VmVyYm9zaXR5TGV2ZWwpKCk7XG4gICAgY29uc3QgYXBpVmVyc2lvbiA9IGRvY1BhcmFtcy5hcGlWZXJzaW9uO1xuICAgIGNvbnN0IHdvcmtlclZlcnNpb24gPSAnMi42LjM0Nyc7XG5cbiAgICBpZiAoYXBpVmVyc2lvbiAhPT0gd29ya2VyVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVBJIHZlcnNpb24gXCIke2FwaVZlcnNpb259XCIgZG9lcyBub3QgbWF0Y2ggYCArIGB0aGUgV29ya2VyIHZlcnNpb24gXCIke3dvcmtlclZlcnNpb259XCIuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW51bWVyYWJsZVByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gW10pIHtcbiAgICAgIGVudW1lcmFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpO1xuICAgIH1cblxuICAgIGlmIChlbnVtZXJhYmxlUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogXCIgKyBlbnVtZXJhYmxlUHJvcGVydGllcy5qb2luKFwiLCBcIikgKyBcIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBQcm9taXNlLmFsbFNldHRsZWQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBcIiArIFwiZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZSBQREYuanMgbGlicmFyeSAoZS5nLiBcIiArIFwiYFJlYWRhYmxlU3RyZWFtYCBhbmQvb3IgYFByb21pc2UuYWxsU2V0dGxlZGApOyBcIiArIFwicGxlYXNlIHVzZSBhbiBFUzUtY29tcGF0aWJsZSBidWlsZCBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgZG9jSWQgPSBkb2NQYXJhbXMuZG9jSWQ7XG4gICAgdmFyIGRvY0Jhc2VVcmwgPSBkb2NQYXJhbXMuZG9jQmFzZVVybDtcbiAgICB2YXIgd29ya2VySGFuZGxlck5hbWUgPSBkb2NQYXJhbXMuZG9jSWQgKyBcIl93b3JrZXJcIjtcbiAgICB2YXIgaGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKHdvcmtlckhhbmRsZXJOYW1lLCBkb2NJZCwgcG9ydCk7XG4gICAgaGFuZGxlci5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IGRvY1BhcmFtcy5wb3N0TWVzc2FnZVRyYW5zZmVycztcblxuICAgIGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICBpZiAodGVybWluYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRXb3JrZXJUYXNrKHRhc2spIHtcbiAgICAgIFdvcmtlclRhc2tzLnB1c2godGFzayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayh0YXNrKSB7XG4gICAgICB0YXNrLmZpbmlzaCgpO1xuICAgICAgdmFyIGkgPSBXb3JrZXJUYXNrcy5pbmRleE9mKHRhc2spO1xuICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChyZWNvdmVyeU1vZGUpIHtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tIZWFkZXJcIik7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInBhcnNlU3RhcnRYUmVmXCIpO1xuICAgICAgYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJwYXJzZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG5cbiAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tGaXJzdFBhZ2VcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtudW1QYWdlcywgZmluZ2VycHJpbnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwibnVtUGFnZXNcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmluZ2VycHJpbnRcIildKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVBhZ2VzLFxuICAgICAgICBmaW5nZXJwcmludFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQZGZNYW5hZ2VyKGRhdGEsIGV2YWx1YXRvck9wdGlvbnMpIHtcbiAgICAgIHZhciBwZGZNYW5hZ2VyQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGxldCBuZXdQZGZNYW5hZ2VyO1xuICAgICAgdmFyIHNvdXJjZSA9IGRhdGEuc291cmNlO1xuXG4gICAgICBpZiAoc291cmNlLmRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5Mb2NhbFBkZk1hbmFnZXIoZG9jSWQsIHNvdXJjZS5kYXRhLCBzb3VyY2UucGFzc3dvcmQsIGV2YWx1YXRvck9wdGlvbnMsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGRmU3RyZWFtLFxuICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwZGZTdHJlYW0gPSBuZXcgX3dvcmtlcl9zdHJlYW0uUERGV29ya2VyU3RyZWFtKGhhbmRsZXIpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdWxsUmVxdWVzdCA9IHBkZlN0cmVhbS5nZXRGdWxsUmVhZGVyKCk7XG4gICAgICBmdWxsUmVxdWVzdC5oZWFkZXJzUmVhZHkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZnVsbFJlcXVlc3QuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaXNhYmxlQXV0b0ZldGNoID0gc291cmNlLmRpc2FibGVBdXRvRmV0Y2ggfHwgZnVsbFJlcXVlc3QuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgIG5ld1BkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLk5ldHdvcmtQZGZNYW5hZ2VyKGRvY0lkLCBwZGZTdHJlYW0sIHtcbiAgICAgICAgICBtc2dIYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgIHBhc3N3b3JkOiBzb3VyY2UucGFzc3dvcmQsXG4gICAgICAgICAgbGVuZ3RoOiBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgcmFuZ2VDaHVua1NpemU6IHNvdXJjZS5yYW5nZUNodW5rU2l6ZVxuICAgICAgICB9LCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhY2hlZENodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShjYWNoZWRDaHVua3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHZhciBsb2FkZWQgPSAwO1xuXG4gICAgICB2YXIgZmx1c2hDaHVua3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwZGZGaWxlID0gKDAsIF91dGlsLmFycmF5c1RvQnl0ZXMpKGNhY2hlZENodW5rcyk7XG5cbiAgICAgICAgaWYgKHNvdXJjZS5sZW5ndGggJiYgcGRmRmlsZS5sZW5ndGggIT09IHNvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJyZXBvcnRlZCBIVFRQIGxlbmd0aCBpcyBkaWZmZXJlbnQgZnJvbSBhY3R1YWxcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgcGRmRmlsZSwgc291cmNlLnBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZWFkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRDaHVuayA9IGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcblxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFuZXdQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hDaHVua3MoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvYWRlZCArPSAoMCwgX3V0aWwuYXJyYXlCeXRlTGVuZ3RoKSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghZnVsbFJlcXVlc3QuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jUHJvZ3Jlc3NcIiwge1xuICAgICAgICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICAgICAgICB0b3RhbDogTWF0aC5tYXgobG9hZGVkLCBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoIHx8IDApXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3UGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnNlbmRQcm9ncmVzc2l2ZURhdGEodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2FjaGVkQ2h1bmtzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJlYWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgY2FuY2VsWEhScyA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcGRmU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbik7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcGRmTWFuYWdlckNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR1cERvYyhkYXRhKSB7XG4gICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoZG9jKSB7XG4gICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgaGFuZGxlci5zZW5kKFwiR2V0RG9jXCIsIHtcbiAgICAgICAgICBwZGZJbmZvOiBkb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG9uRmFpbHVyZShleCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24pIHtcbiAgICAgICAgICB2YXIgdGFzayA9IG5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtleC5jb2RlfWApO1xuICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICBoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIlBhc3N3b3JkUmVxdWVzdFwiLCBleCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgcGRmTWFuYWdlci51cGRhdGVQYXNzd29yZChwYXNzd29yZCk7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyUmVhZHkoKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLkludmFsaWRQREZFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJEb2NFeGNlcHRpb25cIiwgbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGxvYWREb2N1bWVudChmYWxzZSkudGhlbihvblN1Y2Nlc3MsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24pKSB7XG4gICAgICAgICAgICBvbkZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgICAgICBsb2FkRG9jdW1lbnQodHJ1ZSkudGhlbihvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICB2YXIgZXZhbHVhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgbWF4SW1hZ2VTaXplOiBkYXRhLm1heEltYWdlU2l6ZSxcbiAgICAgICAgZGlzYWJsZUZvbnRGYWNlOiBkYXRhLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgaWdub3JlRXJyb3JzOiBkYXRhLmlnbm9yZUVycm9ycyxcbiAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBkYXRhLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgZm9udEV4dHJhUHJvcGVydGllczogZGF0YS5mb250RXh0cmFQcm9wZXJ0aWVzXG4gICAgICB9O1xuICAgICAgZ2V0UGRmTWFuYWdlcihkYXRhLCBldmFsdWF0b3JPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChuZXdQZGZNYW5hZ2VyKSB7XG4gICAgICAgIGlmICh0ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgbmV3UGRmTWFuYWdlci50ZXJtaW5hdGUobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLlwiKSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGRmTWFuYWdlciA9IG5ld1BkZk1hbmFnZXI7XG4gICAgICAgIHBkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJEYXRhTG9hZGVkXCIsIHtcbiAgICAgICAgICAgIGxlbmd0aDogc3RyZWFtLmJ5dGVzLmJ5dGVMZW5ndGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KS50aGVuKHBkZk1hbmFnZXJSZWFkeSwgb25GYWlsdXJlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2UoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShkYXRhLnBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsIFwicm90YXRlXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInJlZlwiKSwgcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJ1c2VyVW5pdFwiKSwgcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJ2aWV3XCIpXSkudGhlbihmdW5jdGlvbiAoW3JvdGF0ZSwgcmVmLCB1c2VyVW5pdCwgdmlld10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm90YXRlLFxuICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgdXNlclVuaXQsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZUluZGV4XCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUluZGV4KHtcbiAgICAgIHJlZlxuICAgIH0pIHtcbiAgICAgIGNvbnN0IHBhZ2VSZWYgPSBfcHJpbWl0aXZlcy5SZWYuZ2V0KHJlZi5udW0sIHJlZi5nZW4pO1xuXG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiZ2V0UGFnZUluZGV4XCIsIFtwYWdlUmVmXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERlc3RpbmF0aW9uc1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9ucyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiZGVzdGluYXRpb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREZXN0aW5hdGlvblwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXREZXN0aW5hdGlvblwiLCBbZGF0YS5pZF0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlTGFiZWxzXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxhYmVscyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZUxhYmVsc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZUxheW91dFwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VMYXlvdXQoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBhZ2VMYXlvdXRcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VNb2RlXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZU1vZGUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBhZ2VNb2RlXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRWaWV3ZXJQcmVmZXJlbmNlc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInZpZXdlclByZWZlcmVuY2VzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPcGVuQWN0aW9uXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwib3BlbkFjdGlvblwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0QXR0YWNobWVudHNcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRBdHRhY2htZW50cyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYXR0YWNobWVudHNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldEphdmFTY3JpcHRcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRKYXZhU2NyaXB0KGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJqYXZhU2NyaXB0XCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPdXRsaW5lXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0T3V0bGluZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiZG9jdW1lbnRPdXRsaW5lXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRPcHRpb25hbENvbnRlbnRDb25maWdcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJvcHRpb25hbENvbnRlbnRDb25maWdcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBlcm1pc3Npb25zXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGVybWlzc2lvbnNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE1ldGFkYXRhXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0TWV0YWRhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImRvY3VtZW50SW5mb1wiKSwgcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwibWV0YWRhdGFcIildKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0RGF0YVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERhdGEoZGF0YSkge1xuICAgICAgcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCk7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmJ5dGVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFN0YXRzXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0U3RhdHMoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlWFJlZihcInN0YXRzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRBbm5vdGF0aW9uc1wiLCBmdW5jdGlvbiAoe1xuICAgICAgcGFnZUluZGV4LFxuICAgICAgaW50ZW50XG4gICAgfSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2UuZ2V0QW5ub3RhdGlvbnNEYXRhKGludGVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiU2F2ZURvY3VtZW50XCIsIGZ1bmN0aW9uICh7XG4gICAgICBudW1QYWdlcyxcbiAgICAgIGFubm90YXRpb25TdG9yYWdlLFxuICAgICAgZmlsZW5hbWVcbiAgICB9KSB7XG4gICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW3BkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKV07XG4gICAgICBjb25zdCBkb2N1bWVudCA9IHBkZk1hbmFnZXIucGRmRG9jdW1lbnQ7XG5cbiAgICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IG51bVBhZ2VzOyBwYWdlSW5kZXgrKykge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtwYWdlSW5kZXh9YCk7XG4gICAgICAgICAgcmV0dXJuIHBhZ2Uuc2F2ZShoYW5kbGVyLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKChbc3RyZWFtLCAuLi5yZWZzXSkgPT4ge1xuICAgICAgICBsZXQgbmV3UmVmcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVmIG9mIHJlZnMpIHtcbiAgICAgICAgICBuZXdSZWZzID0gcmVmLmZpbHRlcih4ID0+IHggIT09IG51bGwpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIG5ld1JlZnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1JlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHhyZWYgPSBkb2N1bWVudC54cmVmO1xuICAgICAgICBsZXQgbmV3WHJlZkluZm8gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGlmICh4cmVmLnRyYWlsZXIpIHtcbiAgICAgICAgICBjb25zdCBfaW5mbyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICBjb25zdCB4cmVmSW5mbyA9IHhyZWYudHJhaWxlci5nZXQoXCJJbmZvXCIpIHx8IG51bGw7XG5cbiAgICAgICAgICBpZiAoeHJlZkluZm8pIHtcbiAgICAgICAgICAgIHhyZWZJbmZvLmZvckVhY2goKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoa2V5KSAmJiAoMCwgX3V0aWwuaXNTdHJpbmcpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIF9pbmZvW2tleV0gPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3WHJlZkluZm8gPSB7XG4gICAgICAgICAgICByb290UmVmOiB4cmVmLnRyYWlsZXIuZ2V0UmF3KFwiUm9vdFwiKSB8fCBudWxsLFxuICAgICAgICAgICAgZW5jcnlwdDogeHJlZi50cmFpbGVyLmdldFJhdyhcIkVuY3J5cHRcIikgfHwgbnVsbCxcbiAgICAgICAgICAgIG5ld1JlZjogeHJlZi5nZXROZXdSZWYoKSxcbiAgICAgICAgICAgIGluZm9SZWY6IHhyZWYudHJhaWxlci5nZXRSYXcoXCJJbmZvXCIpIHx8IG51bGwsXG4gICAgICAgICAgICBpbmZvOiBfaW5mbyxcbiAgICAgICAgICAgIGZpbGVJZHM6IHhyZWYudHJhaWxlci5nZXRSYXcoXCJJRFwiKSB8fCBudWxsLFxuICAgICAgICAgICAgc3RhcnRYUmVmOiBkb2N1bWVudC5zdGFydFhSZWYsXG4gICAgICAgICAgICBmaWxlbmFtZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB4cmVmLnJlc2V0TmV3UmVmKCk7XG4gICAgICAgIHJldHVybiAoMCwgX3dyaXRlci5pbmNyZW1lbnRhbFVwZGF0ZSkoc3RyZWFtLmJ5dGVzLCBuZXdYcmVmSW5mbywgbmV3UmVmcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0T3BlcmF0b3JMaXN0XCIsIGZ1bmN0aW9uIHdwaFNldHVwUmVuZGVyUGFnZShkYXRhLCBzaW5rKSB7XG4gICAgICB2YXIgcGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG4gICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soYEdldE9wZXJhdG9yTGlzdDogcGFnZSAke3BhZ2VJbmRleH1gKTtcbiAgICAgICAgc3RhcnRXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICBjb25zdCBzdGFydCA9IHZlcmJvc2l0eSA+PSBfdXRpbC5WZXJib3NpdHlMZXZlbC5JTkZPUyA/IERhdGUubm93KCkgOiAwO1xuICAgICAgICBwYWdlLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICBzaW5rLFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgaW50ZW50OiBkYXRhLmludGVudCxcbiAgICAgICAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOiBkYXRhLnJlbmRlckludGVyYWN0aXZlRm9ybXMsXG4gICAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IGRhdGEuYW5ub3RhdGlvblN0b3JhZ2VcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAob3BlcmF0b3JMaXN0SW5mbykge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgcGFnZT0ke3BhZ2VJbmRleCArIDF9IC0gZ2V0T3BlcmF0b3JMaXN0OiB0aW1lPWAgKyBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXMsIGxlbj0ke29wZXJhdG9yTGlzdEluZm8ubGVuZ3RofWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JPcGVyYXRvckxpc3RcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcyk7XG4gICAgaGFuZGxlci5vbihcIkdldFRleHRDb250ZW50XCIsIGZ1bmN0aW9uIHdwaEV4dHJhY3RUZXh0KGRhdGEsIHNpbmspIHtcbiAgICAgIHZhciBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcblxuICAgICAgc2luay5vblB1bGwgPSBmdW5jdGlvbiAoZGVzaXJlZFNpemUpIHt9O1xuXG4gICAgICBzaW5rLm9uQ2FuY2VsID0gZnVuY3Rpb24gKHJlYXNvbikge307XG5cbiAgICAgIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgdmFyIHRhc2sgPSBuZXcgV29ya2VyVGFzayhcIkdldFRleHRDb250ZW50OiBwYWdlIFwiICsgcGFnZUluZGV4KTtcbiAgICAgICAgc3RhcnRXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICBjb25zdCBzdGFydCA9IHZlcmJvc2l0eSA+PSBfdXRpbC5WZXJib3NpdHlMZXZlbC5JTkZPUyA/IERhdGUubm93KCkgOiAwO1xuICAgICAgICBwYWdlLmV4dHJhY3RUZXh0Q29udGVudCh7XG4gICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICB0YXNrLFxuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZTogZGF0YS5ub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGRhdGEuY29tYmluZVRleHRJdGVtc1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYHBhZ2U9JHtwYWdlSW5kZXggKyAxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWAgKyBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHRhc2sudGVybWluYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiRm9udEZhbGxiYWNrXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5mb250RmFsbGJhY2soZGF0YS5pZCwgaGFuZGxlcik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkNsZWFudXBcIiwgZnVuY3Rpb24gd3BoQ2xlYW51cChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5jbGVhbnVwKHRydWUpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJUZXJtaW5hdGVcIiwgZnVuY3Rpb24gd3BoVGVybWluYXRlKGRhdGEpIHtcbiAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgY29uc3Qgd2FpdE9uID0gW107XG5cbiAgICAgIGlmIChwZGZNYW5hZ2VyKSB7XG4gICAgICAgIHBkZk1hbmFnZXIudGVybWluYXRlKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIldvcmtlciB3YXMgdGVybWluYXRlZC5cIikpO1xuICAgICAgICBjb25zdCBjbGVhbnVwUHJvbWlzZSA9IHBkZk1hbmFnZXIuY2xlYW51cCgpO1xuICAgICAgICB3YWl0T24ucHVzaChjbGVhbnVwUHJvbWlzZSk7XG4gICAgICAgIHBkZk1hbmFnZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9wcmltaXRpdmVzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FuY2VsWEhScykge1xuICAgICAgICBjYW5jZWxYSFJzKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIldvcmtlciB3YXMgdGVybWluYXRlZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBXb3JrZXJUYXNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKHRhc2suZmluaXNoZWQpO1xuICAgICAgICB0YXNrLnRlcm1pbmF0ZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIGhhbmRsZXIgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIlJlYWR5XCIsIGZ1bmN0aW9uIHdwaFJlYWR5KGRhdGEpIHtcbiAgICAgIHNldHVwRG9jKGRvY1BhcmFtcyk7XG4gICAgICBkb2NQYXJhbXMgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiB3b3JrZXJIYW5kbGVyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgIHZhciBoYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoXCJ3b3JrZXJcIiwgXCJtYWluXCIsIHBvcnQpO1xuICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKGhhbmRsZXIsIHBvcnQpO1xuICAgIGhhbmRsZXIuc2VuZChcInJlYWR5XCIsIG51bGwpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Xb3JrZXJNZXNzYWdlSGFuZGxlciA9IFdvcmtlck1lc3NhZ2VIYW5kbGVyO1xuXG5mdW5jdGlvbiBpc01lc3NhZ2VQb3J0KG1heWJlUG9ydCkge1xuICByZXR1cm4gdHlwZW9mIG1heWJlUG9ydC5wb3N0TWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiICYmIFwib25tZXNzYWdlXCIgaW4gbWF5YmVQb3J0O1xufVxuXG5pZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiAmJiAhX2lzX25vZGUuaXNOb2RlSlMgJiYgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgaXNNZXNzYWdlUG9ydChzZWxmKSkge1xuICBXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZik7XG59XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcnJheUJ5dGVMZW5ndGggPSBhcnJheUJ5dGVMZW5ndGg7XG5leHBvcnRzLmFycmF5c1RvQnl0ZXMgPSBhcnJheXNUb0J5dGVzO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvcnRzLmJ5dGVzVG9TdHJpbmcgPSBieXRlc1RvU3RyaW5nO1xuZXhwb3J0cy5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSA9IGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5O1xuZXhwb3J0cy5lc2NhcGVTdHJpbmcgPSBlc2NhcGVTdHJpbmc7XG5leHBvcnRzLmdldE1vZGlmaWNhdGlvbkRhdGUgPSBnZXRNb2RpZmljYXRpb25EYXRlO1xuZXhwb3J0cy5nZXRWZXJib3NpdHlMZXZlbCA9IGdldFZlcmJvc2l0eUxldmVsO1xuZXhwb3J0cy5pbmZvID0gaW5mbztcbmV4cG9ydHMuaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG5leHBvcnRzLmlzQXJyYXlFcXVhbCA9IGlzQXJyYXlFcXVhbDtcbmV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwgPSBjcmVhdGVWYWxpZEFic29sdXRlVXJsO1xuZXhwb3J0cy5yZW1vdmVOdWxsQ2hhcmFjdGVycyA9IHJlbW92ZU51bGxDaGFyYWN0ZXJzO1xuZXhwb3J0cy5zZXRWZXJib3NpdHlMZXZlbCA9IHNldFZlcmJvc2l0eUxldmVsO1xuZXhwb3J0cy5zaGFkb3cgPSBzaGFkb3c7XG5leHBvcnRzLnN0cmluZzMyID0gc3RyaW5nMzI7XG5leHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuZXhwb3J0cy5zdHJpbmdUb1BERlN0cmluZyA9IHN0cmluZ1RvUERGU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLklzRXZhbFN1cHBvcnRlZENhY2hlZCA9IGV4cG9ydHMuSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGV4cG9ydHMuRm9ybWF0RXJyb3IgPSBleHBvcnRzLlV0aWwgPSBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IGV4cG9ydHMuU3RyZWFtVHlwZSA9IGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGV4cG9ydHMuSW52YWxpZFBERkV4Y2VwdGlvbiA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBleHBvcnRzLkNNYXBDb21wcmVzc2lvblR5cGUgPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkFubm90YXRpb25UeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBleHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLklERU5USVRZX01BVFJJWCA9IGV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBleHBvcnRzLkJhc2VFeGNlcHRpb24gPSB2b2lkIDA7XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFBlcm1pc3Npb25GbGFnID0ge1xuICBQUklOVDogMHgwNCxcbiAgTU9ESUZZX0NPTlRFTlRTOiAweDA4LFxuICBDT1BZOiAweDEwLFxuICBNT0RJRllfQU5OT1RBVElPTlM6IDB4MjAsXG4gIEZJTExfSU5URVJBQ1RJVkVfRk9STVM6IDB4MTAwLFxuICBDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOiAweDIwMCxcbiAgQVNTRU1CTEU6IDB4NDAwLFxuICBQUklOVF9ISUdIX1FVQUxJVFk6IDB4ODAwXG59O1xuZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IFBlcm1pc3Npb25GbGFnO1xuY29uc3QgVGV4dFJlbmRlcmluZ01vZGUgPSB7XG4gIEZJTEw6IDAsXG4gIFNUUk9LRTogMSxcbiAgRklMTF9TVFJPS0U6IDIsXG4gIElOVklTSUJMRTogMyxcbiAgRklMTF9BRERfVE9fUEFUSDogNCxcbiAgU1RST0tFX0FERF9UT19QQVRIOiA1LFxuICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNixcbiAgQUREX1RPX1BBVEg6IDcsXG4gIEZJTExfU1RST0tFX01BU0s6IDMsXG4gIEFERF9UT19QQVRIX0ZMQUc6IDRcbn07XG5leHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU7XG5jb25zdCBJbWFnZUtpbmQgPSB7XG4gIEdSQVlTQ0FMRV8xQlBQOiAxLFxuICBSR0JfMjRCUFA6IDIsXG4gIFJHQkFfMzJCUFA6IDNcbn07XG5leHBvcnRzLkltYWdlS2luZCA9IEltYWdlS2luZDtcbmNvbnN0IEFubm90YXRpb25UeXBlID0ge1xuICBURVhUOiAxLFxuICBMSU5LOiAyLFxuICBGUkVFVEVYVDogMyxcbiAgTElORTogNCxcbiAgU1FVQVJFOiA1LFxuICBDSVJDTEU6IDYsXG4gIFBPTFlHT046IDcsXG4gIFBPTFlMSU5FOiA4LFxuICBISUdITElHSFQ6IDksXG4gIFVOREVSTElORTogMTAsXG4gIFNRVUlHR0xZOiAxMSxcbiAgU1RSSUtFT1VUOiAxMixcbiAgU1RBTVA6IDEzLFxuICBDQVJFVDogMTQsXG4gIElOSzogMTUsXG4gIFBPUFVQOiAxNixcbiAgRklMRUFUVEFDSE1FTlQ6IDE3LFxuICBTT1VORDogMTgsXG4gIE1PVklFOiAxOSxcbiAgV0lER0VUOiAyMCxcbiAgU0NSRUVOOiAyMSxcbiAgUFJJTlRFUk1BUks6IDIyLFxuICBUUkFQTkVUOiAyMyxcbiAgV0FURVJNQVJLOiAyNCxcbiAgVEhSRUVEOiAyNSxcbiAgUkVEQUNUOiAyNlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBBbm5vdGF0aW9uVHlwZTtcbmNvbnN0IEFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IHtcbiAgTUFSS0VEOiBcIk1hcmtlZFwiLFxuICBSRVZJRVc6IFwiUmV2aWV3XCJcbn07XG5leHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IEFubm90YXRpb25TdGF0ZU1vZGVsVHlwZTtcbmNvbnN0IEFubm90YXRpb25NYXJrZWRTdGF0ZSA9IHtcbiAgTUFSS0VEOiBcIk1hcmtlZFwiLFxuICBVTk1BUktFRDogXCJVbm1hcmtlZFwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uTWFya2VkU3RhdGUgPSBBbm5vdGF0aW9uTWFya2VkU3RhdGU7XG5jb25zdCBBbm5vdGF0aW9uUmV2aWV3U3RhdGUgPSB7XG4gIEFDQ0VQVEVEOiBcIkFjY2VwdGVkXCIsXG4gIFJFSkVDVEVEOiBcIlJlamVjdGVkXCIsXG4gIENBTkNFTExFRDogXCJDYW5jZWxsZWRcIixcbiAgQ09NUExFVEVEOiBcIkNvbXBsZXRlZFwiLFxuICBOT05FOiBcIk5vbmVcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gQW5ub3RhdGlvblJldmlld1N0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJlcGx5VHlwZSA9IHtcbiAgR1JPVVA6IFwiR3JvdXBcIixcbiAgUkVQTFk6IFwiUlwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gQW5ub3RhdGlvblJlcGx5VHlwZTtcbmNvbnN0IEFubm90YXRpb25GbGFnID0ge1xuICBJTlZJU0lCTEU6IDB4MDEsXG4gIEhJRERFTjogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIE5PWk9PTTogMHgwOCxcbiAgTk9ST1RBVEU6IDB4MTAsXG4gIE5PVklFVzogMHgyMCxcbiAgUkVBRE9OTFk6IDB4NDAsXG4gIExPQ0tFRDogMHg4MCxcbiAgVE9HR0xFTk9WSUVXOiAweDEwMCxcbiAgTE9DS0VEQ09OVEVOVFM6IDB4MjAwXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IEFubm90YXRpb25GbGFnO1xuY29uc3QgQW5ub3RhdGlvbkZpZWxkRmxhZyA9IHtcbiAgUkVBRE9OTFk6IDB4MDAwMDAwMSxcbiAgUkVRVUlSRUQ6IDB4MDAwMDAwMixcbiAgTk9FWFBPUlQ6IDB4MDAwMDAwNCxcbiAgTVVMVElMSU5FOiAweDAwMDEwMDAsXG4gIFBBU1NXT1JEOiAweDAwMDIwMDAsXG4gIE5PVE9HR0xFVE9PRkY6IDB4MDAwNDAwMCxcbiAgUkFESU86IDB4MDAwODAwMCxcbiAgUFVTSEJVVFRPTjogMHgwMDEwMDAwLFxuICBDT01CTzogMHgwMDIwMDAwLFxuICBFRElUOiAweDAwNDAwMDAsXG4gIFNPUlQ6IDB4MDA4MDAwMCxcbiAgRklMRVNFTEVDVDogMHgwMTAwMDAwLFxuICBNVUxUSVNFTEVDVDogMHgwMjAwMDAwLFxuICBET05PVFNQRUxMQ0hFQ0s6IDB4MDQwMDAwMCxcbiAgRE9OT1RTQ1JPTEw6IDB4MDgwMDAwMCxcbiAgQ09NQjogMHgxMDAwMDAwLFxuICBSSUNIVEVYVDogMHgyMDAwMDAwLFxuICBSQURJT1NJTlVOSVNPTjogMHgyMDAwMDAwLFxuICBDT01NSVRPTlNFTENIQU5HRTogMHg0MDAwMDAwXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gQW5ub3RhdGlvbkZpZWxkRmxhZztcbmNvbnN0IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSB7XG4gIFNPTElEOiAxLFxuICBEQVNIRUQ6IDIsXG4gIEJFVkVMRUQ6IDMsXG4gIElOU0VUOiA0LFxuICBVTkRFUkxJTkU6IDVcbn07XG5leHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlO1xuY29uc3QgU3RyZWFtVHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIEZMQVRFOiBcIkZMQVRFXCIsXG4gIExaVzogXCJMWldcIixcbiAgRENUOiBcIkRDVFwiLFxuICBKUFg6IFwiSlBYXCIsXG4gIEpCSUc6IFwiSkJJR1wiLFxuICBBODU6IFwiQTg1XCIsXG4gIEFIWDogXCJBSFhcIixcbiAgQ0NGOiBcIkNDRlwiLFxuICBSTFg6IFwiUkxYXCJcbn07XG5leHBvcnRzLlN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlO1xuY29uc3QgRm9udFR5cGUgPSB7XG4gIFVOS05PV046IFwiVU5LTk9XTlwiLFxuICBUWVBFMTogXCJUWVBFMVwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzbWFzazogXCJzbWFza1wiLFxuICBzaGFkaW5nUGF0dGVybjogXCJzaGFkaW5nUGF0dGVyblwiLFxuICBmb250OiBcImZvbnRcIixcbiAgZXJyb3JUaWxpbmdQYXR0ZXJuOiBcImVycm9yVGlsaW5nUGF0dGVyblwiLFxuICBlcnJvckV4dEdTdGF0ZTogXCJlcnJvckV4dEdTdGF0ZVwiLFxuICBlcnJvclhPYmplY3Q6IFwiZXJyb3JYT2JqZWN0XCIsXG4gIGVycm9yRm9udExvYWRUeXBlMzogXCJlcnJvckZvbnRMb2FkVHlwZTNcIixcbiAgZXJyb3JGb250U3RhdGU6IFwiZXJyb3JGb250U3RhdGVcIixcbiAgZXJyb3JGb250TWlzc2luZzogXCJlcnJvckZvbnRNaXNzaW5nXCIsXG4gIGVycm9yRm9udFRyYW5zbGF0ZTogXCJlcnJvckZvbnRUcmFuc2xhdGVcIixcbiAgZXJyb3JDb2xvclNwYWNlOiBcImVycm9yQ29sb3JTcGFjZVwiLFxuICBlcnJvck9wZXJhdG9yTGlzdDogXCJlcnJvck9wZXJhdG9yTGlzdFwiLFxuICBlcnJvckZvbnRUb1VuaWNvZGU6IFwiZXJyb3JGb250VG9Vbmljb2RlXCIsXG4gIGVycm9yRm9udExvYWROYXRpdmU6IFwiZXJyb3JGb250TG9hZE5hdGl2ZVwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIixcbiAgZXJyb3JNYXJrZWRDb250ZW50OiBcImVycm9yTWFya2VkQ29udGVudFwiXG59O1xuZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IFVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuY29uc3QgUGFzc3dvcmRSZXNwb25zZXMgPSB7XG4gIE5FRURfUEFTU1dPUkQ6IDEsXG4gIElOQ09SUkVDVF9QQVNTV09SRDogMlxufTtcbmV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBQYXNzd29yZFJlc3BvbnNlcztcbmxldCB2ZXJib3NpdHkgPSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUztcblxuZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwobGV2ZWwpIHtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIobGV2ZWwpKSB7XG4gICAgdmVyYm9zaXR5ID0gbGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VmVyYm9zaXR5TGV2ZWwoKSB7XG4gIHJldHVybiB2ZXJib3NpdHk7XG59XG5cbmZ1bmN0aW9uIGluZm8obXNnKSB7XG4gIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuSU5GT1MpIHtcbiAgICBjb25zb2xlLmxvZyhgSW5mbzogJHttc2d9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUykge1xuICAgIGNvbnNvbGUubG9nKGBXYXJuaW5nOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHtcbiAgaWYgKCFjb25kKSB7XG4gICAgdW5yZWFjaGFibGUobXNnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW4oYmFzZVVybCwgb3RoZXJVcmwpIHtcbiAgbGV0IGJhc2U7XG5cbiAgdHJ5IHtcbiAgICBiYXNlID0gbmV3IFVSTChiYXNlVXJsKTtcblxuICAgIGlmICghYmFzZS5vcmlnaW4gfHwgYmFzZS5vcmlnaW4gPT09IFwibnVsbFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgb3RoZXIgPSBuZXcgVVJMKG90aGVyVXJsLCBiYXNlKTtcbiAgcmV0dXJuIGJhc2Uub3JpZ2luID09PSBvdGhlci5vcmlnaW47XG59XG5cbmZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodXJsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICBjYXNlIFwiaHR0cDpcIjpcbiAgICBjYXNlIFwiaHR0cHM6XCI6XG4gICAgY2FzZSBcImZ0cDpcIjpcbiAgICBjYXNlIFwibWFpbHRvOlwiOlxuICAgIGNhc2UgXCJ0ZWw6XCI6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWJzb2x1dGVVcmwgPSBiYXNlVXJsID8gbmV3IFVSTCh1cmwsIGJhc2VVcmwpIDogbmV3IFVSTCh1cmwpO1xuXG4gICAgaWYgKF9pc1ZhbGlkUHJvdG9jb2woYWJzb2x1dGVVcmwpKSB7XG4gICAgICByZXR1cm4gYWJzb2x1dGVVcmw7XG4gICAgfVxuICB9IGNhdGNoIChleCkge31cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2hhZG93KG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgIHZhbHVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5jb25zdCBCYXNlRXhjZXB0aW9uID0gZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEJhc2VFeGNlcHRpb24obWVzc2FnZSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlRXhjZXB0aW9uKSB7XG4gICAgICB1bnJlYWNoYWJsZShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uXCIpO1xuICAgIH1cblxuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgQmFzZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgQmFzZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEJhc2VFeGNlcHRpb247XG4gIHJldHVybiBCYXNlRXhjZXB0aW9uO1xufSgpO1xuXG5leHBvcnRzLkJhc2VFeGNlcHRpb24gPSBCYXNlRXhjZXB0aW9uO1xuXG5jbGFzcyBQYXNzd29yZEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2csIGNvZGUpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gUGFzc3dvcmRFeGNlcHRpb247XG5cbmNsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2csIGRldGFpbHMpIHtcbiAgICBzdXBlcihtc2cpO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcblxuY2xhc3MgSW52YWxpZFBERkV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcblxuY2xhc3MgTWlzc2luZ1BERkV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5Gb3JtYXRFcnJvciA9IEZvcm1hdEVycm9yO1xuXG5jbGFzcyBBYm9ydEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24ge31cblxuZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IEFib3J0RXhjZXB0aW9uO1xuY29uc3QgTnVsbENoYXJhY3RlcnNSZWdFeHAgPSAvXFx4MDAvZztcblxuZnVuY3Rpb24gcmVtb3ZlTnVsbENoYXJhY3RlcnMoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZShOdWxsQ2hhcmFjdGVyc1JlZ0V4cCwgXCJcIik7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXMpIHtcbiAgYXNzZXJ0KGJ5dGVzICE9PSBudWxsICYmIHR5cGVvZiBieXRlcyA9PT0gXCJvYmplY3RcIiAmJiBieXRlcy5sZW5ndGggIT09IHVuZGVmaW5lZCwgXCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nXCIpO1xuICBjb25zdCBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gIGNvbnN0IE1BWF9BUkdVTUVOVF9DT1VOVCA9IDgxOTI7XG5cbiAgaWYgKGxlbmd0aCA8IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTtcbiAgfVxuXG4gIGNvbnN0IHN0ckJ1ZiA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgIGNvbnN0IGNodW5rRW5kID0gTWF0aC5taW4oaSArIE1BWF9BUkdVTUVOVF9DT1VOVCwgbGVuZ3RoKTtcbiAgICBjb25zdCBjaHVuayA9IGJ5dGVzLnN1YmFycmF5KGksIGNodW5rRW5kKTtcbiAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7XG4gIH1cblxuICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIGFzc2VydCh0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXNcIik7XG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmZ1bmN0aW9uIGFycmF5Qnl0ZUxlbmd0aChhcnIpIHtcbiAgaWYgKGFyci5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcnIubGVuZ3RoO1xuICB9XG5cbiAgYXNzZXJ0KGFyci5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQsIFwiYXJyYXlCeXRlTGVuZ3RoIC0gaW52YWxpZCBhcmd1bWVudC5cIik7XG4gIHJldHVybiBhcnIuYnl0ZUxlbmd0aDtcbn1cblxuZnVuY3Rpb24gYXJyYXlzVG9CeXRlcyhhcnIpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoID09PSAxICYmIGFyclswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gYXJyWzBdO1xuICB9XG5cbiAgbGV0IHJlc3VsdExlbmd0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdExlbmd0aCArPSBhcnJheUJ5dGVMZW5ndGgoYXJyW2ldKTtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGl0ZW0gPSBhcnJbaV07XG5cbiAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpdGVtID0gc3RyaW5nVG9CeXRlcyhpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBuZXcgVWludDhBcnJheShpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpdGVtTGVuZ3RoID0gaXRlbS5ieXRlTGVuZ3RoO1xuICAgIGRhdGEuc2V0KGl0ZW0sIHBvcyk7XG4gICAgcG9zICs9IGl0ZW1MZW5ndGg7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nMzIodmFsdWUpIHtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xufVxuXG5mdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpIHtcbiAgY29uc3QgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICBidWZmZXI4WzBdID0gMTtcbiAgY29uc3QgdmlldzMyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcjguYnVmZmVyLCAwLCAxKTtcbiAgcmV0dXJuIHZpZXczMlswXSA9PT0gMTtcbn1cblxuY29uc3QgSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSB7XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc2hhZG93KHRoaXMsIFwidmFsdWVcIiwgaXNMaXR0bGVFbmRpYW4oKSk7XG4gIH1cblxufTtcbmV4cG9ydHMuSXNMaXR0bGVFbmRpYW5DYWNoZWQgPSBJc0xpdHRsZUVuZGlhbkNhY2hlZDtcblxuZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCkge1xuICB0cnkge1xuICAgIG5ldyBGdW5jdGlvbihcIlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5jb25zdCBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSB7XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc2hhZG93KHRoaXMsIFwidmFsdWVcIiwgaXNFdmFsU3VwcG9ydGVkKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzRXZhbFN1cHBvcnRlZENhY2hlZCA9IElzRXZhbFN1cHBvcnRlZENhY2hlZDtcbmNvbnN0IHJnYkJ1ZiA9IFtcInJnYihcIiwgMCwgXCIsXCIsIDAsIFwiLFwiLCAwLCBcIilcIl07XG5cbmNsYXNzIFV0aWwge1xuICBzdGF0aWMgbWFrZUNzc1JnYihyLCBnLCBiKSB7XG4gICAgcmdiQnVmWzFdID0gcjtcbiAgICByZ2JCdWZbM10gPSBnO1xuICAgIHJnYkJ1Zls1XSA9IGI7XG4gICAgcmV0dXJuIHJnYkJ1Zi5qb2luKFwiXCIpO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zZm9ybShtMSwgbTIpIHtcbiAgICByZXR1cm4gW20xWzBdICogbTJbMF0gKyBtMVsyXSAqIG0yWzFdLCBtMVsxXSAqIG0yWzBdICsgbTFbM10gKiBtMlsxXSwgbTFbMF0gKiBtMlsyXSArIG0xWzJdICogbTJbM10sIG0xWzFdICogbTJbMl0gKyBtMVszXSAqIG0yWzNdLCBtMVswXSAqIG0yWzRdICsgbTFbMl0gKiBtMls1XSArIG0xWzRdLCBtMVsxXSAqIG0yWzRdICsgbTFbM10gKiBtMls1XSArIG0xWzVdXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRyYW5zZm9ybShwLCBtKSB7XG4gICAgY29uc3QgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICBjb25zdCB5dCA9IHBbMF0gKiBtWzFdICsgcFsxXSAqIG1bM10gKyBtWzVdO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUludmVyc2VUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdO1xuICAgIGNvbnN0IHh0ID0gKHBbMF0gKiBtWzNdIC0gcFsxXSAqIG1bMl0gKyBtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQ7XG4gICAgY29uc3QgeXQgPSAoLXBbMF0gKiBtWzFdICsgcFsxXSAqIG1bMF0gKyBtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGQ7XG4gICAgcmV0dXJuIFt4dCwgeXRdO1xuICB9XG5cbiAgc3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHIsIG0pIHtcbiAgICBjb25zdCBwMSA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0ociwgbSk7XG4gICAgY29uc3QgcDIgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIuc2xpY2UoMiwgNCksIG0pO1xuICAgIGNvbnN0IHAzID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclswXSwgclszXV0sIG0pO1xuICAgIGNvbnN0IHA0ID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclsyXSwgclsxXV0sIG0pO1xuICAgIHJldHVybiBbTWF0aC5taW4ocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1pbihwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSksIE1hdGgubWF4KHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5tYXgocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pXTtcbiAgfVxuXG4gIHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICByZXR1cm4gW21bM10gLyBkLCAtbVsxXSAvIGQsIC1tWzJdIC8gZCwgbVswXSAvIGQsIChtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQsIChtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGRdO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5M2RUcmFuc2Zvcm0obSwgdikge1xuICAgIHJldHVybiBbbVswXSAqIHZbMF0gKyBtWzFdICogdlsxXSArIG1bMl0gKiB2WzJdLCBtWzNdICogdlswXSArIG1bNF0gKiB2WzFdICsgbVs1XSAqIHZbMl0sIG1bNl0gKiB2WzBdICsgbVs3XSAqIHZbMV0gKyBtWzhdICogdlsyXV07XG4gIH1cblxuICBzdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobSkge1xuICAgIGNvbnN0IHRyYW5zcG9zZSA9IFttWzBdLCBtWzJdLCBtWzFdLCBtWzNdXTtcbiAgICBjb25zdCBhID0gbVswXSAqIHRyYW5zcG9zZVswXSArIG1bMV0gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgYiA9IG1bMF0gKiB0cmFuc3Bvc2VbMV0gKyBtWzFdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGMgPSBtWzJdICogdHJhbnNwb3NlWzBdICsgbVszXSAqIHRyYW5zcG9zZVsyXTtcbiAgICBjb25zdCBkID0gbVsyXSAqIHRyYW5zcG9zZVsxXSArIG1bM10gKiB0cmFuc3Bvc2VbM107XG4gICAgY29uc3QgZmlyc3QgPSAoYSArIGQpIC8gMjtcbiAgICBjb25zdCBzZWNvbmQgPSBNYXRoLnNxcnQoKGEgKyBkKSAqIChhICsgZCkgLSA0ICogKGEgKiBkIC0gYyAqIGIpKSAvIDI7XG4gICAgY29uc3Qgc3ggPSBmaXJzdCArIHNlY29uZCB8fCAxO1xuICAgIGNvbnN0IHN5ID0gZmlyc3QgLSBzZWNvbmQgfHwgMTtcbiAgICByZXR1cm4gW01hdGguc3FydChzeCksIE1hdGguc3FydChzeSldO1xuICB9XG5cbiAgc3RhdGljIG5vcm1hbGl6ZVJlY3QocmVjdCkge1xuICAgIGNvbnN0IHIgPSByZWN0LnNsaWNlKDApO1xuXG4gICAgaWYgKHJlY3RbMF0gPiByZWN0WzJdKSB7XG4gICAgICByWzBdID0gcmVjdFsyXTtcbiAgICAgIHJbMl0gPSByZWN0WzBdO1xuICAgIH1cblxuICAgIGlmIChyZWN0WzFdID4gcmVjdFszXSkge1xuICAgICAgclsxXSA9IHJlY3RbM107XG4gICAgICByWzNdID0gcmVjdFsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIHN0YXRpYyBpbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJlZFggPSBbcmVjdDFbMF0sIHJlY3QxWzJdLCByZWN0MlswXSwgcmVjdDJbMl1dLnNvcnQoY29tcGFyZSk7XG4gICAgY29uc3Qgb3JkZXJlZFkgPSBbcmVjdDFbMV0sIHJlY3QxWzNdLCByZWN0MlsxXSwgcmVjdDJbM11dLnNvcnQoY29tcGFyZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgcmVjdDEgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDEpO1xuICAgIHJlY3QyID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QyKTtcblxuICAgIGlmIChvcmRlcmVkWFswXSA9PT0gcmVjdDFbMF0gJiYgb3JkZXJlZFhbMV0gPT09IHJlY3QyWzBdIHx8IG9yZGVyZWRYWzBdID09PSByZWN0MlswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDFbMF0pIHtcbiAgICAgIHJlc3VsdFswXSA9IG9yZGVyZWRYWzFdO1xuICAgICAgcmVzdWx0WzJdID0gb3JkZXJlZFhbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChvcmRlcmVkWVswXSA9PT0gcmVjdDFbMV0gJiYgb3JkZXJlZFlbMV0gPT09IHJlY3QyWzFdIHx8IG9yZGVyZWRZWzBdID09PSByZWN0MlsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDFbMV0pIHtcbiAgICAgIHJlc3VsdFsxXSA9IG9yZGVyZWRZWzFdO1xuICAgICAgcmVzdWx0WzNdID0gb3JkZXJlZFlbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5leHBvcnRzLlV0aWwgPSBVdGlsO1xuY29uc3QgUERGU3RyaW5nVHJhbnNsYXRlVGFibGUgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyRDgsIDB4MkM3LCAweDJDNiwgMHgyRDksIDB4MkRELCAweDJEQiwgMHgyREEsIDB4MkRDLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDIwMjIsIDB4MjAyMCwgMHgyMDIxLCAweDIwMjYsIDB4MjAxNCwgMHgyMDEzLCAweDE5MiwgMHgyMDQ0LCAweDIwMzksIDB4MjAzQSwgMHgyMjEyLCAweDIwMzAsIDB4MjAxRSwgMHgyMDFDLCAweDIwMUQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUEsIDB4MjEyMiwgMHhGQjAxLCAweEZCMDIsIDB4MTQxLCAweDE1MiwgMHgxNjAsIDB4MTc4LCAweDE3RCwgMHgxMzEsIDB4MTQyLCAweDE1MywgMHgxNjEsIDB4MTdFLCAwLCAweDIwQUNdO1xuXG5mdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhzdHIpIHtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aCxcbiAgICAgICAgc3RyQnVmID0gW107XG5cbiAgaWYgKHN0clswXSA9PT0gXCJcXHhGRVwiICYmIHN0clsxXSA9PT0gXCJcXHhGRlwiKSB7XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSArIDEpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0clswXSA9PT0gXCJcXHhGRlwiICYmIHN0clsxXSA9PT0gXCJcXHhGRVwiKSB7XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBsZW5ndGg7IGkgKz0gMikge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpICsgMSkgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KGkpKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZVtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICBzdHJCdWYucHVzaChjb2RlID8gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSA6IHN0ci5jaGFyQXQoaSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbXFwoXFwpXFxcXF0pL2csIFwiXFxcXCQxXCIpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHN0cikpO1xufVxuXG5mdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcoc3RyKSB7XG4gIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIGlzQm9vbCh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJib29sZWFuXCI7XG59XG5cbmZ1bmN0aW9uIGlzTnVtKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm51bWJlclwiO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmIHYuYnl0ZUxlbmd0aCAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5RXF1YWwoYXJyMSwgYXJyMikge1xuICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycjEuZXZlcnkoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgPT09IGFycjJbaW5kZXhdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9kaWZpY2F0aW9uRGF0ZShkYXRlID0gbmV3IERhdGUoRGF0ZS5ub3coKSkpIHtcbiAgY29uc3QgYnVmZmVyID0gW2RhdGUuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLCAoZGF0ZS5nZXRVVENNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIiksIChkYXRlLmdldFVUQ0RhdGUoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIiksIGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKV07XG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gIGNvbnN0IGNhcGFiaWxpdHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBsZXQgaXNTZXR0bGVkID0gZmFsc2U7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXBhYmlsaXR5LCBcInNldHRsZWRcIiwge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBpc1NldHRsZWQ7XG4gICAgfVxuXG4gIH0pO1xuICBjYXBhYmlsaXR5LnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY2FwYWJpbGl0eS5yZXNvbHZlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZXNvbHZlKGRhdGEpO1xuICAgIH07XG5cbiAgICBjYXBhYmlsaXR5LnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIGNhcGFiaWxpdHk7XG59XG5cbmNvbnN0IGNyZWF0ZU9iamVjdFVSTCA9IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTENsb3N1cmUoKSB7XG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChkYXRhLCBjb250ZW50VHlwZSwgZm9yY2VEYXRhU2NoZW1hID0gZmFsc2UpIHtcbiAgICBpZiAoIWZvcmNlRGF0YVNjaGVtYSAmJiBVUkwuY3JlYXRlT2JqZWN0VVJMKSB7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgIHR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIH1cblxuICAgIGxldCBidWZmZXIgPSBgZGF0YToke2NvbnRlbnRUeXBlfTtiYXNlNjQsYDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgICAgY29uc3QgYjEgPSBkYXRhW2ldICYgMHhmZjtcbiAgICAgIGNvbnN0IGIyID0gZGF0YVtpICsgMV0gJiAweGZmO1xuICAgICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgICBjb25zdCBkMSA9IGIxID4+IDIsXG4gICAgICAgICAgICBkMiA9IChiMSAmIDMpIDw8IDQgfCBiMiA+PiA0O1xuICAgICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgICAgY29uc3QgZDQgPSBpICsgMiA8IGlpID8gYjMgJiAweDNmIDogNjQ7XG4gICAgICBidWZmZXIgKz0gZGlnaXRzW2QxXSArIGRpZ2l0c1tkMl0gKyBkaWdpdHNbZDNdICsgZGlnaXRzW2Q0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9O1xufSgpO1xuXG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09IFwiYnJvd3NlclwiKTtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzID0gY2xlYXJQcmltaXRpdmVDYWNoZXM7XG5leHBvcnRzLmlzRU9GID0gaXNFT0Y7XG5leHBvcnRzLmlzQ21kID0gaXNDbWQ7XG5leHBvcnRzLmlzRGljdCA9IGlzRGljdDtcbmV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuZXhwb3J0cy5pc1JlZiA9IGlzUmVmO1xuZXhwb3J0cy5pc1JlZnNFcXVhbCA9IGlzUmVmc0VxdWFsO1xuZXhwb3J0cy5pc1N0cmVhbSA9IGlzU3RyZWFtO1xuZXhwb3J0cy5SZWZTZXRDYWNoZSA9IGV4cG9ydHMuUmVmU2V0ID0gZXhwb3J0cy5SZWYgPSBleHBvcnRzLk5hbWUgPSBleHBvcnRzLkRpY3QgPSBleHBvcnRzLkNtZCA9IGV4cG9ydHMuRU9GID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgRU9GID0ge307XG5leHBvcnRzLkVPRiA9IEVPRjtcblxudmFyIE5hbWUgPSBmdW5jdGlvbiBOYW1lQ2xvc3VyZSgpIHtcbiAgbGV0IG5hbWVDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZnVuY3Rpb24gTmFtZShuYW1lKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIE5hbWUucHJvdG90eXBlID0ge307XG5cbiAgTmFtZS5nZXQgPSBmdW5jdGlvbiBOYW1lX2dldChuYW1lKSB7XG4gICAgdmFyIG5hbWVWYWx1ZSA9IG5hbWVDYWNoZVtuYW1lXTtcbiAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gIH07XG5cbiAgTmFtZS5fY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBuYW1lQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9O1xuXG4gIHJldHVybiBOYW1lO1xufSgpO1xuXG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuXG52YXIgQ21kID0gZnVuY3Rpb24gQ21kQ2xvc3VyZSgpIHtcbiAgbGV0IGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmdW5jdGlvbiBDbWQoY21kKSB7XG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gIH1cblxuICBDbWQucHJvdG90eXBlID0ge307XG5cbiAgQ21kLmdldCA9IGZ1bmN0aW9uIENtZF9nZXQoY21kKSB7XG4gICAgdmFyIGNtZFZhbHVlID0gY21kQ2FjaGVbY21kXTtcbiAgICByZXR1cm4gY21kVmFsdWUgPyBjbWRWYWx1ZSA6IGNtZENhY2hlW2NtZF0gPSBuZXcgQ21kKGNtZCk7XG4gIH07XG5cbiAgQ21kLl9jbGVhckNhY2hlID0gZnVuY3Rpb24gKCkge1xuICAgIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfTtcblxuICByZXR1cm4gQ21kO1xufSgpO1xuXG5leHBvcnRzLkNtZCA9IENtZDtcblxudmFyIERpY3QgPSBmdW5jdGlvbiBEaWN0Q2xvc3VyZSgpIHtcbiAgdmFyIG5vblNlcmlhbGl6YWJsZSA9IGZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKSB7XG4gICAgcmV0dXJuIG5vblNlcmlhbGl6YWJsZTtcbiAgfTtcblxuICBmdW5jdGlvbiBEaWN0KHhyZWYpIHtcbiAgICB0aGlzLl9tYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5vYmpJZCA9IG51bGw7XG4gICAgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9fbm9uU2VyaWFsaXphYmxlX18gPSBub25TZXJpYWxpemFibGU7XG4gIH1cblxuICBEaWN0LnByb3RvdHlwZSA9IHtcbiAgICBhc3NpZ25YcmVmOiBmdW5jdGlvbiBEaWN0X2Fzc2lnblhyZWYobmV3WHJlZikge1xuICAgICAgdGhpcy54cmVmID0gbmV3WHJlZjtcbiAgICB9LFxuXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKS5sZW5ndGg7XG4gICAgfSxcblxuICAgIGdldChrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLl9tYXBba2V5MV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkzXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBc3luYyhrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLl9tYXBba2V5MV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGtleTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkzXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hBc3luYyh2YWx1ZSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGdldEFycmF5KGtleTEsIGtleTIsIGtleTMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0KGtleTEsIGtleTIsIGtleTMpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICF0aGlzLnhyZWYpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKCk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgaWYgKCEodmFsdWVbaV0gaW5zdGFuY2VvZiBSZWYpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZVtpXSA9IHRoaXMueHJlZi5mZXRjaCh2YWx1ZVtpXSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcblxuICAgIGdldFJhdzogZnVuY3Rpb24gRGljdF9nZXRSYXcoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwW2tleV07XG4gICAgfSxcbiAgICBnZXRLZXlzOiBmdW5jdGlvbiBEaWN0X2dldEtleXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbWFwKTtcbiAgICB9LFxuICAgIGdldFJhd1ZhbHVlczogZnVuY3Rpb24gRGljdF9nZXRSYXdWYWx1ZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9tYXApO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBEaWN0X3NldChrZXksIHZhbHVlKSB7XG4gICAgICB0aGlzLl9tYXBba2V5XSA9IHZhbHVlO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBEaWN0X2hhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXBba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gRGljdF9mb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fbWFwKSB7XG4gICAgICAgIGNhbGxiYWNrKGtleSwgdGhpcy5nZXQoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBEaWN0LmVtcHR5ID0gbmV3IERpY3QobnVsbCk7XG5cbiAgRGljdC5tZXJnZSA9IGZ1bmN0aW9uICh7XG4gICAgeHJlZixcbiAgICBkaWN0QXJyYXksXG4gICAgbWVyZ2VTdWJEaWN0cyA9IGZhbHNlXG4gIH0pIHtcbiAgICBjb25zdCBtZXJnZWREaWN0ID0gbmV3IERpY3QoeHJlZik7XG5cbiAgICBpZiAoIW1lcmdlU3ViRGljdHMpIHtcbiAgICAgIGZvciAoY29uc3QgZGljdCBvZiBkaWN0QXJyYXkpIHtcbiAgICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgICAgaWYgKG1lcmdlZERpY3QuX21hcFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1lcmdlZERpY3QuX21hcFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXJnZWREaWN0LnNpemUgPiAwID8gbWVyZ2VkRGljdCA6IERpY3QuZW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IG5ldyBNYXAoKTtcblxuICAgIGZvciAoY29uc3QgZGljdCBvZiBkaWN0QXJyYXkpIHtcbiAgICAgIGlmICghKGRpY3QgaW5zdGFuY2VvZiBEaWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGljdC5fbWFwKSkge1xuICAgICAgICBsZXQgcHJvcGVydHkgPSBwcm9wZXJ0aWVzLmdldChrZXkpO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHkgPSBbXTtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnNldChrZXksIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnR5LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlc10gb2YgcHJvcGVydGllcykge1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgfHwgISh2YWx1ZXNbMF0gaW5zdGFuY2VvZiBEaWN0KSkge1xuICAgICAgICBtZXJnZWREaWN0Ll9tYXBbbmFtZV0gPSB2YWx1ZXNbMF07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJEaWN0ID0gbmV3IERpY3QoeHJlZik7XG5cbiAgICAgIGZvciAoY29uc3QgZGljdCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgICAgaWYgKHN1YkRpY3QuX21hcFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN1YkRpY3QuX21hcFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJEaWN0LnNpemUgPiAwKSB7XG4gICAgICAgIG1lcmdlZERpY3QuX21hcFtuYW1lXSA9IHN1YkRpY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5jbGVhcigpO1xuICAgIHJldHVybiBtZXJnZWREaWN0LnNpemUgPiAwID8gbWVyZ2VkRGljdCA6IERpY3QuZW1wdHk7XG4gIH07XG5cbiAgcmV0dXJuIERpY3Q7XG59KCk7XG5cbmV4cG9ydHMuRGljdCA9IERpY3Q7XG5cbnZhciBSZWYgPSBmdW5jdGlvbiBSZWZDbG9zdXJlKCkge1xuICBsZXQgcmVmQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZ1bmN0aW9uIFJlZihudW0sIGdlbikge1xuICAgIHRoaXMubnVtID0gbnVtO1xuICAgIHRoaXMuZ2VuID0gZ2VuO1xuICB9XG5cbiAgUmVmLnByb3RvdHlwZSA9IHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gUmVmX3RvU3RyaW5nKCkge1xuICAgICAgaWYgKHRoaXMuZ2VuID09PSAwKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm51bX1SYDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke3RoaXMubnVtfVIke3RoaXMuZ2VufWA7XG4gICAgfVxuICB9O1xuXG4gIFJlZi5nZXQgPSBmdW5jdGlvbiAobnVtLCBnZW4pIHtcbiAgICBjb25zdCBrZXkgPSBnZW4gPT09IDAgPyBgJHtudW19UmAgOiBgJHtudW19UiR7Z2VufWA7XG4gICAgY29uc3QgcmVmVmFsdWUgPSByZWZDYWNoZVtrZXldO1xuICAgIHJldHVybiByZWZWYWx1ZSA/IHJlZlZhbHVlIDogcmVmQ2FjaGVba2V5XSA9IG5ldyBSZWYobnVtLCBnZW4pO1xuICB9O1xuXG4gIFJlZi5fY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZWZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIFJlZjtcbn0oKTtcblxuZXhwb3J0cy5SZWYgPSBSZWY7XG5cbmNsYXNzIFJlZlNldCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3NldCA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIGhhcyhyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0LmhhcyhyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdXQocmVmKSB7XG4gICAgdGhpcy5fc2V0LmFkZChyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICByZW1vdmUocmVmKSB7XG4gICAgdGhpcy5fc2V0LmRlbGV0ZShyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlJlZlNldCA9IFJlZlNldDtcblxuY2xhc3MgUmVmU2V0Q2FjaGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLnNpemU7XG4gIH1cblxuICBnZXQocmVmKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC5nZXQocmVmLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaGFzKHJlZikge1xuICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHJlZi50b1N0cmluZygpKTtcbiAgfVxuXG4gIHB1dChyZWYsIG9iaikge1xuICAgIHRoaXMuX21hcC5zZXQocmVmLnRvU3RyaW5nKCksIG9iaik7XG4gIH1cblxuICBwdXRBbGlhcyhyZWYsIGFsaWFzUmVmKSB7XG4gICAgdGhpcy5fbWFwLnNldChyZWYudG9TdHJpbmcoKSwgdGhpcy5nZXQoYWxpYXNSZWYpKTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMuX21hcC52YWx1ZXMoKSkge1xuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX21hcC5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZWZTZXRDYWNoZSA9IFJlZlNldENhY2hlO1xuXG5mdW5jdGlvbiBpc0VPRih2KSB7XG4gIHJldHVybiB2ID09PSBFT0Y7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZSh2LCBuYW1lKSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgTmFtZSAmJiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IHYubmFtZSA9PT0gbmFtZSk7XG59XG5cbmZ1bmN0aW9uIGlzQ21kKHYsIGNtZCkge1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIENtZCAmJiAoY21kID09PSB1bmRlZmluZWQgfHwgdi5jbWQgPT09IGNtZCk7XG59XG5cbmZ1bmN0aW9uIGlzRGljdCh2LCB0eXBlKSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgRGljdCAmJiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IGlzTmFtZSh2LmdldChcIlR5cGVcIiksIHR5cGUpKTtcbn1cblxuZnVuY3Rpb24gaXNSZWYodikge1xuICByZXR1cm4gdiBpbnN0YW5jZW9mIFJlZjtcbn1cblxuZnVuY3Rpb24gaXNSZWZzRXF1YWwodjEsIHYyKSB7XG4gIHJldHVybiB2MS5udW0gPT09IHYyLm51bSAmJiB2MS5nZW4gPT09IHYyLmdlbjtcbn1cblxuZnVuY3Rpb24gaXNTdHJlYW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiB2LmdldEJ5dGVzICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNsZWFyUHJpbWl0aXZlQ2FjaGVzKCkge1xuICBDbWQuX2NsZWFyQ2FjaGUoKTtcblxuICBOYW1lLl9jbGVhckNhY2hlKCk7XG5cbiAgUmVmLl9jbGVhckNhY2hlKCk7XG59XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OZXR3b3JrUGRmTWFuYWdlciA9IGV4cG9ydHMuTG9jYWxQZGZNYW5hZ2VyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NodW5rZWRfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg3KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF9kb2N1bWVudCA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbmNsYXNzIEJhc2VQZGZNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VQZGZNYW5hZ2VyKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZVBkZk1hbmFnZXIuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkb2NJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jSWQ7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bhc3N3b3JkO1xuICB9XG5cbiAgZ2V0IGRvY0Jhc2VVcmwoKSB7XG4gICAgbGV0IGRvY0Jhc2VVcmwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX2RvY0Jhc2VVcmwpIHtcbiAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHRoaXMuX2RvY0Jhc2VVcmwpO1xuXG4gICAgICBpZiAoYWJzb2x1dGVVcmwpIHtcbiAgICAgICAgZG9jQmFzZVVybCA9IGFic29sdXRlVXJsLmhyZWY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYEludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogXCIke3RoaXMuX2RvY0Jhc2VVcmx9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZG9jQmFzZVVybFwiLCBkb2NCYXNlVXJsKTtcbiAgfVxuXG4gIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYG9uTG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBlbnN1cmVEb2MocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTtcbiAgfVxuXG4gIGVuc3VyZVhSZWYocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsIHByb3AsIGFyZ3MpO1xuICB9XG5cbiAgZW5zdXJlQ2F0YWxvZyhwcm9wLCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZywgcHJvcCwgYXJncyk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTtcbiAgfVxuXG4gIGZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcik7XG4gIH1cblxuICBjbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgcmVxdWVzdFJhbmdlYCBjYWxsZWRcIik7XG4gIH1cblxuICByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RMb2FkZWRTdHJlYW1gIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHNlbmRQcm9ncmVzc2l2ZURhdGEoY2h1bmspIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBzZW5kUHJvZ3Jlc3NpdmVEYXRhYCBjYWxsZWRcIik7XG4gIH1cblxuICB1cGRhdGVQYXNzd29yZChwYXNzd29yZCkge1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gcGFzc3dvcmQ7XG4gIH1cblxuICB0ZXJtaW5hdGUocmVhc29uKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgdGVybWluYXRlYCBjYWxsZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbFBkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGRvY0lkLCBkYXRhLCBwYXNzd29yZCwgZXZhbHVhdG9yT3B0aW9ucywgZG9jQmFzZVVybCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIHRoaXMuX2RvY0Jhc2VVcmwgPSBkb2NCYXNlVXJsO1xuICAgIHRoaXMuZXZhbHVhdG9yT3B0aW9ucyA9IGV2YWx1YXRvck9wdGlvbnM7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEpO1xuICAgIHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgX2RvY3VtZW50LlBERkRvY3VtZW50KHRoaXMsIHN0cmVhbSk7XG4gICAgdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShzdHJlYW0pO1xuICB9XG5cbiAgYXN5bmMgZW5zdXJlKG9iaiwgcHJvcCwgYXJncykge1xuICAgIGNvbnN0IHZhbHVlID0gb2JqW3Byb3BdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdmFsdWUuYXBwbHkob2JqLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJlcXVlc3RMb2FkZWRTdHJlYW0oKSB7fVxuXG4gIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlO1xuICB9XG5cbiAgdGVybWluYXRlKHJlYXNvbikge31cblxufVxuXG5leHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IExvY2FsUGRmTWFuYWdlcjtcblxuY2xhc3MgTmV0d29ya1BkZk1hbmFnZXIgZXh0ZW5kcyBCYXNlUGRmTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKGRvY0lkLCBwZGZOZXR3b3JrU3RyZWFtLCBhcmdzLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kb2NJZCA9IGRvY0lkO1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gYXJncy5wYXNzd29yZDtcbiAgICB0aGlzLl9kb2NCYXNlVXJsID0gZG9jQmFzZVVybDtcbiAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gZXZhbHVhdG9yT3B0aW9ucztcbiAgICB0aGlzLnN0cmVhbU1hbmFnZXIgPSBuZXcgX2NodW5rZWRfc3RyZWFtLkNodW5rZWRTdHJlYW1NYW5hZ2VyKHBkZk5ldHdvcmtTdHJlYW0sIHtcbiAgICAgIG1zZ0hhbmRsZXI6IGFyZ3MubXNnSGFuZGxlcixcbiAgICAgIGxlbmd0aDogYXJncy5sZW5ndGgsXG4gICAgICBkaXNhYmxlQXV0b0ZldGNoOiBhcmdzLmRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICByYW5nZUNodW5rU2l6ZTogYXJncy5yYW5nZUNodW5rU2l6ZVxuICAgIH0pO1xuICAgIHRoaXMucGRmRG9jdW1lbnQgPSBuZXcgX2RvY3VtZW50LlBERkRvY3VtZW50KHRoaXMsIHRoaXMuc3RyZWFtTWFuYWdlci5nZXRTdHJlYW0oKSk7XG4gIH1cblxuICBhc3luYyBlbnN1cmUob2JqLCBwcm9wLCBhcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW3Byb3BdO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdFJhbmdlKGV4LmJlZ2luLCBleC5lbmQpO1xuICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlKG9iaiwgcHJvcCwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKTtcbiAgfVxuXG4gIHJlcXVlc3RMb2FkZWRTdHJlYW0oKSB7XG4gICAgdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RBbGxDaHVua3MoKTtcbiAgfVxuXG4gIHNlbmRQcm9ncmVzc2l2ZURhdGEoY2h1bmspIHtcbiAgICB0aGlzLnN0cmVhbU1hbmFnZXIub25SZWNlaXZlRGF0YSh7XG4gICAgICBjaHVua1xuICAgIH0pO1xuICB9XG5cbiAgb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5vbkxvYWRlZFN0cmVhbSgpO1xuICB9XG5cbiAgdGVybWluYXRlKHJlYXNvbikge1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChyZWFzb24pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5OZXR3b3JrUGRmTWFuYWdlciA9IE5ldHdvcmtQZGZNYW5hZ2VyO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2h1bmtlZFN0cmVhbU1hbmFnZXIgPSBleHBvcnRzLkNodW5rZWRTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIENodW5rZWRTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihsZW5ndGgsIGNodW5rU2l6ZSwgbWFuYWdlcikge1xuICAgIHRoaXMuYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIHRoaXMuc3RhcnQgPSAwO1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLmVuZCA9IGxlbmd0aDtcbiAgICB0aGlzLmNodW5rU2l6ZSA9IGNodW5rU2l6ZTtcbiAgICB0aGlzLl9sb2FkZWRDaHVua3MgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5udW1DaHVua3MgPSBNYXRoLmNlaWwobGVuZ3RoIC8gY2h1bmtTaXplKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gLTE7XG4gIH1cblxuICBnZXRNaXNzaW5nQ2h1bmtzKCkge1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgPSAwLCBuID0gdGhpcy5udW1DaHVua3M7IGNodW5rIDwgbjsgKytjaHVuaykge1xuICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkge1xuICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNodW5rcztcbiAgfVxuXG4gIGdldEJhc2VTdHJlYW1zKCkge1xuICAgIHJldHVybiBbdGhpc107XG4gIH1cblxuICBnZXQgbnVtQ2h1bmtzTG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkZWRDaHVua3Muc2l6ZTtcbiAgfVxuXG4gIGFsbENodW5rc0xvYWRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQgPT09IHRoaXMubnVtQ2h1bmtzO1xuICB9XG5cbiAgb25SZWNlaXZlRGF0YShiZWdpbiwgY2h1bmspIHtcbiAgICBjb25zdCBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcblxuICAgIGlmIChiZWdpbiAlIGNodW5rU2l6ZSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYmVnaW4gb2Zmc2V0OiAke2JlZ2lufWApO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZCA9IGJlZ2luICsgY2h1bmsuYnl0ZUxlbmd0aDtcblxuICAgIGlmIChlbmQgJSBjaHVua1NpemUgIT09IDAgJiYgZW5kICE9PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgZW5kIG9mZnNldDogJHtlbmR9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5ieXRlcy5zZXQobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCBiZWdpbik7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyBjaHVua1NpemUpO1xuICAgIGNvbnN0IGVuZENodW5rID0gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyBjaHVua1NpemUpICsgMTtcblxuICAgIGZvciAobGV0IGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChjdXJDaHVuayk7XG4gICAgfVxuICB9XG5cbiAgb25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGRhdGEpIHtcbiAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihwb3NpdGlvbiAvIHRoaXMuY2h1bmtTaXplKTtcbiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShkYXRhKSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uICs9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCA9IHBvc2l0aW9uO1xuICAgIGNvbnN0IGVuZENodW5rID0gcG9zaXRpb24gPj0gdGhpcy5lbmQgPyB0aGlzLm51bUNodW5rcyA6IE1hdGguZmxvb3IocG9zaXRpb24gLyB0aGlzLmNodW5rU2l6ZSk7XG5cbiAgICBmb3IgKGxldCBjdXJDaHVuayA9IGJlZ2luQ2h1bms7IGN1ckNodW5rIDwgZW5kQ2h1bms7ICsrY3VyQ2h1bmspIHtcbiAgICAgIHRoaXMuX2xvYWRlZENodW5rcy5hZGQoY3VyQ2h1bmspO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZUJ5dGUocG9zKSB7XG4gICAgaWYgKHBvcyA8IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBNYXRoLmZsb29yKHBvcyAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChjaHVuayA9PT0gdGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuaykpIHtcbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbihwb3MsIHBvcyArIDEpO1xuICAgIH1cblxuICAgIHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmsgPSBjaHVuaztcbiAgfVxuXG4gIGVuc3VyZVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoYmVnaW4gPj0gZW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVuZCA8PSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKGJlZ2luIC8gY2h1bmtTaXplKTtcbiAgICBjb25zdCBlbmRDaHVuayA9IE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gY2h1bmtTaXplKSArIDE7XG5cbiAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgIGlmICghdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGJlZ2luLCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5leHRFbXB0eUNodW5rKGJlZ2luQ2h1bmspIHtcbiAgICBjb25zdCBudW1DaHVua3MgPSB0aGlzLm51bUNodW5rcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ2h1bmtzOyArK2kpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gKGJlZ2luQ2h1bmsgKyBpKSAlIG51bUNodW5rcztcblxuICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkge1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBoYXNDaHVuayhjaHVuaykge1xuICAgIHJldHVybiB0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5zdGFydDtcbiAgfVxuXG4gIGdldCBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGdldEJ5dGUoKSB7XG4gICAgY29uc3QgcG9zID0gdGhpcy5wb3M7XG5cbiAgICBpZiAocG9zID49IHRoaXMuZW5kKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVCeXRlKHBvcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnl0ZXNbdGhpcy5wb3MrK107XG4gIH1cblxuICBnZXRVaW50MTYoKSB7XG4gICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKGIwID09PSAtMSB8fCBiMSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gIH1cblxuICBnZXRJbnQzMigpIHtcbiAgICBjb25zdCBiMCA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IGIxID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMyA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyRW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gYnl0ZXMuc3ViYXJyYXkocG9zLCBzdHJFbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICB9XG5cbiAgICBsZXQgZW5kID0gcG9zICsgbGVuZ3RoO1xuXG4gICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgZW5kID0gc3RyRW5kO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIHBlZWtCeXRlKCkge1xuICAgIGNvbnN0IHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChwZWVrZWRCeXRlICE9PSAtMSkge1xuICAgICAgdGhpcy5wb3MtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVla2VkQnl0ZTtcbiAgfVxuXG4gIHBlZWtCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYnl0ZXMgPSB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkKTtcbiAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9XG5cbiAgZ2V0Qnl0ZVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICBiZWdpbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMuZW5kKSB7XG4gICAgICBlbmQgPSB0aGlzLmVuZDtcbiAgICB9XG5cbiAgICBpZiAoZW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlUmFuZ2UoYmVnaW4sIGVuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoYmVnaW4sIGVuZCk7XG4gIH1cblxuICBza2lwKG4pIHtcbiAgICBpZiAoIW4pIHtcbiAgICAgIG4gPSAxO1xuICAgIH1cblxuICAgIHRoaXMucG9zICs9IG47XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gIH1cblxuICBtb3ZlU3RhcnQoKSB7XG4gICAgdGhpcy5zdGFydCA9IHRoaXMucG9zO1xuICB9XG5cbiAgbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0KSB7XG4gICAgaWYgKGxlbmd0aCkge1xuICAgICAgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQgPj0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVCeXRlKHN0YXJ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCkge31cblxuICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcblxuICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcbiAgICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQgLyBjaHVua1NpemUpO1xuICAgICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKCh0aGlzLmVuZCAtIDEpIC8gY2h1bmtTaXplKSArIDE7XG4gICAgICBjb25zdCBtaXNzaW5nQ2h1bmtzID0gW107XG5cbiAgICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICAgICAgbWlzc2luZ0NodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWlzc2luZ0NodW5rcztcbiAgICB9O1xuXG4gICAgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUuYWxsQ2h1bmtzTG9hZGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMubnVtQ2h1bmtzTG9hZGVkID09PSB0aGlzLm51bUNodW5rcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ0NodW5rcygpLmxlbmd0aCA9PT0gMDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3ViU3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKTtcbiAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3ViU3RyZWFtLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuZW5kO1xuICAgIHN1YlN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICByZXR1cm4gc3ViU3RyZWFtO1xuICB9XG5cbn1cblxuZXhwb3J0cy5DaHVua2VkU3RyZWFtID0gQ2h1bmtlZFN0cmVhbTtcblxuY2xhc3MgQ2h1bmtlZFN0cmVhbU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihwZGZOZXR3b3JrU3RyZWFtLCBhcmdzKSB7XG4gICAgdGhpcy5sZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICB0aGlzLmNodW5rU2l6ZSA9IGFyZ3MucmFuZ2VDaHVua1NpemU7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCwgdGhpcy5jaHVua1NpemUsIHRoaXMpO1xuICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbSA9IHBkZk5ldHdvcmtTdHJlYW07XG4gICAgdGhpcy5kaXNhYmxlQXV0b0ZldGNoID0gYXJncy5kaXNhYmxlQXV0b0ZldGNoO1xuICAgIHRoaXMubXNnSGFuZGxlciA9IGFyZ3MubXNnSGFuZGxlcjtcbiAgICB0aGlzLmN1cnJSZXF1ZXN0SWQgPSAwO1xuICAgIHRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSAwO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gIH1cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkge1xuICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpO1xuXG4gICAgaWYgKCFyYW5nZVJlYWRlci5pc1N0cmVhbWluZ1N1cHBvcnRlZCkge1xuICAgICAgcmFuZ2VSZWFkZXIub25Qcm9ncmVzcyA9IHRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBjaHVua3MgPSBbXSxcbiAgICAgICAgbG9hZGVkID0gMDtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZENodW5rID0gY2h1bmsgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghY2h1bmsuZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGNodW5rLnZhbHVlO1xuICAgICAgICAgICAgY2h1bmtzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICBsb2FkZWQgKz0gKDAsIF91dGlsLmFycmF5Qnl0ZUxlbmd0aCkoZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChyYW5nZVJlYWRlci5pc1N0cmVhbWluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgIGxvYWRlZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmFuZ2VSZWFkZXIucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNodW5rRGF0YSA9ICgwLCBfdXRpbC5hcnJheXNUb0J5dGVzKShjaHVua3MpO1xuICAgICAgICAgIGNodW5rcyA9IG51bGw7XG4gICAgICAgICAgcmVzb2x2ZShjaHVua0RhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgfSk7XG4gICAgcHJvbWlzZS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25SZWNlaXZlRGF0YSh7XG4gICAgICAgIGNodW5rOiBkYXRhLFxuICAgICAgICBiZWdpblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXF1ZXN0QWxsQ2h1bmtzKCkge1xuICAgIGNvbnN0IG1pc3NpbmdDaHVua3MgPSB0aGlzLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0Q2h1bmtzKG1pc3NpbmdDaHVua3MpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIF9yZXF1ZXN0Q2h1bmtzKGNodW5rcykge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMuY3VyclJlcXVlc3RJZCsrO1xuICAgIGNvbnN0IGNodW5rc05lZWRlZCA9IG5ldyBTZXQoKTtcblxuICAgIHRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5zZXQocmVxdWVzdElkLCBjaHVua3NOZWVkZWQpO1xuXG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIGlmICghdGhpcy5zdHJlYW0uaGFzQ2h1bmsoY2h1bmspKSB7XG4gICAgICAgIGNodW5rc05lZWRlZC5hZGQoY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaHVua3NOZWVkZWQuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQocmVxdWVzdElkLCBjYXBhYmlsaXR5KTtcblxuICAgIGNvbnN0IGNodW5rc1RvUmVxdWVzdCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3NOZWVkZWQpIHtcbiAgICAgIGxldCByZXF1ZXN0SWRzID0gdGhpcy5fcmVxdWVzdHNCeUNodW5rLmdldChjaHVuayk7XG5cbiAgICAgIGlmICghcmVxdWVzdElkcykge1xuICAgICAgICByZXF1ZXN0SWRzID0gW107XG5cbiAgICAgICAgdGhpcy5fcmVxdWVzdHNCeUNodW5rLnNldChjaHVuaywgcmVxdWVzdElkcyk7XG5cbiAgICAgICAgY2h1bmtzVG9SZXF1ZXN0LnB1c2goY2h1bmspO1xuICAgICAgfVxuXG4gICAgICByZXF1ZXN0SWRzLnB1c2gocmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICBpZiAoY2h1bmtzVG9SZXF1ZXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdyb3VwZWRDaHVua3NUb1JlcXVlc3QgPSB0aGlzLmdyb3VwQ2h1bmtzKGNodW5rc1RvUmVxdWVzdCk7XG5cbiAgICAgIGZvciAoY29uc3QgZ3JvdXBlZENodW5rIG9mIGdyb3VwZWRDaHVua3NUb1JlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgYmVnaW4gPSBncm91cGVkQ2h1bmsuYmVnaW5DaHVuayAqIHRoaXMuY2h1bmtTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihncm91cGVkQ2h1bmsuZW5kQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZSwgdGhpcy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2UuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMubGVuZ3RoKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gdGhpcy5nZXRCZWdpbkNodW5rKGJlZ2luKTtcbiAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsoZW5kKTtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcblxuICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2VzKHJhbmdlcyA9IFtdKSB7XG4gICAgY29uc3QgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHJhbmdlcykge1xuICAgICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7XG4gICAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsocmFuZ2UuZW5kKTtcblxuICAgICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgIGlmICghY2h1bmtzVG9SZXF1ZXN0LmluY2x1ZGVzKGNodW5rKSkge1xuICAgICAgICAgIGNodW5rc1RvUmVxdWVzdC5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNodW5rc1RvUmVxdWVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcbiAgfVxuXG4gIGdyb3VwQ2h1bmtzKGNodW5rcykge1xuICAgIGNvbnN0IGdyb3VwZWRDaHVua3MgPSBbXTtcbiAgICBsZXQgYmVnaW5DaHVuayA9IC0xO1xuICAgIGxldCBwcmV2Q2h1bmsgPSAtMTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTtcblxuICAgICAgaWYgKGJlZ2luQ2h1bmsgPCAwKSB7XG4gICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaHVuayA+PSAwICYmIHByZXZDaHVuayArIDEgIT09IGNodW5rKSB7XG4gICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgYmVnaW5DaHVuayxcbiAgICAgICAgICBlbmRDaHVuazogcHJldkNodW5rICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgYmVnaW5DaHVuayA9IGNodW5rO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSArIDEgPT09IGNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHtcbiAgICAgICAgICBiZWdpbkNodW5rLFxuICAgICAgICAgIGVuZENodW5rOiBjaHVuayArIDFcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByZXZDaHVuayA9IGNodW5rO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cGVkQ2h1bmtzO1xuICB9XG5cbiAgb25Qcm9ncmVzcyhhcmdzKSB7XG4gICAgdGhpcy5tc2dIYW5kbGVyLnNlbmQoXCJEb2NQcm9ncmVzc1wiLCB7XG4gICAgICBsb2FkZWQ6IHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCAqIHRoaXMuY2h1bmtTaXplICsgYXJncy5sb2FkZWQsXG4gICAgICB0b3RhbDogdGhpcy5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVjZWl2ZURhdGEoYXJncykge1xuICAgIGNvbnN0IGNodW5rID0gYXJncy5jaHVuaztcbiAgICBjb25zdCBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJlZ2luID0gaXNQcm9ncmVzc2l2ZSA/IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIDogYXJncy5iZWdpbjtcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBlbmQgPCB0aGlzLmxlbmd0aCA/IE1hdGguZmxvb3IoZW5kIC8gdGhpcy5jaHVua1NpemUpIDogTWF0aC5jZWlsKGVuZCAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChpc1Byb2dyZXNzaXZlKSB7XG4gICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoY2h1bmspO1xuICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEoYmVnaW4sIGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdHJlYW0uYWxsQ2h1bmtzTG9hZGVkKCkpIHtcbiAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVkUmVxdWVzdHMgPSBbXTtcblxuICAgIGZvciAobGV0IGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgY29uc3QgcmVxdWVzdElkcyA9IHRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoY3VyQ2h1bmspO1xuXG4gICAgICBpZiAoIXJlcXVlc3RJZHMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUoY3VyQ2h1bmspO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiByZXF1ZXN0SWRzKSB7XG4gICAgICAgIGNvbnN0IGNodW5rc05lZWRlZCA9IHRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQocmVxdWVzdElkKTtcblxuICAgICAgICBpZiAoY2h1bmtzTmVlZGVkLmhhcyhjdXJDaHVuaykpIHtcbiAgICAgICAgICBjaHVua3NOZWVkZWQuZGVsZXRlKGN1ckNodW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua3NOZWVkZWQuc2l6ZSA+IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWRlZFJlcXVlc3RzLnB1c2gocmVxdWVzdElkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCAmJiB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2l6ZSA9PT0gMCkge1xuICAgICAgbGV0IG5leHRFbXB0eUNodW5rO1xuXG4gICAgICBpZiAodGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDaHVuayA9IHRoaXMuc3RyZWFtLm51bUNodW5rcyAtIDE7XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhsYXN0Q2h1bmspKSB7XG4gICAgICAgICAgbmV4dEVtcHR5Q2h1bmsgPSBsYXN0Q2h1bms7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRFbXB0eUNodW5rID0gdGhpcy5zdHJlYW0ubmV4dEVtcHR5Q2h1bmsoZW5kQ2h1bmspO1xuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihuZXh0RW1wdHlDaHVuaykpIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENodW5rcyhbbmV4dEVtcHR5Q2h1bmtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RJZCBvZiBsb2FkZWRSZXF1ZXN0cykge1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmdldChyZXF1ZXN0SWQpO1xuXG4gICAgICB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5kZWxldGUocmVxdWVzdElkKTtcblxuICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tc2dIYW5kbGVyLnNlbmQoXCJEb2NQcm9ncmVzc1wiLCB7XG4gICAgICBsb2FkZWQ6IHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCAqIHRoaXMuY2h1bmtTaXplLFxuICAgICAgdG90YWw6IHRoaXMubGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICBvbkVycm9yKGVycikge1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGVycik7XG4gIH1cblxuICBnZXRCZWdpbkNodW5rKGJlZ2luKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gIH1cblxuICBnZXRFbmRDaHVuayhlbmQpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyB0aGlzLmNodW5rU2l6ZSkgKyAxO1xuICB9XG5cbiAgYWJvcnQocmVhc29uKSB7XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnBkZk5ldHdvcmtTdHJlYW0pIHtcbiAgICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSkge1xuICAgICAgY2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkNodW5rZWRTdHJlYW1NYW5hZ2VyID0gQ2h1bmtlZFN0cmVhbU1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBnZXRMb29rdXBUYWJsZUZhY3Rvcnk7XG5leHBvcnRzLmdldEluaGVyaXRhYmxlUHJvcGVydHkgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5O1xuZXhwb3J0cy50b1JvbWFuTnVtZXJhbHMgPSB0b1JvbWFuTnVtZXJhbHM7XG5leHBvcnRzLmxvZzIgPSBsb2cyO1xuZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbmV4cG9ydHMucmVhZFVpbnQzMiA9IHJlYWRVaW50MzI7XG5leHBvcnRzLmlzV2hpdGVTcGFjZSA9IGlzV2hpdGVTcGFjZTtcbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgbGV0IGxvb2t1cDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGxvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBpbml0aWFsaXplcihsb29rdXApO1xuICAgICAgaW5pdGlhbGl6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb29rdXA7XG4gIH07XG59XG5cbmNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQpIHtcbiAgICBzdXBlcihgTWlzc2luZyBkYXRhIFske2JlZ2lufSwgJHtlbmR9KWApO1xuICAgIHRoaXMuYmVnaW4gPSBiZWdpbjtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcblxuY2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLlhSZWZFbnRyeUV4Y2VwdGlvbiA9IFhSZWZFbnRyeUV4Y2VwdGlvbjtcblxuY2xhc3MgWFJlZlBhcnNlRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7fVxuXG5leHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7XG4gIGRpY3QsXG4gIGtleSxcbiAgZ2V0QXJyYXkgPSBmYWxzZSxcbiAgc3RvcFdoZW5Gb3VuZCA9IHRydWVcbn0pIHtcbiAgY29uc3QgTE9PUF9MSU1JVCA9IDEwMDtcbiAgbGV0IGxvb3BDb3VudCA9IDA7XG4gIGxldCB2YWx1ZXM7XG5cbiAgd2hpbGUgKGRpY3QpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEFycmF5ID8gZGljdC5nZXRBcnJheShrZXkpIDogZGljdC5nZXQoa2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoc3RvcFdoZW5Gb3VuZCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKCsrbG9vcENvdW50ID4gTE9PUF9MSU1JVCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRJbmhlcml0YWJsZVByb3BlcnR5OiBtYXhpbXVtIGxvb3AgY291bnQgZXhjZWVkZWQgZm9yIFwiJHtrZXl9XCJgKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRpY3QgPSBkaWN0LmdldChcIlBhcmVudFwiKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmNvbnN0IFJPTUFOX05VTUJFUl9NQVAgPSBbXCJcIiwgXCJDXCIsIFwiQ0NcIiwgXCJDQ0NcIiwgXCJDRFwiLCBcIkRcIiwgXCJEQ1wiLCBcIkRDQ1wiLCBcIkRDQ0NcIiwgXCJDTVwiLCBcIlwiLCBcIlhcIiwgXCJYWFwiLCBcIlhYWFwiLCBcIlhMXCIsIFwiTFwiLCBcIkxYXCIsIFwiTFhYXCIsIFwiTFhYWFwiLCBcIlhDXCIsIFwiXCIsIFwiSVwiLCBcIklJXCIsIFwiSUlJXCIsIFwiSVZcIiwgXCJWXCIsIFwiVklcIiwgXCJWSUlcIiwgXCJWSUlJXCIsIFwiSVhcIl07XG5cbmZ1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhudW1iZXIsIGxvd2VyQ2FzZSA9IGZhbHNlKSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKE51bWJlci5pc0ludGVnZXIobnVtYmVyKSAmJiBudW1iZXIgPiAwLCBcIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci5cIik7XG4gIGNvbnN0IHJvbWFuQnVmID0gW107XG4gIGxldCBwb3M7XG5cbiAgd2hpbGUgKG51bWJlciA+PSAxMDAwKSB7XG4gICAgbnVtYmVyIC09IDEwMDA7XG4gICAgcm9tYW5CdWYucHVzaChcIk1cIik7XG4gIH1cblxuICBwb3MgPSBudW1iZXIgLyAxMDAgfCAwO1xuICBudW1iZXIgJT0gMTAwO1xuICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbcG9zXSk7XG4gIHBvcyA9IG51bWJlciAvIDEwIHwgMDtcbiAgbnVtYmVyICU9IDEwO1xuICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMTAgKyBwb3NdKTtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzIwICsgbnVtYmVyXSk7XG4gIGNvbnN0IHJvbWFuU3RyID0gcm9tYW5CdWYuam9pbihcIlwiKTtcbiAgcmV0dXJuIGxvd2VyQ2FzZSA/IHJvbWFuU3RyLnRvTG93ZXJDYXNlKCkgOiByb21hblN0cjtcbn1cblxuZnVuY3Rpb24gbG9nMih4KSB7XG4gIGlmICh4IDw9IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cyKHgpKTtcbn1cblxuZnVuY3Rpb24gcmVhZEludDgoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgPj4gMjQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRVaW50MTYoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG59XG5cbmZ1bmN0aW9uIHJlYWRVaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiAoZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM10pID4+PiAwO1xufVxuXG5mdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gpIHtcbiAgcmV0dXJuIGNoID09PSAweDIwIHx8IGNoID09PSAweDA5IHx8IGNoID09PSAweDBkIHx8IGNoID09PSAweDBhO1xufVxuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUERGRG9jdW1lbnQgPSBleHBvcnRzLlBhZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfb2JqID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfYW5ub3RhdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX2NyeXB0byA9IF9fd19wZGZqc19yZXF1aXJlX18oMjIpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTEpO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI2KTtcblxudmFyIF9ldmFsdWF0b3IgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI4KTtcblxuY29uc3QgREVGQVVMVF9VU0VSX1VOSVQgPSAxLjA7XG5jb25zdCBMRVRURVJfU0laRV9NRURJQUJPWCA9IFswLCAwLCA2MTIsIDc5Ml07XG5cbmZ1bmN0aW9uIGlzQW5ub3RhdGlvblJlbmRlcmFibGUoYW5ub3RhdGlvbiwgaW50ZW50KSB7XG4gIHJldHVybiBpbnRlbnQgPT09IFwiZGlzcGxheVwiICYmIGFubm90YXRpb24udmlld2FibGUgfHwgaW50ZW50ID09PSBcInByaW50XCIgJiYgYW5ub3RhdGlvbi5wcmludGFibGU7XG59XG5cbmNsYXNzIFBhZ2Uge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgcGRmTWFuYWdlcixcbiAgICB4cmVmLFxuICAgIHBhZ2VJbmRleCxcbiAgICBwYWdlRGljdCxcbiAgICByZWYsXG4gICAgZ2xvYmFsSWRGYWN0b3J5LFxuICAgIGZvbnRDYWNoZSxcbiAgICBidWlsdEluQ01hcENhY2hlLFxuICAgIGdsb2JhbEltYWdlQ2FjaGVcbiAgfSkge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlRGljdCA9IHBhZ2VEaWN0O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gICAgdGhpcy5mb250Q2FjaGUgPSBmb250Q2FjaGU7XG4gICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUgPSBnbG9iYWxJbWFnZUNhY2hlO1xuICAgIHRoaXMuZXZhbHVhdG9yT3B0aW9ucyA9IHBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9ucztcbiAgICB0aGlzLnJlc291cmNlc1Byb21pc2UgPSBudWxsO1xuICAgIGNvbnN0IGlkQ291bnRlcnMgPSB7XG4gICAgICBvYmo6IDBcbiAgICB9O1xuICAgIHRoaXMuX2xvY2FsSWRGYWN0b3J5ID0gY2xhc3MgZXh0ZW5kcyBnbG9iYWxJZEZhY3Rvcnkge1xuICAgICAgc3RhdGljIGNyZWF0ZU9iaklkKCkge1xuICAgICAgICByZXR1cm4gYHAke3BhZ2VJbmRleH1fJHsrK2lkQ291bnRlcnMub2JqfWA7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgX2dldEluaGVyaXRhYmxlUHJvcGVydHkoa2V5LCBnZXRBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdDogdGhpcy5wYWdlRGljdCxcbiAgICAgIGtleSxcbiAgICAgIGdldEFycmF5LFxuICAgICAgc3RvcFdoZW5Gb3VuZDogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZVswXSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBkaWN0QXJyYXk6IHZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlRGljdC5nZXQoXCJDb250ZW50c1wiKTtcbiAgfVxuXG4gIGdldCByZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicmVzb3VyY2VzXCIsIHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJSZXNvdXJjZXNcIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eSk7XG4gIH1cblxuICBfZ2V0Qm91bmRpbmdCb3gobmFtZSkge1xuICAgIGNvbnN0IGJveCA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkobmFtZSwgdHJ1ZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShib3gpICYmIGJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIGlmIChib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBib3g7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgRW1wdHkgLyR7bmFtZX0gZW50cnkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbWVkaWFCb3goKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibWVkaWFCb3hcIiwgdGhpcy5fZ2V0Qm91bmRpbmdCb3goXCJNZWRpYUJveFwiKSB8fCBMRVRURVJfU0laRV9NRURJQUJPWCk7XG4gIH1cblxuICBnZXQgY3JvcEJveCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjcm9wQm94XCIsIHRoaXMuX2dldEJvdW5kaW5nQm94KFwiQ3JvcEJveFwiKSB8fCB0aGlzLm1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCB1c2VyVW5pdCgpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5wYWdlRGljdC5nZXQoXCJVc2VyVW5pdFwiKTtcblxuICAgIGlmICghKDAsIF91dGlsLmlzTnVtKShvYmopIHx8IG9iaiA8PSAwKSB7XG4gICAgICBvYmogPSBERUZBVUxUX1VTRVJfVU5JVDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ1c2VyVW5pdFwiLCBvYmopO1xuICB9XG5cbiAgZ2V0IHZpZXcoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JvcEJveCxcbiAgICAgIG1lZGlhQm94XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IHZpZXc7XG5cbiAgICBpZiAoY3JvcEJveCA9PT0gbWVkaWFCb3ggfHwgKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkoY3JvcEJveCwgbWVkaWFCb3gpKSB7XG4gICAgICB2aWV3ID0gbWVkaWFCb3g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJveCA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGNyb3BCb3gsIG1lZGlhQm94KTtcblxuICAgICAgaWYgKGJveCAmJiBib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHZpZXcgPSBib3g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbXB0eSAvQ3JvcEJveCBhbmQgL01lZGlhQm94IGludGVyc2VjdGlvbi5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidmlld1wiLCB2aWV3IHx8IG1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCByb3RhdGUoKSB7XG4gICAgbGV0IHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJSb3RhdGVcIikgfHwgMDtcblxuICAgIGlmIChyb3RhdGUgJSA5MCAhPT0gMCkge1xuICAgICAgcm90YXRlID0gMDtcbiAgICB9IGVsc2UgaWYgKHJvdGF0ZSA+PSAzNjApIHtcbiAgICAgIHJvdGF0ZSA9IHJvdGF0ZSAlIDM2MDtcbiAgICB9IGVsc2UgaWYgKHJvdGF0ZSA8IDApIHtcbiAgICAgIHJvdGF0ZSA9IChyb3RhdGUgJSAzNjAgKyAzNjApICUgMzYwO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInJvdGF0ZVwiLCByb3RhdGUpO1xuICB9XG5cbiAgZ2V0Q29udGVudFN0cmVhbSgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50O1xuICAgIGxldCBzdHJlYW07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50KSkge1xuICAgICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgIGNvbnN0IHN0cmVhbXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBzdWJTdHJlYW0gb2YgY29udGVudCkge1xuICAgICAgICBzdHJlYW1zLnB1c2goeHJlZi5mZXRjaElmUmVmKHN1YlN0cmVhbSkpO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJlYW1zU2VxdWVuY2VTdHJlYW0oc3RyZWFtcyk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNvbnRlbnQpKSB7XG4gICAgICBzdHJlYW0gPSBjb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbS5OdWxsU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIHNhdmUoaGFuZGxlciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksXG4gICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogdGhpcy5nbG9iYWxJbWFnZUNhY2hlLFxuICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBuZXdSZWZzUHJvbWlzZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25zKSB7XG4gICAgICAgIGlmICghaXNBbm5vdGF0aW9uUmVuZGVyYWJsZShhbm5vdGF0aW9uLCBcInByaW50XCIpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdSZWZzUHJvbWlzZXMucHVzaChhbm5vdGF0aW9uLnNhdmUocGFydGlhbEV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyBcIiArIGBcIiR7dGFzay5uYW1lfVwiIHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG5ld1JlZnNQcm9taXNlcyk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKGtleXMpIHtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2VzUHJvbWlzZSkge1xuICAgICAgdGhpcy5yZXNvdXJjZXNQcm9taXNlID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcInJlc291cmNlc1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmouT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLCBrZXlzLCB0aGlzLnhyZWYpO1xuICAgICAgcmV0dXJuIG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIGhhbmRsZXIsXG4gICAgc2luayxcbiAgICB0YXNrLFxuICAgIGludGVudCxcbiAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zLFxuICAgIGFubm90YXRpb25TdG9yYWdlXG4gIH0pIHtcbiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgXCJnZXRDb250ZW50U3RyZWFtXCIpO1xuICAgIGNvbnN0IHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoW1wiRXh0R1N0YXRlXCIsIFwiQ29sb3JTcGFjZVwiLCBcIlBhdHRlcm5cIiwgXCJTaGFkaW5nXCIsIFwiWE9iamVjdFwiLCBcIkZvbnRcIl0pO1xuICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgX2V2YWx1YXRvci5QYXJ0aWFsRXZhbHVhdG9yKHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGhhbmRsZXIsXG4gICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgaWRGYWN0b3J5OiB0aGlzLl9sb2NhbElkRmFjdG9yeSxcbiAgICAgIGZvbnRDYWNoZTogdGhpcy5mb250Q2FjaGUsXG4gICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICBnbG9iYWxJbWFnZUNhY2hlOiB0aGlzLmdsb2JhbEltYWdlQ2FjaGUsXG4gICAgICBvcHRpb25zOiB0aGlzLmV2YWx1YXRvck9wdGlvbnNcbiAgICB9KTtcbiAgICBjb25zdCBkYXRhUHJvbWlzZXMgPSBQcm9taXNlLmFsbChbY29udGVudFN0cmVhbVByb21pc2UsIHJlc291cmNlc1Byb21pc2VdKTtcbiAgICBjb25zdCBwYWdlTGlzdFByb21pc2UgPSBkYXRhUHJvbWlzZXMudGhlbigoW2NvbnRlbnRTdHJlYW1dKSA9PiB7XG4gICAgICBjb25zdCBvcExpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KGludGVudCwgc2luayk7XG4gICAgICBoYW5kbGVyLnNlbmQoXCJTdGFydFJlbmRlclBhZ2VcIiwge1xuICAgICAgICB0cmFuc3BhcmVuY3k6IHBhcnRpYWxFdmFsdWF0b3IuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcyksXG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgIGludGVudFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICBzdHJlYW06IGNvbnRlbnRTdHJlYW0sXG4gICAgICAgIHRhc2ssXG4gICAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbcGFnZUxpc3RQcm9taXNlLCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9uc10pLnRoZW4oZnVuY3Rpb24gKFtwYWdlT3BMaXN0LCBhbm5vdGF0aW9uc10pIHtcbiAgICAgIGlmIChhbm5vdGF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcGFnZU9wTGlzdC5mbHVzaCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZW5ndGg6IHBhZ2VPcExpc3QudG90YWxMZW5ndGhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3BMaXN0UHJvbWlzZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25zKSB7XG4gICAgICAgIGlmIChpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb24sIGludGVudCkpIHtcbiAgICAgICAgICBvcExpc3RQcm9taXNlcy5wdXNoKGFubm90YXRpb24uZ2V0T3BlcmF0b3JMaXN0KHBhcnRpYWxFdmFsdWF0b3IsIHRhc2ssIHJlbmRlckludGVyYWN0aXZlRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nIFwiICsgYFwiJHt0YXNrLm5hbWV9XCIgdGFzazogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwob3BMaXN0UHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKG9wTGlzdHMpIHtcbiAgICAgICAgcGFnZU9wTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Bbm5vdGF0aW9ucywgW10pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3BMaXN0IG9mIG9wTGlzdHMpIHtcbiAgICAgICAgICBwYWdlT3BMaXN0LmFkZE9wTGlzdChvcExpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFnZU9wTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbnMsIFtdKTtcbiAgICAgICAgcGFnZU9wTGlzdC5mbHVzaCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsZW5ndGg6IHBhZ2VPcExpc3QudG90YWxMZW5ndGhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXh0cmFjdFRleHRDb250ZW50KHtcbiAgICBoYW5kbGVyLFxuICAgIHRhc2ssXG4gICAgbm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICBzaW5rLFxuICAgIGNvbWJpbmVUZXh0SXRlbXNcbiAgfSkge1xuICAgIGNvbnN0IGNvbnRlbnRTdHJlYW1Qcm9taXNlID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcImdldENvbnRlbnRTdHJlYW1cIik7XG4gICAgY29uc3QgcmVzb3VyY2VzUHJvbWlzZSA9IHRoaXMubG9hZFJlc291cmNlcyhbXCJFeHRHU3RhdGVcIiwgXCJYT2JqZWN0XCIsIFwiRm9udFwiXSk7XG4gICAgY29uc3QgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgcmV0dXJuIGRhdGFQcm9taXNlcy50aGVuKChbY29udGVudFN0cmVhbV0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgX2V2YWx1YXRvci5QYXJ0aWFsRXZhbHVhdG9yKHtcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJ0aWFsRXZhbHVhdG9yLmdldFRleHRDb250ZW50KHtcbiAgICAgICAgc3RyZWFtOiBjb250ZW50U3RyZWFtLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXM6IHRoaXMucmVzb3VyY2VzLFxuICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICBjb21iaW5lVGV4dEl0ZW1zLFxuICAgICAgICBzaW5rXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zRGF0YShpbnRlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zRGF0YSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBhbm5vdGF0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGlmICghaW50ZW50IHx8IGlzQW5ub3RhdGlvblJlbmRlcmFibGUoYW5ub3RhdGlvbnNbaV0sIGludGVudCkpIHtcbiAgICAgICAgICBhbm5vdGF0aW9uc0RhdGEucHVzaChhbm5vdGF0aW9uc1tpXS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYW5ub3RhdGlvbnNEYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGFubm90YXRpb25zKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImFubm90YXRpb25zXCIsIHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJBbm5vdHNcIikgfHwgW10pO1xuICB9XG5cbiAgZ2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpIHtcbiAgICBjb25zdCBwYXJzZWRBbm5vdGF0aW9ucyA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgXCJhbm5vdGF0aW9uc1wiKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25Qcm9taXNlcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFubm90YXRpb25SZWYgb2YgdGhpcy5hbm5vdGF0aW9ucykge1xuICAgICAgICBhbm5vdGF0aW9uUHJvbWlzZXMucHVzaChfYW5ub3RhdGlvbi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLCBhbm5vdGF0aW9uUmVmLCB0aGlzLnBkZk1hbmFnZXIsIHRoaXMuX2xvY2FsSWRGYWN0b3J5KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBfcGFyc2VkQW5ub3RhdGlvbnM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFubm90YXRpb25Qcm9taXNlcykudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLmZpbHRlcihhbm5vdGF0aW9uID0+ICEhYW5ub3RhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfcGFyc2VkQW5ub3RhdGlvbnNcIiwgcGFyc2VkQW5ub3RhdGlvbnMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYWdlID0gUGFnZTtcbmNvbnN0IFBERl9IRUFERVJfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4MjUsIDB4NTAsIDB4NDQsIDB4NDYsIDB4MmRdKTtcbmNvbnN0IFNUQVJUWFJFRl9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg3MywgMHg3NCwgMHg2MSwgMHg3MiwgMHg3NCwgMHg3OCwgMHg3MiwgMHg2NSwgMHg2Nl0pO1xuY29uc3QgRU5ET0JKX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDY1LCAweDZlLCAweDY0LCAweDZmLCAweDYyLCAweDZhXSk7XG5jb25zdCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyA9IDEwMjQ7XG5jb25zdCBFTVBUWV9GSU5HRVJQUklOVCA9IFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcbmNvbnN0IFBERl9IRUFERVJfVkVSU0lPTl9SRUdFWFAgPSAvXlsxLTldXFwuWzAtOV0kLztcblxuZnVuY3Rpb24gZmluZChzdHJlYW0sIHNpZ25hdHVyZSwgbGltaXQgPSAxMDI0LCBiYWNrd2FyZHMgPSBmYWxzZSkge1xuICBjb25zdCBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuICBjb25zdCBzY2FuQnl0ZXMgPSBzdHJlYW0ucGVla0J5dGVzKGxpbWl0KTtcbiAgY29uc3Qgc2Nhbkxlbmd0aCA9IHNjYW5CeXRlcy5sZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7XG5cbiAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChiYWNrd2FyZHMpIHtcbiAgICBjb25zdCBzaWduYXR1cmVFbmQgPSBzaWduYXR1cmVMZW5ndGggLSAxO1xuICAgIGxldCBwb3MgPSBzY2FuQnl0ZXMubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChwb3MgPj0gc2lnbmF0dXJlRW5kKSB7XG4gICAgICBsZXQgaiA9IDA7XG5cbiAgICAgIHdoaWxlIChqIDwgc2lnbmF0dXJlTGVuZ3RoICYmIHNjYW5CeXRlc1twb3MgLSBqXSA9PT0gc2lnbmF0dXJlW3NpZ25hdHVyZUVuZCAtIGpdKSB7XG4gICAgICAgIGorKztcbiAgICAgIH1cblxuICAgICAgaWYgKGogPj0gc2lnbmF0dXJlTGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5wb3MgKz0gcG9zIC0gc2lnbmF0dXJlRW5kO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcG9zLS07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBwb3MgPSAwO1xuXG4gICAgd2hpbGUgKHBvcyA8PSBzY2FuTGVuZ3RoKSB7XG4gICAgICBsZXQgaiA9IDA7XG5cbiAgICAgIHdoaWxlIChqIDwgc2lnbmF0dXJlTGVuZ3RoICYmIHNjYW5CeXRlc1twb3MgKyBqXSA9PT0gc2lnbmF0dXJlW2pdKSB7XG4gICAgICAgIGorKztcbiAgICAgIH1cblxuICAgICAgaWYgKGogPj0gc2lnbmF0dXJlTGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5wb3MgKz0gcG9zO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcG9zKys7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5jbGFzcyBQREZEb2N1bWVudCB7XG4gIGNvbnN0cnVjdG9yKHBkZk1hbmFnZXIsIGFyZykge1xuICAgIGxldCBzdHJlYW07XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShhcmcpKSB7XG4gICAgICBzdHJlYW0gPSBhcmc7XG4gICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoYXJnKSkge1xuICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBERkRvY3VtZW50OiBVbmtub3duIGFyZ3VtZW50IHR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKHN0cmVhbS5sZW5ndGggPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oXCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLnhyZWYgPSBuZXcgX29iai5YUmVmKHN0cmVhbSwgcGRmTWFuYWdlcik7XG4gICAgdGhpcy5fcGFnZVByb21pc2VzID0gW107XG4gICAgdGhpcy5fdmVyc2lvbiA9IG51bGw7XG4gICAgY29uc3QgaWRDb3VudGVycyA9IHtcbiAgICAgIGZvbnQ6IDBcbiAgICB9O1xuICAgIHRoaXMuX2dsb2JhbElkRmFjdG9yeSA9IGNsYXNzIHtcbiAgICAgIHN0YXRpYyBnZXREb2NJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBnXyR7cGRmTWFuYWdlci5kb2NJZH1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgY3JlYXRlRm9udElkKCkge1xuICAgICAgICByZXR1cm4gYGYkeysraWRDb3VudGVycy5mb250fWA7XG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC5cIik7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgcGFyc2UocmVjb3ZlcnlNb2RlKSB7XG4gICAgdGhpcy54cmVmLnBhcnNlKHJlY292ZXJ5TW9kZSk7XG4gICAgdGhpcy5jYXRhbG9nID0gbmV3IF9vYmouQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsIHRoaXMueHJlZik7XG5cbiAgICBpZiAodGhpcy5jYXRhbG9nLnZlcnNpb24pIHtcbiAgICAgIHRoaXMuX3ZlcnNpb24gPSB0aGlzLmNhdGFsb2cudmVyc2lvbjtcbiAgICB9XG4gIH1cblxuICBnZXQgbGluZWFyaXphdGlvbigpIHtcbiAgICBsZXQgbGluZWFyaXphdGlvbiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgbGluZWFyaXphdGlvbiA9IF9wYXJzZXIuTGluZWFyaXphdGlvbi5jcmVhdGUodGhpcy5zdHJlYW0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKGVycik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibGluZWFyaXphdGlvblwiLCBsaW5lYXJpemF0aW9uKTtcbiAgfVxuXG4gIGdldCBzdGFydFhSZWYoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgbGV0IHN0YXJ0WFJlZiA9IDA7XG5cbiAgICBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7XG4gICAgICBzdHJlYW0ucmVzZXQoKTtcblxuICAgICAgaWYgKGZpbmQoc3RyZWFtLCBFTkRPQkpfU0lHTkFUVVJFKSkge1xuICAgICAgICBzdGFydFhSZWYgPSBzdHJlYW0ucG9zICsgNiAtIHN0cmVhbS5zdGFydDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RlcCA9IDEwMjQ7XG4gICAgICBjb25zdCBzdGFydFhSZWZMZW5ndGggPSBTVEFSVFhSRUZfU0lHTkFUVVJFLmxlbmd0aDtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlLFxuICAgICAgICAgIHBvcyA9IHN0cmVhbS5lbmQ7XG5cbiAgICAgIHdoaWxlICghZm91bmQgJiYgcG9zID4gMCkge1xuICAgICAgICBwb3MgLT0gc3RlcCAtIHN0YXJ0WFJlZkxlbmd0aDtcblxuICAgICAgICBpZiAocG9zIDwgMCkge1xuICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW0ucG9zID0gcG9zO1xuICAgICAgICBmb3VuZCA9IGZpbmQoc3RyZWFtLCBTVEFSVFhSRUZfU0lHTkFUVVJFLCBzdGVwLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHN0cmVhbS5za2lwKDkpO1xuICAgICAgICBsZXQgY2g7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIGNoID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgfSB3aGlsZSAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKTtcblxuICAgICAgICBsZXQgc3RyID0gXCJcIjtcblxuICAgICAgICB3aGlsZSAoY2ggPj0gMHgyMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgIGNoID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0WFJlZiA9IHBhcnNlSW50KHN0ciwgMTApO1xuXG4gICAgICAgIGlmIChpc05hTihzdGFydFhSZWYpKSB7XG4gICAgICAgICAgc3RhcnRYUmVmID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInN0YXJ0WFJlZlwiLCBzdGFydFhSZWYpO1xuICB9XG5cbiAgY2hlY2tIZWFkZXIoKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICBpZiAoIWZpbmQoc3RyZWFtLCBQREZfSEVBREVSX1NJR05BVFVSRSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdHJlYW0ubW92ZVN0YXJ0KCk7XG4gICAgY29uc3QgTUFYX1BERl9WRVJTSU9OX0xFTkdUSCA9IDEyO1xuICAgIGxldCB2ZXJzaW9uID0gXCJcIixcbiAgICAgICAgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgPiAweDIwKSB7XG4gICAgICBpZiAodmVyc2lvbi5sZW5ndGggPj0gTUFYX1BERl9WRVJTSU9OX0xFTkdUSCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmVyc2lvbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3ZlcnNpb24pIHtcbiAgICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uLnN1YnN0cmluZyg1KTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVN0YXJ0WFJlZigpIHtcbiAgICB0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKTtcbiAgfVxuXG4gIGdldCBudW1QYWdlcygpIHtcbiAgICBjb25zdCBsaW5lYXJpemF0aW9uID0gdGhpcy5saW5lYXJpemF0aW9uO1xuICAgIGNvbnN0IG51bSA9IGxpbmVhcml6YXRpb24gPyBsaW5lYXJpemF0aW9uLm51bVBhZ2VzIDogdGhpcy5jYXRhbG9nLm51bVBhZ2VzO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm51bVBhZ2VzXCIsIG51bSk7XG4gIH1cblxuICBfaGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhmaWVsZHMsIHJlY3Vyc2lvbkRlcHRoID0gMCkge1xuICAgIGNvbnN0IFJFQ1VSU0lPTl9MSU1JVCA9IDEwO1xuICAgIHJldHVybiBmaWVsZHMuZXZlcnkoZmllbGQgPT4ge1xuICAgICAgZmllbGQgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWVsZCk7XG5cbiAgICAgIGlmIChmaWVsZC5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgIGlmICgrK3JlY3Vyc2lvbkRlcHRoID4gUkVDVVJTSU9OX0xJTUlUKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWRcIik7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZmllbGQuZ2V0KFwiS2lkc1wiKSwgcmVjdXJzaW9uRGVwdGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1NpZ25hdHVyZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkLmdldChcIkZUXCIpLCBcIlNpZ1wiKTtcbiAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGZpZWxkLmdldChcIlJlY3RcIik7XG4gICAgICBjb25zdCBpc0ludmlzaWJsZSA9IEFycmF5LmlzQXJyYXkocmVjdGFuZ2xlKSAmJiByZWN0YW5nbGUuZXZlcnkodmFsdWUgPT4gdmFsdWUgPT09IDApO1xuICAgICAgcmV0dXJuIGlzU2lnbmF0dXJlICYmIGlzSW52aXNpYmxlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZvcm1JbmZvKCkge1xuICAgIGNvbnN0IGZvcm1JbmZvID0ge1xuICAgICAgaGFzQWNyb0Zvcm06IGZhbHNlLFxuICAgICAgaGFzWGZhOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07XG5cbiAgICBpZiAoIWFjcm9Gb3JtKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmb3JtSW5mb1wiLCBmb3JtSW5mbyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHhmYSA9IGFjcm9Gb3JtLmdldChcIlhGQVwiKTtcbiAgICAgIGNvbnN0IGhhc1hmYSA9IEFycmF5LmlzQXJyYXkoeGZhKSAmJiB4ZmEubGVuZ3RoID4gMCB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhmYSkgJiYgIXhmYS5pc0VtcHR5O1xuICAgICAgZm9ybUluZm8uaGFzWGZhID0gaGFzWGZhO1xuICAgICAgY29uc3QgZmllbGRzID0gYWNyb0Zvcm0uZ2V0KFwiRmllbGRzXCIpO1xuICAgICAgY29uc3QgaGFzRmllbGRzID0gQXJyYXkuaXNBcnJheShmaWVsZHMpICYmIGZpZWxkcy5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc2lnRmxhZ3MgPSBhY3JvRm9ybS5nZXQoXCJTaWdGbGFnc1wiKTtcblxuICAgICAgY29uc3QgaGFzT25seURvY3VtZW50U2lnbmF0dXJlcyA9ICEhKHNpZ0ZsYWdzICYgMHgxKSAmJiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGZpZWxkcyk7XG5cbiAgICAgIGZvcm1JbmZvLmhhc0Fjcm9Gb3JtID0gaGFzRmllbGRzICYmICFoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImZvcm1JbmZvXCIsIGZvcm1JbmZvKTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudEluZm8oKSB7XG4gICAgY29uc3QgRG9jdW1lbnRJbmZvVmFsaWRhdG9ycyA9IHtcbiAgICAgIFRpdGxlOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIEF1dGhvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBTdWJqZWN0OiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIEtleXdvcmRzOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIENyZWF0b3I6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgUHJvZHVjZXI6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQ3JlYXRpb25EYXRlOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIE1vZERhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgVHJhcHBlZDogX3ByaW1pdGl2ZXMuaXNOYW1lXG4gICAgfTtcbiAgICBsZXQgdmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gIT09IFwic3RyaW5nXCIgfHwgIVBERl9IRUFERVJfVkVSU0lPTl9SRUdFWFAudGVzdCh2ZXJzaW9uKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIFBERiBoZWFkZXIgdmVyc2lvbiBudW1iZXI6ICR7dmVyc2lvbn1gKTtcbiAgICAgIHZlcnNpb24gPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY0luZm8gPSB7XG4gICAgICBQREZGb3JtYXRWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgSXNMaW5lYXJpemVkOiAhIXRoaXMubGluZWFyaXphdGlvbixcbiAgICAgIElzQWNyb0Zvcm1QcmVzZW50OiB0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLFxuICAgICAgSXNYRkFQcmVzZW50OiB0aGlzLmZvcm1JbmZvLmhhc1hmYSxcbiAgICAgIElzQ29sbGVjdGlvblByZXNlbnQ6ICEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb25cbiAgICB9O1xuICAgIGxldCBpbmZvRGljdDtcblxuICAgIHRyeSB7XG4gICAgICBpbmZvRGljdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldChcIkluZm9cIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoaW5mb0RpY3QpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBpbmZvRGljdC5nZXRLZXlzKCkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbmZvRGljdC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoRG9jdW1lbnRJbmZvVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgaWYgKERvY3VtZW50SW5mb1ZhbGlkYXRvcnNba2V5XSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRvY0luZm9ba2V5XSA9IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIFwiJHtrZXl9XCIuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBsZXQgY3VzdG9tVmFsdWU7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2YWx1ZSkgfHwgKDAsIF91dGlsLmlzTnVtKSh2YWx1ZSkgfHwgKDAsIF91dGlsLmlzQm9vbCkodmFsdWUpKSB7XG4gICAgICAgICAgICBjdXN0b21WYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFVuc3VwcG9ydGVkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIChjdXN0b20pIFwiJHtrZXl9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWRvY0luZm8uQ3VzdG9tKSB7XG4gICAgICAgICAgICBkb2NJbmZvLkN1c3RvbSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jSW5mby5DdXN0b21ba2V5XSA9IGN1c3RvbVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZG9jdW1lbnRJbmZvXCIsIGRvY0luZm8pO1xuICB9XG5cbiAgZ2V0IGZpbmdlcnByaW50KCkge1xuICAgIGxldCBoYXNoO1xuICAgIGNvbnN0IGlkQXJyYXkgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoXCJJRFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkQXJyYXkpICYmIGlkQXJyYXlbMF0gJiYgKDAsIF91dGlsLmlzU3RyaW5nKShpZEFycmF5WzBdKSAmJiBpZEFycmF5WzBdICE9PSBFTVBUWV9GSU5HRVJQUklOVCkge1xuICAgICAgaGFzaCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShpZEFycmF5WzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaCA9ICgwLCBfY3J5cHRvLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKSwgMCwgRklOR0VSUFJJTlRfRklSU1RfQllURVMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmdlcnByaW50QnVmID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBoYXNoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGhleCA9IGhhc2hbaV0udG9TdHJpbmcoMTYpO1xuICAgICAgZmluZ2VycHJpbnRCdWYucHVzaChoZXgucGFkU3RhcnQoMiwgXCIwXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaW5nZXJwcmludFwiLCBmaW5nZXJwcmludEJ1Zi5qb2luKFwiXCIpKTtcbiAgfVxuXG4gIF9nZXRMaW5lYXJpemF0aW9uUGFnZShwYWdlSW5kZXgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgbGluZWFyaXphdGlvblxuICAgIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChsaW5lYXJpemF0aW9uLm9iamVjdE51bWJlckZpcnN0LCAwKTtcblxuICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hBc3luYyhyZWYpLnRoZW4ob2JqID0+IHtcbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosIFwiUGFnZVwiKSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopICYmICFvYmouaGFzKFwiVHlwZVwiKSAmJiBvYmouaGFzKFwiQ29udGVudHNcIikpIHtcbiAgICAgICAgaWYgKHJlZiAmJiAhY2F0YWxvZy5wYWdlS2lkc0NvdW50Q2FjaGUuaGFzKHJlZikpIHtcbiAgICAgICAgICBjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQocmVmLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbb2JqLCByZWZdO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgXCIgKyBcInRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgKDAsIF91dGlsLmluZm8pKHJlYXNvbik7XG4gICAgICByZXR1cm4gY2F0YWxvZy5nZXRQYWdlRGljdChwYWdlSW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZShwYWdlSW5kZXgpIHtcbiAgICBpZiAodGhpcy5fcGFnZVByb21pc2VzW3BhZ2VJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGNhdGFsb2csXG4gICAgICBsaW5lYXJpemF0aW9uXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgcHJvbWlzZSA9IGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCA/IHRoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkgOiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdID0gcHJvbWlzZS50aGVuKChbcGFnZURpY3QsIHJlZl0pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgIHBkZk1hbmFnZXI6IHRoaXMucGRmTWFuYWdlcixcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VEaWN0LFxuICAgICAgICByZWYsXG4gICAgICAgIGdsb2JhbElkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IGNhdGFsb2cuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IGNhdGFsb2cuZ2xvYmFsSW1hZ2VDYWNoZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ZpcnN0UGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKDApLmNhdGNoKGFzeW5jIHJlYXNvbiA9PiB7XG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKSB7XG4gICAgICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5sZW5ndGggPSAwO1xuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZyA/IHRoaXMuY2F0YWxvZy5jbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkKSA6ICgwLCBfcHJpbWl0aXZlcy5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRG9jdW1lbnQgPSBQREZEb2N1bWVudDtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWxlU3BlYyA9IGV4cG9ydHMuWFJlZiA9IGV4cG9ydHMuT2JqZWN0TG9hZGVyID0gZXhwb3J0cy5DYXRhbG9nID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTEpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX2NyeXB0byA9IF9fd19wZGZqc19yZXF1aXJlX18oMjIpO1xuXG52YXIgX2NvbG9yc3BhY2UgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIzKTtcblxudmFyIF9pbWFnZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG5mdW5jdGlvbiBmZXRjaERlc3RpbmF0aW9uKGRlc3QpIHtcbiAgcmV0dXJuICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3QpID8gZGVzdC5nZXQoXCJEXCIpIDogZGVzdDtcbn1cblxuY2xhc3MgQ2F0YWxvZyB7XG4gIGNvbnN0cnVjdG9yKHBkZk1hbmFnZXIsIHhyZWYpIHtcbiAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5fY2F0RGljdCA9IHhyZWYuZ2V0Q2F0YWxvZ09iaigpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLl9jYXREaWN0KSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQ2F0YWxvZyBvYmplY3QgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5mb250Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5HbG9iYWxJbWFnZUNhY2hlKCk7XG4gICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIGdldCB2ZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9jYXREaWN0LmdldChcIlZlcnNpb25cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ2ZXJzaW9uXCIsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInZlcnNpb25cIiwgdmVyc2lvbi5uYW1lKTtcbiAgfVxuXG4gIGdldCBjb2xsZWN0aW9uKCkge1xuICAgIGxldCBjb2xsZWN0aW9uID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIkNvbGxlY3Rpb25cIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopICYmIG9iai5zaXplID4gMCkge1xuICAgICAgICBjb2xsZWN0aW9uID0gb2JqO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY29sbGVjdGlvblwiLCBjb2xsZWN0aW9uKTtcbiAgfVxuXG4gIGdldCBhY3JvRm9ybSgpIHtcbiAgICBsZXQgYWNyb0Zvcm0gPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiQWNyb0Zvcm1cIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopICYmIG9iai5zaXplID4gMCkge1xuICAgICAgICBhY3JvRm9ybSA9IG9iajtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkNhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gZm9ybXMgYXJlIHByZXNlbnQuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImFjcm9Gb3JtXCIsIGFjcm9Gb3JtKTtcbiAgfVxuXG4gIGdldCBtZXRhZGF0YSgpIHtcbiAgICBjb25zdCBzdHJlYW1SZWYgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIk1ldGFkYXRhXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHN0cmVhbVJlZikpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm1ldGFkYXRhXCIsIG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1cHByZXNzRW5jcnlwdGlvbiA9ICEodGhpcy54cmVmLmVuY3J5cHQgJiYgdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKTtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnhyZWYuZmV0Y2goc3RyZWFtUmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIGxldCBtZXRhZGF0YTtcblxuICAgIGlmIChzdHJlYW0gJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoc3RyZWFtLmRpY3QpKSB7XG4gICAgICBjb25zdCB0eXBlID0gc3RyZWFtLmRpY3QuZ2V0KFwiVHlwZVwiKTtcbiAgICAgIGNvbnN0IHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSwgXCJNZXRhZGF0YVwiKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShzdWJ0eXBlLCBcIlhNTFwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1ldGFkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHN0cmVhbS5nZXRCeXRlcygpKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlNraXBwaW5nIGludmFsaWQgbWV0YWRhdGEuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibWV0YWRhdGFcIiwgbWV0YWRhdGEpO1xuICB9XG5cbiAgZ2V0IHRvcGxldmVsUGFnZXNEaWN0KCkge1xuICAgIGNvbnN0IHBhZ2VzT2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJQYWdlc1wiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFnZXNPYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5LlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ0b3BsZXZlbFBhZ2VzRGljdFwiLCBwYWdlc09iaik7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRPdXRsaW5lKCkge1xuICAgIGxldCBvYmogPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9iaiA9IHRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRvY3VtZW50T3V0bGluZVwiLCBvYmopO1xuICB9XG5cbiAgX3JlYWREb2N1bWVudE91dGxpbmUoKSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3V0bGluZXNcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG9iaiA9IG9iai5nZXRSYXcoXCJGaXJzdFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0ge1xuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgICBjb25zdCBxdWV1ZSA9IFt7XG4gICAgICBvYmosXG4gICAgICBwYXJlbnQ6IHJvb3RcbiAgICB9XTtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWYsXG4gICAgICAgICAgYmxhY2tDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpID0gcXVldWUuc2hpZnQoKTtcbiAgICAgIGNvbnN0IG91dGxpbmVEaWN0ID0geHJlZi5mZXRjaElmUmVmKGkub2JqKTtcblxuICAgICAgaWYgKG91dGxpbmVEaWN0ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW91dGxpbmVEaWN0LmhhcyhcIlRpdGxlXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICBkZXN0OiBudWxsXG4gICAgICB9O1xuICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgICAgZGVzdERpY3Q6IG91dGxpbmVEaWN0LFxuICAgICAgICByZXN1bHRPYmo6IGRhdGEsXG4gICAgICAgIGRvY0Jhc2VVcmw6IHRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRpdGxlID0gb3V0bGluZURpY3QuZ2V0KFwiVGl0bGVcIik7XG4gICAgICBjb25zdCBmbGFncyA9IG91dGxpbmVEaWN0LmdldChcIkZcIikgfHwgMDtcbiAgICAgIGNvbnN0IGNvbG9yID0gb3V0bGluZURpY3QuZ2V0QXJyYXkoXCJDXCIpO1xuICAgICAgY29uc3QgY291bnQgPSBvdXRsaW5lRGljdC5nZXQoXCJDb3VudFwiKTtcbiAgICAgIGxldCByZ2JDb2xvciA9IGJsYWNrQ29sb3I7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvci5sZW5ndGggPT09IDMgJiYgKGNvbG9yWzBdICE9PSAwIHx8IGNvbG9yWzFdICE9PSAwIHx8IGNvbG9yWzJdICE9PSAwKSkge1xuICAgICAgICByZ2JDb2xvciA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGNvbG9yLCAwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0bGluZUl0ZW0gPSB7XG4gICAgICAgIGRlc3Q6IGRhdGEuZGVzdCxcbiAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgdW5zYWZlVXJsOiBkYXRhLnVuc2FmZVVybCxcbiAgICAgICAgbmV3V2luZG93OiBkYXRhLm5ld1dpbmRvdyxcbiAgICAgICAgdGl0bGU6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodGl0bGUpLFxuICAgICAgICBjb2xvcjogcmdiQ29sb3IsXG4gICAgICAgIGNvdW50OiBOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSA/IGNvdW50IDogdW5kZWZpbmVkLFxuICAgICAgICBib2xkOiAhIShmbGFncyAmIDIpLFxuICAgICAgICBpdGFsaWM6ICEhKGZsYWdzICYgMSksXG4gICAgICAgIGl0ZW1zOiBbXVxuICAgICAgfTtcbiAgICAgIGkucGFyZW50Lml0ZW1zLnB1c2gob3V0bGluZUl0ZW0pO1xuICAgICAgb2JqID0gb3V0bGluZURpY3QuZ2V0UmF3KFwiRmlyc3RcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikgJiYgIXByb2Nlc3NlZC5oYXMob2JqKSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgcGFyZW50OiBvdXRsaW5lSXRlbVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgfVxuXG4gICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoXCJOZXh0XCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopICYmICFwcm9jZXNzZWQuaGFzKG9iaikpIHtcbiAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHBhcmVudDogaS5wYXJlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHByb2Nlc3NlZC5wdXQob2JqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdC5pdGVtcy5sZW5ndGggPiAwID8gcm9vdC5pdGVtcyA6IG51bGw7XG4gIH1cblxuICBnZXQgcGVybWlzc2lvbnMoKSB7XG4gICAgbGV0IHBlcm1pc3Npb25zID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBwZXJtaXNzaW9ucyA9IHRoaXMuX3JlYWRQZXJtaXNzaW9ucygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgcGVybWlzc2lvbnMuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBlcm1pc3Npb25zXCIsIHBlcm1pc3Npb25zKTtcbiAgfVxuXG4gIF9yZWFkUGVybWlzc2lvbnMoKSB7XG4gICAgY29uc3QgZW5jcnlwdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldChcIkVuY3J5cHRcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY3J5cHQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgZmxhZ3MgPSBlbmNyeXB0LmdldChcIlBcIik7XG5cbiAgICBpZiAoISgwLCBfdXRpbC5pc051bSkoZmxhZ3MpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmbGFncyArPSAyICoqIDMyO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBfdXRpbC5QZXJtaXNzaW9uRmxhZykge1xuICAgICAgY29uc3QgdmFsdWUgPSBfdXRpbC5QZXJtaXNzaW9uRmxhZ1trZXldO1xuXG4gICAgICBpZiAoZmxhZ3MgJiB2YWx1ZSkge1xuICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCkge1xuICAgIGxldCBjb25maWcgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9jYXREaWN0LmdldChcIk9DUHJvcGVydGllc1wiKTtcblxuICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wdGlvbmFsQ29udGVudENvbmZpZ1wiLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHByb3BlcnRpZXMuZ2V0KFwiRFwiKTtcblxuICAgICAgaWYgKCFkZWZhdWx0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wdGlvbmFsQ29udGVudENvbmZpZ1wiLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JvdXBzRGF0YSA9IHByb3BlcnRpZXMuZ2V0KFwiT0NHc1wiKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGdyb3Vwc0RhdGEpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wdGlvbmFsQ29udGVudENvbmZpZ1wiLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ3JvdXBzID0gW107XG4gICAgICBjb25zdCBncm91cFJlZnMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBncm91cFJlZiBvZiBncm91cHNEYXRhKSB7XG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShncm91cFJlZikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyb3VwUmVmcy5wdXNoKGdyb3VwUmVmKTtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihncm91cFJlZik7XG4gICAgICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICBpZDogZ3JvdXBSZWYudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiAoMCwgX3V0aWwuaXNTdHJpbmcpKGdyb3VwLmdldChcIk5hbWVcIikpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShncm91cC5nZXQoXCJOYW1lXCIpKSA6IG51bGwsXG4gICAgICAgICAgaW50ZW50OiAoMCwgX3V0aWwuaXNTdHJpbmcpKGdyb3VwLmdldChcIkludGVudFwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGdyb3VwLmdldChcIkludGVudFwiKSkgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25maWcgPSB0aGlzLl9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGRlZmF1bHRDb25maWcsIGdyb3VwUmVmcyk7XG4gICAgICBjb25maWcuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogJHtleH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJvcHRpb25hbENvbnRlbnRDb25maWdcIiwgY29uZmlnKTtcbiAgfVxuXG4gIF9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGNvbmZpZywgY29udGVudEdyb3VwUmVmcykge1xuICAgIGZ1bmN0aW9uIHBhcnNlT25PZmYocmVmcykge1xuICAgICAgY29uc3Qgb25QYXJzZWQgPSBbXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVmcykpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiByZWZzKSB7XG4gICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbnRlbnRHcm91cFJlZnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICBvblBhcnNlZC5wdXNoKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb25QYXJzZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPcmRlcihyZWZzLCBuZXN0ZWRMZXZlbHMgPSAwKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmcykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yZGVyID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgcmVmcykge1xuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh2YWx1ZSkgJiYgY29udGVudEdyb3VwUmVmcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICBwYXJzZWRPcmRlclJlZnMucHV0KHZhbHVlKTtcbiAgICAgICAgICBvcmRlci5wdXNoKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmVzdGVkT3JkZXIgPSBwYXJzZU5lc3RlZE9yZGVyKHZhbHVlLCBuZXN0ZWRMZXZlbHMpO1xuXG4gICAgICAgIGlmIChuZXN0ZWRPcmRlcikge1xuICAgICAgICAgIG9yZGVyLnB1c2gobmVzdGVkT3JkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXN0ZWRMZXZlbHMgPiAwKSB7XG4gICAgICAgIHJldHVybiBvcmRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlkZGVuR3JvdXBzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgZ3JvdXBSZWYgb2YgY29udGVudEdyb3VwUmVmcykge1xuICAgICAgICBpZiAocGFyc2VkT3JkZXJSZWZzLmhhcyhncm91cFJlZikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZGRlbkdyb3Vwcy5wdXNoKGdyb3VwUmVmLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGlkZGVuR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICBvcmRlci5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgIG9yZGVyOiBoaWRkZW5Hcm91cHNcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmRlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU5lc3RlZE9yZGVyKHJlZiwgbmVzdGVkTGV2ZWxzKSB7XG4gICAgICBpZiAoKytuZXN0ZWRMZXZlbHMgPiBNQVhfTkVTVEVEX0xFVkVMUykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZU5lc3RlZE9yZGVyIC0gcmVhY2hlZCBNQVhfTkVTVEVEX0xFVkVMUy5cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IHhyZWYuZmV0Y2hJZlJlZihyZWYpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWROYW1lID0geHJlZi5mZXRjaElmUmVmKHZhbHVlWzBdKTtcblxuICAgICAgaWYgKHR5cGVvZiBuZXN0ZWROYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXN0ZWRPcmRlciA9IHBhcnNlT3JkZXIodmFsdWUuc2xpY2UoMSksIG5lc3RlZExldmVscyk7XG5cbiAgICAgIGlmICghbmVzdGVkT3JkZXIgfHwgIW5lc3RlZE9yZGVyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShuZXN0ZWROYW1lKSxcbiAgICAgICAgb3JkZXI6IG5lc3RlZE9yZGVyXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWYsXG4gICAgICAgICAgcGFyc2VkT3JkZXJSZWZzID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpLFxuICAgICAgICAgIE1BWF9ORVNURURfTEVWRUxTID0gMTA7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICgwLCBfdXRpbC5pc1N0cmluZykoY29uZmlnLmdldChcIk5hbWVcIikpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjb25maWcuZ2V0KFwiTmFtZVwiKSkgOiBudWxsLFxuICAgICAgY3JlYXRvcjogKDAsIF91dGlsLmlzU3RyaW5nKShjb25maWcuZ2V0KFwiQ3JlYXRvclwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNvbmZpZy5nZXQoXCJDcmVhdG9yXCIpKSA6IG51bGwsXG4gICAgICBiYXNlU3RhdGU6ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNvbmZpZy5nZXQoXCJCYXNlU3RhdGVcIikpID8gY29uZmlnLmdldChcIkJhc2VTdGF0ZVwiKS5uYW1lIDogbnVsbCxcbiAgICAgIG9uOiBwYXJzZU9uT2ZmKGNvbmZpZy5nZXQoXCJPTlwiKSksXG4gICAgICBvZmY6IHBhcnNlT25PZmYoY29uZmlnLmdldChcIk9GRlwiKSksXG4gICAgICBvcmRlcjogcGFyc2VPcmRlcihjb25maWcuZ2V0KFwiT3JkZXJcIikpLFxuICAgICAgZ3JvdXBzOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBudW1QYWdlcygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldChcIkNvdW50XCIpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm51bVBhZ2VzXCIsIG9iaik7XG4gIH1cblxuICBnZXQgZGVzdGluYXRpb25zKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3JlYWREZXN0cygpLFxuICAgICAgICAgIGRlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOYW1lVHJlZSkge1xuICAgICAgY29uc3QgbmFtZXMgPSBvYmouZ2V0QWxsKCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBuYW1lcykge1xuICAgICAgICBkZXN0c1tuYW1lXSA9IGZldGNoRGVzdGluYXRpb24obmFtZXNbbmFtZV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgZGVzdHNba2V5XSA9IGZldGNoRGVzdGluYXRpb24odmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJkZXN0aW5hdGlvbnNcIiwgZGVzdHMpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb24oZGVzdGluYXRpb25JZCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3JlYWREZXN0cygpO1xuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWVUcmVlIHx8IG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIHJldHVybiBmZXRjaERlc3RpbmF0aW9uKG9iai5nZXQoZGVzdGluYXRpb25JZCkgfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfcmVhZERlc3RzKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBpZiAob2JqICYmIG9iai5oYXMoXCJEZXN0c1wiKSkge1xuICAgICAgcmV0dXJuIG5ldyBOYW1lVHJlZShvYmouZ2V0UmF3KFwiRGVzdHNcIiksIHRoaXMueHJlZik7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9jYXREaWN0LmhhcyhcIkRlc3RzXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2F0RGljdC5nZXQoXCJEZXN0c1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IHBhZ2VMYWJlbHMoKSB7XG4gICAgbGV0IG9iaiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb2JqID0gdGhpcy5fcmVhZFBhZ2VMYWJlbHMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwYWdlTGFiZWxzXCIsIG9iaik7XG4gIH1cblxuICBfcmVhZFBhZ2VMYWJlbHMoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXRSYXcoXCJQYWdlTGFiZWxzXCIpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VMYWJlbHMgPSBuZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7XG4gICAgbGV0IHN0eWxlID0gbnVsbCxcbiAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICBjb25zdCBudW1iZXJUcmVlID0gbmV3IE51bWJlclRyZWUob2JqLCB0aGlzLnhyZWYpO1xuICAgIGNvbnN0IG51bXMgPSBudW1iZXJUcmVlLmdldEFsbCgpO1xuICAgIGxldCBjdXJyZW50TGFiZWwgPSBcIlwiLFxuICAgICAgICBjdXJyZW50SW5kZXggPSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdGhpcy5udW1QYWdlczsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChpIGluIG51bXMpIHtcbiAgICAgICAgY29uc3QgbGFiZWxEaWN0ID0gbnVtc1tpXTtcblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGxhYmVsRGljdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlR5cGVcIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGxhYmVsRGljdC5nZXQoXCJUeXBlXCIpLCBcIlBhZ2VMYWJlbFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlNcIikpIHtcbiAgICAgICAgICBjb25zdCBzID0gbGFiZWxEaWN0LmdldChcIlNcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlBcIikpIHtcbiAgICAgICAgICBjb25zdCBwID0gbGFiZWxEaWN0LmdldChcIlBcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlN0XCIpKSB7XG4gICAgICAgICAgY29uc3Qgc3QgPSBsYWJlbERpY3QuZ2V0KFwiU3RcIik7XG5cbiAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKHN0KSAmJiBzdCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJSXCI6XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF9jb3JlX3V0aWxzLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gXCJyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJBXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgY29uc3QgTElNSVQgPSAyNjtcbiAgICAgICAgICBjb25zdCBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgIEFfTE9XRVJfQ0FTRSA9IDB4NjE7XG4gICAgICAgICAgY29uc3QgYmFzZUNoYXJDb2RlID0gc3R5bGUgPT09IFwiYVwiID8gQV9MT1dFUl9DQVNFIDogQV9VUFBFUl9DQVNFO1xuICAgICAgICAgIGNvbnN0IGxldHRlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgIGNvbnN0IGNoYXJCdWYgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlIFwiJHtzdHlsZX1cIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50TGFiZWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBwYWdlTGFiZWxzW2ldID0gcHJlZml4ICsgY3VycmVudExhYmVsO1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gIH1cblxuICBnZXQgcGFnZUxheW91dCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIlBhZ2VMYXlvdXRcIik7XG5cbiAgICBsZXQgcGFnZUxheW91dCA9IFwiXCI7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob2JqKSkge1xuICAgICAgc3dpdGNoIChvYmoubmFtZSkge1xuICAgICAgICBjYXNlIFwiU2luZ2xlUGFnZVwiOlxuICAgICAgICBjYXNlIFwiT25lQ29sdW1uXCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5MZWZ0XCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5SaWdodFwiOlxuICAgICAgICBjYXNlIFwiVHdvUGFnZUxlZnRcIjpcbiAgICAgICAgY2FzZSBcIlR3b1BhZ2VSaWdodFwiOlxuICAgICAgICAgIHBhZ2VMYXlvdXQgPSBvYmoubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwYWdlTGF5b3V0XCIsIHBhZ2VMYXlvdXQpO1xuICB9XG5cbiAgZ2V0IHBhZ2VNb2RlKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiUGFnZU1vZGVcIik7XG5cbiAgICBsZXQgcGFnZU1vZGUgPSBcIlVzZU5vbmVcIjtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJVc2VOb25lXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPdXRsaW5lc1wiOlxuICAgICAgICBjYXNlIFwiVXNlVGh1bWJzXCI6XG4gICAgICAgIGNhc2UgXCJGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPQ1wiOlxuICAgICAgICBjYXNlIFwiVXNlQXR0YWNobWVudHNcIjpcbiAgICAgICAgICBwYWdlTW9kZSA9IG9iai5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VNb2RlXCIsIHBhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCB2aWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCBWaWV3ZXJQcmVmZXJlbmNlc1ZhbGlkYXRvcnMgPSB7XG4gICAgICBIaWRlVG9vbGJhcjogX3V0aWwuaXNCb29sLFxuICAgICAgSGlkZU1lbnViYXI6IF91dGlsLmlzQm9vbCxcbiAgICAgIEhpZGVXaW5kb3dVSTogX3V0aWwuaXNCb29sLFxuICAgICAgRml0V2luZG93OiBfdXRpbC5pc0Jvb2wsXG4gICAgICBDZW50ZXJXaW5kb3c6IF91dGlsLmlzQm9vbCxcbiAgICAgIERpc3BsYXlEb2NUaXRsZTogX3V0aWwuaXNCb29sLFxuICAgICAgTm9uRnVsbFNjcmVlblBhZ2VNb2RlOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBEaXJlY3Rpb246IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFZpZXdBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBWaWV3Q2xpcDogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgUHJpbnRBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQcmludENsaXA6IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFByaW50U2NhbGluZzogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgRHVwbGV4OiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQaWNrVHJheUJ5UERGU2l6ZTogX3V0aWwuaXNCb29sLFxuICAgICAgUHJpbnRQYWdlUmFuZ2U6IEFycmF5LmlzQXJyYXksXG4gICAgICBOdW1Db3BpZXM6IE51bWJlci5pc0ludGVnZXJcbiAgICB9O1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJWaWV3ZXJQcmVmZXJlbmNlc1wiKTtcblxuICAgIGxldCBwcmVmcyA9IG51bGw7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXNWYWxpZGF0b3JzKSB7XG4gICAgICAgIGlmICghb2JqLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iai5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoIVZpZXdlclByZWZlcmVuY2VzVmFsaWRhdG9yc1trZXldKHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIHZhbHVlIGluIFZpZXdlclByZWZlcmVuY2VzIGZvciBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZWYWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgXCJOb25GdWxsU2NyZWVuUGFnZU1vZGVcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiVXNlTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT3V0bGluZXNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZVRodW1ic1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT0NcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJVc2VOb25lXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkRpcmVjdGlvblwiOlxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJMMlJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlIyTFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkwyUlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJWaWV3QXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJWaWV3Q2xpcFwiOlxuICAgICAgICAgIGNhc2UgXCJQcmludEFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwiUHJpbnRDbGlwXCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIk1lZGlhQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJDcm9wQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJCbGVlZEJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVHJpbUJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXJ0Qm94XCI6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IFwiQ3JvcEJveFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJQcmludFNjYWxpbmdcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXBwRGVmYXVsdFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkFwcERlZmF1bHRcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRHVwbGV4XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlNpbXBsZXhcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBTaG9ydEVkZ2VcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBMb25nRWRnZVwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIk5vbmVcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUHJpbnRQYWdlUmFuZ2VcIjpcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZS5ldmVyeSgocGFnZSwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhZ2UpICYmIHBhZ2UgPiAwICYmIChpID09PSAwIHx8IHBhZ2UgPj0gYXJyW2kgLSAxXSkgJiYgcGFnZSA8PSB0aGlzLm51bVBhZ2VzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJOdW1Db3BpZXNcIjpcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdmlld2VyUHJlZmVyZW5jZXMgLSBleHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgZm9yOiAke2tleX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlZlZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIXByZWZzKSB7XG4gICAgICAgICAgICBwcmVmcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJlZnNba2V5XSA9IHByZWZWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBWaWV3ZXJQcmVmZXJlbmNlcyBmb3IgXCIke2tleX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInZpZXdlclByZWZlcmVuY2VzXCIsIHByZWZzKTtcbiAgfVxuXG4gIGdldCBvcGVuQWN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGxldCBvcGVuQWN0aW9uID0gbnVsbDtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopKSB7XG4gICAgICBjb25zdCBkZXN0RGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHRoaXMueHJlZik7XG4gICAgICBkZXN0RGljdC5zZXQoXCJBXCIsIG9iaik7XG4gICAgICBjb25zdCByZXN1bHRPYmogPSB7XG4gICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgZGVzdDogbnVsbCxcbiAgICAgICAgYWN0aW9uOiBudWxsXG4gICAgICB9O1xuICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgICAgZGVzdERpY3QsXG4gICAgICAgIHJlc3VsdE9ialxuICAgICAgfSk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdE9iai5kZXN0KSkge1xuICAgICAgICBpZiAoIW9wZW5BY3Rpb24pIHtcbiAgICAgICAgICBvcGVuQWN0aW9uID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZW5BY3Rpb24uZGVzdCA9IHJlc3VsdE9iai5kZXN0O1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRPYmouYWN0aW9uKSB7XG4gICAgICAgIGlmICghb3BlbkFjdGlvbikge1xuICAgICAgICAgIG9wZW5BY3Rpb24gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlbkFjdGlvbi5hY3Rpb24gPSByZXN1bHRPYmouYWN0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICBpZiAoIW9wZW5BY3Rpb24pIHtcbiAgICAgICAgb3BlbkFjdGlvbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIG9wZW5BY3Rpb24uZGVzdCA9IG9iajtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJvcGVuQWN0aW9uXCIsIG9wZW5BY3Rpb24pO1xuICB9XG5cbiAgZ2V0IGF0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBsZXQgYXR0YWNobWVudHMgPSBudWxsO1xuXG4gICAgaWYgKG9iaiAmJiBvYmouaGFzKFwiRW1iZWRkZWRGaWxlc1wiKSkge1xuICAgICAgY29uc3QgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdyhcIkVtYmVkZGVkRmlsZXNcIiksIHRoaXMueHJlZik7XG4gICAgICBjb25zdCBuYW1lcyA9IG5hbWVUcmVlLmdldEFsbCgpO1xuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgY29uc3QgZnMgPSBuZXcgRmlsZVNwZWMobmFtZXNbbmFtZV0sIHRoaXMueHJlZik7XG5cbiAgICAgICAgaWYgKCFhdHRhY2htZW50cykge1xuICAgICAgICAgIGF0dGFjaG1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF0dGFjaG1lbnRzWygwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykobmFtZSldID0gZnMuc2VyaWFsaXphYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImF0dGFjaG1lbnRzXCIsIGF0dGFjaG1lbnRzKTtcbiAgfVxuXG4gIGdldCBqYXZhU2NyaXB0KCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBsZXQgamF2YVNjcmlwdCA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBhcHBlbmRJZkphdmFTY3JpcHREaWN0KGpzRGljdCkge1xuICAgICAgY29uc3QgdHlwZSA9IGpzRGljdC5nZXQoXCJTXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUsIFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBqcyA9IGpzRGljdC5nZXQoXCJKU1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoanMpKSB7XG4gICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzLmdldEJ5dGVzKCkpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShqcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWphdmFTY3JpcHQpIHtcbiAgICAgICAgamF2YVNjcmlwdCA9IFtdO1xuICAgICAgfVxuXG4gICAgICBqYXZhU2NyaXB0LnB1c2goKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShqcykpO1xuICAgIH1cblxuICAgIGlmIChvYmogJiYgb2JqLmhhcyhcIkphdmFTY3JpcHRcIikpIHtcbiAgICAgIGNvbnN0IG5hbWVUcmVlID0gbmV3IE5hbWVUcmVlKG9iai5nZXRSYXcoXCJKYXZhU2NyaXB0XCIpLCB0aGlzLnhyZWYpO1xuICAgICAgY29uc3QgbmFtZXMgPSBuYW1lVHJlZS5nZXRBbGwoKTtcblxuICAgICAgZm9yIChjb25zdCBuYW1lIGluIG5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGpzRGljdCA9IG5hbWVzW25hbWVdO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShqc0RpY3QpKSB7XG4gICAgICAgICAgYXBwZW5kSWZKYXZhU2NyaXB0RGljdChqc0RpY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbkFjdGlvbiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvcGVuQWN0aW9uKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcGVuQWN0aW9uLmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgYXBwZW5kSWZKYXZhU2NyaXB0RGljdChvcGVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJqYXZhU2NyaXB0XCIsIGphdmFTY3JpcHQpO1xuICB9XG5cbiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih0cmFuc2xhdGVkRm9udHMgPT4ge1xuICAgICAgZm9yIChjb25zdCB0cmFuc2xhdGVkRm9udCBvZiB0cmFuc2xhdGVkRm9udHMpIHtcbiAgICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmxvYWRlZE5hbWUgPT09IGlkKSB7XG4gICAgICAgICAgdHJhbnNsYXRlZEZvbnQuZmFsbGJhY2soaGFuZGxlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkID0gZmFsc2UpIHtcbiAgICAoMCwgX3ByaW1pdGl2ZXMuY2xlYXJQcmltaXRpdmVDYWNoZXMpKCk7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmNsZWFyKG1hbnVhbGx5VHJpZ2dlcmVkKTtcbiAgICB0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZS5jbGVhcigpO1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgdGhpcy5mb250Q2FjaGUuZm9yRWFjaChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odHJhbnNsYXRlZEZvbnRzID0+IHtcbiAgICAgIGZvciAoY29uc3Qge1xuICAgICAgICBkaWN0XG4gICAgICB9IG9mIHRyYW5zbGF0ZWRGb250cykge1xuICAgICAgICBkZWxldGUgZGljdC50cmFuc2xhdGVkO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQYWdlRGljdChwYWdlSW5kZXgpIHtcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIGNvbnN0IG5vZGVzVG9WaXNpdCA9IFt0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VzXCIpXTtcbiAgICBjb25zdCB2aXNpdGVkTm9kZXMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUgPSB0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZTtcbiAgICBsZXQgY291bnQsXG4gICAgICAgIGN1cnJlbnRQYWdlSW5kZXggPSAwO1xuXG4gICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChub2Rlc1RvVmlzaXQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIGNvdW50ID0gcGFnZUtpZHNDb3VudENhY2hlLmdldChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICBpZiAoY291bnQgPiAwICYmIGN1cnJlbnRQYWdlSW5kZXggKyBjb3VudCA8IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2aXNpdGVkTm9kZXMucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB4cmVmLmZldGNoQXN5bmMoY3VycmVudE5vZGUpLnRoZW4oZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaiwgXCJQYWdlXCIpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikgJiYgIW9iai5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChwYWdlSW5kZXggPT09IGN1cnJlbnRQYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KGN1cnJlbnROb2RlLCAxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoW29iaiwgY3VycmVudE5vZGVdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChvYmopO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC5cIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvdW50ID0gY3VycmVudE5vZGUuZ2V0KFwiQ291bnRcIik7XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY291bnQpICYmIGNvdW50ID49IDApIHtcbiAgICAgICAgICBjb25zdCBvYmpJZCA9IGN1cnJlbnROb2RlLm9iaklkO1xuXG4gICAgICAgICAgaWYgKG9iaklkICYmICFwYWdlS2lkc0NvdW50Q2FjaGUuaGFzKG9iaklkKSkge1xuICAgICAgICAgICAgcGFnZUtpZHNDb3VudENhY2hlLnB1dChvYmpJZCwgY291bnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ICsgY291bnQgPD0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2lkcyA9IGN1cnJlbnROb2RlLmdldChcIktpZHNcIik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGN1cnJlbnROb2RlLmdldChcIlR5cGVcIiksIFwiUGFnZVwiKSB8fCAhY3VycmVudE5vZGUuaGFzKFwiVHlwZVwiKSAmJiBjdXJyZW50Tm9kZS5oYXMoXCJDb250ZW50c1wiKSkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSW5kZXggPT09IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoW2N1cnJlbnROb2RlLCBudWxsXSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS5cIikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGxhc3QgPSBraWRzLmxlbmd0aCAtIDE7IGxhc3QgPj0gMDsgbGFzdC0tKSB7XG4gICAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2goa2lkc1tsYXN0XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKGBQYWdlIGluZGV4ICR7cGFnZUluZGV4fSBub3QgZm91bmQuYCkpO1xuICAgIH1cblxuICAgIG5leHQoKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZ2V0UGFnZUluZGV4KHBhZ2VSZWYpIHtcbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgZnVuY3Rpb24gcGFnZXNCZWZvcmVSZWYoa2lkUmVmKSB7XG4gICAgICBsZXQgdG90YWwgPSAwLFxuICAgICAgICAgIHBhcmVudFJlZjtcbiAgICAgIHJldHVybiB4cmVmLmZldGNoQXN5bmMoa2lkUmVmKS50aGVuKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWZzRXF1YWwpKGtpZFJlZiwgcGFnZVJlZikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vZGUsIFwiUGFnZVwiKSAmJiAhKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vZGUpICYmICFub2RlLmhhcyhcIlR5cGVcIikgJiYgbm9kZS5oYXMoXCJDb250ZW50c1wiKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudFJlZiA9IG5vZGUuZ2V0UmF3KFwiUGFyZW50XCIpO1xuICAgICAgICByZXR1cm4gbm9kZS5nZXRBc3luYyhcIlBhcmVudFwiKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJlbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFyZW50IG11c3QgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJlbnQuZ2V0QXN5bmMoXCJLaWRzXCIpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2lkcykge1xuICAgICAgICBpZiAoIWtpZHMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtpZFByb21pc2VzID0gW107XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGtpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtpZCA9IGtpZHNbaV07XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiS2lkIG11c3QgYmUgYSByZWZlcmVuY2UuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWZzRXF1YWwpKGtpZCwga2lkUmVmKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAga2lkUHJvbWlzZXMucHVzaCh4cmVmLmZldGNoQXN5bmMoa2lkKS50aGVuKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvYmouaGFzKFwiQ291bnRcIikpIHtcbiAgICAgICAgICAgICAgdG90YWwgKz0gb2JqLmdldChcIkNvdW50XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG90YWwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoa2lkUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBbdG90YWwsIHBhcmVudFJlZl07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsID0gMDtcblxuICAgIGZ1bmN0aW9uIG5leHQocmVmKSB7XG4gICAgICByZXR1cm4gcGFnZXNCZWZvcmVSZWYocmVmKS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtjb3VudCwgcGFyZW50UmVmXSA9IGFyZ3M7XG4gICAgICAgIHRvdGFsICs9IGNvdW50O1xuICAgICAgICByZXR1cm4gbmV4dChwYXJlbnRSZWYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQocGFnZVJlZik7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VEZXN0RGljdGlvbmFyeShwYXJhbXMpIHtcbiAgICBmdW5jdGlvbiBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpIHtcbiAgICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aChcInd3dy5cIikgPyBgaHR0cDovLyR7dXJsfWAgOiB1cmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJ5Q29udmVydFVybEVuY29kaW5nKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb1VURjhTdHJpbmcpKHVybCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGVzdERpY3QgPSBwYXJhbXMuZGVzdERpY3Q7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3REaWN0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0T2JqID0gcGFyYW1zLnJlc3VsdE9iajtcblxuICAgIGlmICh0eXBlb2YgcmVzdWx0T2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgcmVzdWx0T2JqYCBtdXN0IGJlIGFuIG9iamVjdC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9jQmFzZVVybCA9IHBhcmFtcy5kb2NCYXNlVXJsIHx8IG51bGw7XG4gICAgbGV0IGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkFcIiksXG4gICAgICAgIHVybCxcbiAgICAgICAgZGVzdDtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSAmJiBkZXN0RGljdC5oYXMoXCJEZXN0XCIpKSB7XG4gICAgICBhY3Rpb24gPSBkZXN0RGljdC5nZXQoXCJEZXN0XCIpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhY3Rpb24pKSB7XG4gICAgICBjb25zdCBhY3Rpb25UeXBlID0gYWN0aW9uLmdldChcIlNcIik7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uVHlwZSkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogSW52YWxpZCB0eXBlIGluIEFjdGlvbiBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uVHlwZS5uYW1lO1xuXG4gICAgICBzd2l0Y2ggKGFjdGlvbk5hbWUpIHtcbiAgICAgICAgY2FzZSBcIlVSSVwiOlxuICAgICAgICAgIHVybCA9IGFjdGlvbi5nZXQoXCJVUklcIik7XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodXJsKSkge1xuICAgICAgICAgICAgdXJsID0gXCIvXCIgKyB1cmwubmFtZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodXJsKSkge1xuICAgICAgICAgICAgdXJsID0gYWRkRGVmYXVsdFByb3RvY29sVG9VcmwodXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiR29Ub1wiOlxuICAgICAgICAgIGRlc3QgPSBhY3Rpb24uZ2V0KFwiRFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTGF1bmNoXCI6XG4gICAgICAgIGNhc2UgXCJHb1RvUlwiOlxuICAgICAgICAgIGNvbnN0IHVybERpY3QgPSBhY3Rpb24uZ2V0KFwiRlwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh1cmxEaWN0KSkge1xuICAgICAgICAgICAgdXJsID0gdXJsRGljdC5nZXQoXCJGXCIpIHx8IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybERpY3QpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmxEaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW1vdGVEZXN0ID0gYWN0aW9uLmdldChcIkRcIik7XG5cbiAgICAgICAgICBpZiAocmVtb3RlRGVzdCkge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJlbW90ZURlc3QpKSB7XG4gICAgICAgICAgICAgIHJlbW90ZURlc3QgPSByZW1vdGVEZXN0Lm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHVybC5zcGxpdChcIiNcIilbMF07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyByZW1vdGVEZXN0O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyBKU09OLnN0cmluZ2lmeShyZW1vdGVEZXN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IGFjdGlvbi5nZXQoXCJOZXdXaW5kb3dcIik7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkobmV3V2luZG93KSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IG5ld1dpbmRvdztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTmFtZWRcIjpcbiAgICAgICAgICBjb25zdCBuYW1lZEFjdGlvbiA9IGFjdGlvbi5nZXQoXCJOXCIpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWVkQWN0aW9uKSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLmFjdGlvbiA9IG5hbWVkQWN0aW9uLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkphdmFTY3JpcHRcIjpcbiAgICAgICAgICBjb25zdCBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoXCJKU1wiKTtcbiAgICAgICAgICBsZXQganM7XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzQWN0aW9uLmdldEJ5dGVzKCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgIGpzID0ganNBY3Rpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGpzKSB7XG4gICAgICAgICAgICBjb25zdCBVUkxfT1BFTl9NRVRIT0RTID0gW1wiYXBwLmxhdW5jaFVSTFwiLCBcIndpbmRvdy5vcGVuXCJdO1xuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcIiArIFVSTF9PUEVOX01FVEhPRFMuam9pbihcInxcIikuc3BsaXQoXCIuXCIpLmpvaW4oXCJcXFxcLlwiKSArIFwiKVxcXFwoKD86J3xcXFwiKShbXidcXFwiXSopKD86J3xcXFwiKSg/OixcXFxccyooXFxcXHcrKVxcXFwpfFxcXFwpKVwiLCBcImlcIik7XG4gICAgICAgICAgICBjb25zdCBqc1VybCA9IHJlZ2V4LmV4ZWMoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShqcykpO1xuXG4gICAgICAgICAgICBpZiAoanNVcmwgJiYganNVcmxbMl0pIHtcbiAgICAgICAgICAgICAgdXJsID0ganNVcmxbMl07XG5cbiAgICAgICAgICAgICAgaWYgKGpzVXJsWzNdID09PSBcInRydWVcIiAmJiBqc1VybFsxXSA9PT0gXCJhcHAubGF1bmNoVVJMXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgcGFyc2VEZXN0RGljdGlvbmFyeTogdW5zdXBwb3J0ZWQgYWN0aW9uIHR5cGUgXCIke2FjdGlvbk5hbWV9XCIuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZXN0RGljdC5oYXMoXCJEZXN0XCIpKSB7XG4gICAgICBkZXN0ID0gZGVzdERpY3QuZ2V0KFwiRGVzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICB1cmwgPSB0cnlDb252ZXJ0VXJsRW5jb2RpbmcodXJsKTtcbiAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHVybCwgZG9jQmFzZVVybCk7XG5cbiAgICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgICByZXN1bHRPYmoudXJsID0gYWJzb2x1dGVVcmwuaHJlZjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0T2JqLnVuc2FmZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBpZiAoZGVzdCkge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRlc3QpKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGRlc3QpIHx8IEFycmF5LmlzQXJyYXkoZGVzdCkpIHtcbiAgICAgICAgcmVzdWx0T2JqLmRlc3QgPSBkZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2F0YWxvZyA9IENhdGFsb2c7XG5cbnZhciBYUmVmID0gZnVuY3Rpb24gWFJlZkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFhSZWYoc3RyZWFtLCBwZGZNYW5hZ2VyKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgICB0aGlzLnhyZWZzdG1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9jYWNoZU1hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgc3RyZWFtVHlwZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICBmb250VHlwZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB9O1xuICAgIHRoaXMuX25ld1JlZk51bSA9IG51bGw7XG4gIH1cblxuICBYUmVmLnByb3RvdHlwZSA9IHtcbiAgICBnZXROZXdSZWY6IGZ1bmN0aW9uIFhSZWZfZ2V0TmV3UmVmKCkge1xuICAgICAgaWYgKHRoaXMuX25ld1JlZk51bSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9uZXdSZWZOdW0gPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuUmVmLmdldCh0aGlzLl9uZXdSZWZOdW0rKywgMCk7XG4gICAgfSxcbiAgICByZXNldE5ld1JlZjogZnVuY3Rpb24gWFJlZl9yZXNldE5ld1JlZigpIHtcbiAgICAgIHRoaXMuX25ld1JlZk51bSA9IG51bGw7XG4gICAgfSxcbiAgICBzZXRTdGFydFhSZWY6IGZ1bmN0aW9uIFhSZWZfc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZSA9IFtzdGFydFhSZWZdO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIFhSZWZfcGFyc2UocmVjb3ZlcnlNb2RlKSB7XG4gICAgICB2YXIgdHJhaWxlckRpY3Q7XG5cbiAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5yZWFkWFJlZigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5kZXhpbmcgYWxsIFBERiBvYmplY3RzXCIpO1xuICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgICB9XG5cbiAgICAgIHRyYWlsZXJEaWN0LmFzc2lnblhyZWYodGhpcyk7XG4gICAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICAgIGxldCBlbmNyeXB0O1xuXG4gICAgICB0cnkge1xuICAgICAgICBlbmNyeXB0ID0gdHJhaWxlckRpY3QuZ2V0KFwiRW5jcnlwdFwiKTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkIFwiRW5jcnlwdFwiIHJlZmVyZW5jZTogXCIke2V4fVwiLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgdmFyIGlkcyA9IHRyYWlsZXJEaWN0LmdldChcIklEXCIpO1xuICAgICAgICB2YXIgZmlsZUlkID0gaWRzICYmIGlkcy5sZW5ndGggPyBpZHNbMF0gOiBcIlwiO1xuICAgICAgICBlbmNyeXB0LnN1cHByZXNzRW5jcnlwdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZW5jcnlwdCA9IG5ldyBfY3J5cHRvLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkoZW5jcnlwdCwgZmlsZUlkLCB0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcm9vdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcm9vdCA9IHRyYWlsZXJEaWN0LmdldChcIlJvb3RcIik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCBcIlJvb3RcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHJvb3QpICYmIHJvb3QuaGFzKFwiUGFnZXNcIikpIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCByb290IHJlZmVyZW5jZVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb2Nlc3NYUmVmVGFibGU6IGZ1bmN0aW9uIFhSZWZfcHJvY2Vzc1hSZWZUYWJsZShwYXJzZXIpIHtcbiAgICAgIGlmICghKFwidGFibGVTdGF0ZVwiIGluIHRoaXMpKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZSA9IHtcbiAgICAgICAgICBlbnRyeU51bTogMCxcbiAgICAgICAgICBzdHJlYW1Qb3M6IHBhcnNlci5sZXhlci5zdHJlYW0ucG9zLFxuICAgICAgICAgIHBhcnNlckJ1ZjE6IHBhcnNlci5idWYxLFxuICAgICAgICAgIHBhcnNlckJ1ZjI6IHBhcnNlci5idWYyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBvYmogPSB0aGlzLnJlYWRYUmVmVGFibGUocGFyc2VyKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5XCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSAmJiBkaWN0LmRpY3QpIHtcbiAgICAgICAgZGljdCA9IGRpY3QuZGljdDtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBwYXJzZSB0cmFpbGVyIGRpY3Rpb25hcnlcIik7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICByZXR1cm4gZGljdDtcbiAgICB9LFxuICAgIHJlYWRYUmVmVGFibGU6IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWZUYWJsZShwYXJzZXIpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgICAgdmFyIHRhYmxlU3RhdGUgPSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICBzdHJlYW0ucG9zID0gdGFibGVTdGF0ZS5zdHJlYW1Qb3M7XG4gICAgICBwYXJzZXIuYnVmMSA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMTtcbiAgICAgIHBhcnNlci5idWYyID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYyO1xuICAgICAgdmFyIG9iajtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEoXCJmaXJzdEVudHJ5TnVtXCIgaW4gdGFibGVTdGF0ZSkgfHwgIShcImVudHJ5Q291bnRcIiBpbiB0YWJsZVN0YXRlKSkge1xuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiA9IHBhcnNlci5nZXRPYmooKSwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW0gPSBvYmo7XG4gICAgICAgICAgdGFibGVTdGF0ZS5lbnRyeUNvdW50ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpcnN0ID0gdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtO1xuICAgICAgICB2YXIgY291bnQgPSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihjb3VudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IHRhYmxlU3RhdGUuZW50cnlOdW07IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSBpO1xuICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMiA9IHBhcnNlci5idWYyO1xuICAgICAgICAgIHZhciBlbnRyeSA9IHt9O1xuICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICBlbnRyeS5nZW4gPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgdmFyIHR5cGUgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlLmNtZCkge1xuICAgICAgICAgICAgICBjYXNlIFwiZlwiOlxuICAgICAgICAgICAgICAgIGVudHJ5LmZyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJuXCI6XG4gICAgICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZW50cnkub2Zmc2V0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihlbnRyeS5nZW4pIHx8ICEoZW50cnkuZnJlZSB8fCBlbnRyeS51bmNvbXByZXNzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAke2ZpcnN0fSwgJHtjb3VudH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBlbnRyeS5mcmVlICYmIGZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICBmaXJzdCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbaSArIGZpcnN0XSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0gPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gMDtcbiAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjEgPSBwYXJzZXIuYnVmMTtcbiAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYyID0gcGFyc2VyLmJ1ZjI7XG4gICAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW07XG4gICAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudHJpZXNbMF0gJiYgIXRoaXMuZW50cmllc1swXS5mcmVlKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBwcm9jZXNzWFJlZlN0cmVhbTogZnVuY3Rpb24gWFJlZl9wcm9jZXNzWFJlZlN0cmVhbShzdHJlYW0pIHtcbiAgICAgIGlmICghKFwic3RyZWFtU3RhdGVcIiBpbiB0aGlzKSkge1xuICAgICAgICB2YXIgc3RyZWFtUGFyYW1ldGVycyA9IHN0cmVhbS5kaWN0O1xuICAgICAgICB2YXIgYnl0ZVdpZHRocyA9IHN0cmVhbVBhcmFtZXRlcnMuZ2V0KFwiV1wiKTtcbiAgICAgICAgdmFyIHJhbmdlID0gc3RyZWFtUGFyYW1ldGVycy5nZXQoXCJJbmRleFwiKTtcblxuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2UgPSBbMCwgc3RyZWFtUGFyYW1ldGVycy5nZXQoXCJTaXplXCIpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgICAgZW50cnlSYW5nZXM6IHJhbmdlLFxuICAgICAgICAgIGJ5dGVXaWR0aHMsXG4gICAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgICAgc3RyZWFtUG9zOiBzdHJlYW0ucG9zXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVhZFhSZWZTdHJlYW0oc3RyZWFtKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO1xuICAgICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICAgIH0sXG4gICAgcmVhZFhSZWZTdHJlYW06IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWZTdHJlYW0oc3RyZWFtKSB7XG4gICAgICB2YXIgaSwgajtcbiAgICAgIHZhciBzdHJlYW1TdGF0ZSA9IHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhdGUuc3RyZWFtUG9zO1xuICAgICAgdmFyIGJ5dGVXaWR0aHMgPSBzdHJlYW1TdGF0ZS5ieXRlV2lkdGhzO1xuICAgICAgdmFyIHR5cGVGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1swXTtcbiAgICAgIHZhciBvZmZzZXRGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1sxXTtcbiAgICAgIHZhciBnZW5lcmF0aW9uRmllbGRXaWR0aCA9IGJ5dGVXaWR0aHNbMl07XG4gICAgICB2YXIgZW50cnlSYW5nZXMgPSBzdHJlYW1TdGF0ZS5lbnRyeVJhbmdlcztcblxuICAgICAgd2hpbGUgKGVudHJ5UmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGZpcnN0ID0gZW50cnlSYW5nZXNbMF07XG4gICAgICAgIHZhciBuID0gZW50cnlSYW5nZXNbMV07XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih0eXBlRmllbGRXaWR0aCkgfHwgIU51bWJlci5pc0ludGVnZXIob2Zmc2V0RmllbGRXaWR0aCkgfHwgIU51bWJlci5pc0ludGVnZXIoZ2VuZXJhdGlvbkZpZWxkV2lkdGgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgc3RyZWFtU3RhdGUuZW50cnlOdW0gPSBpO1xuICAgICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgdmFyIHR5cGUgPSAwLFxuICAgICAgICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICAgICAgICBnZW5lcmF0aW9uID0gMDtcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0eXBlRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZSA8PCA4IHwgc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZUZpZWxkV2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHR5cGUgPSAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvZmZzZXRGaWVsZFdpZHRoOyArK2opIHtcbiAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCA8PCA4IHwgc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VuZXJhdGlvbkZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgICAgZ2VuZXJhdGlvbiA9IGdlbmVyYXRpb24gPDwgOCB8IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVudHJ5ID0ge307XG4gICAgICAgICAgZW50cnkub2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSB0eXBlOiAke3R5cGV9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2ZpcnN0ICsgaV0gPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IDA7XG4gICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgIGVudHJ5UmFuZ2VzLnNwbGljZSgwLCAyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4T2JqZWN0czogZnVuY3Rpb24gWFJlZl9pbmRleE9iamVjdHMoKSB7XG4gICAgICB2YXIgVEFCID0gMHg5LFxuICAgICAgICAgIExGID0gMHhhLFxuICAgICAgICAgIENSID0gMHhkLFxuICAgICAgICAgIFNQQUNFID0gMHgyMDtcbiAgICAgIHZhciBQRVJDRU5UID0gMHgyNSxcbiAgICAgICAgICBMVCA9IDB4M2M7XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRUb2tlbihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIHRva2VuID0gXCJcIixcbiAgICAgICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuXG4gICAgICAgIHdoaWxlIChjaCAhPT0gTEYgJiYgY2ggIT09IENSICYmIGNoICE9PSBMVCkge1xuICAgICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgY2ggPSBkYXRhW29mZnNldF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNraXBVbnRpbChkYXRhLCBvZmZzZXQsIHdoYXQpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHdoYXQubGVuZ3RoLFxuICAgICAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBkYXRhW29mZnNldCArIGldID09PSB3aGF0W2ldKSB7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICBza2lwcGVkKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICAgIH1cblxuICAgICAgdmFyIG9ialJlZ0V4cCA9IC9eKFxcZCspXFxzKyhcXGQrKVxccytvYmpcXGIvO1xuICAgICAgY29uc3QgZW5kb2JqUmVnRXhwID0gL1xcYmVuZG9ialtcXGJcXHNdJC87XG4gICAgICBjb25zdCBuZXN0ZWRPYmpSZWdFeHAgPSAvXFxzKyhcXGQrXFxzK1xcZCtcXHMrb2JqW1xcYlxcczxdKSQvO1xuICAgICAgY29uc3QgQ0hFQ0tfQ09OVEVOVF9MRU5HVEggPSAyNTtcbiAgICAgIHZhciB0cmFpbGVyQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTE2LCAxMTQsIDk3LCAxMDUsIDEwOCwgMTAxLCAxMTRdKTtcbiAgICAgIHZhciBzdGFydHhyZWZCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsxMTUsIDExNiwgOTcsIDExNCwgMTE2LCAxMjAsIDExNCwgMTAxLCAxMDJdKTtcbiAgICAgIGNvbnN0IG9iakJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExMSwgOTgsIDEwNl0pO1xuICAgICAgdmFyIHhyZWZCeXRlcyA9IG5ldyBVaW50OEFycmF5KFs0NywgODgsIDgyLCAxMDEsIDEwMl0pO1xuICAgICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICBzdHJlYW0ucG9zID0gMDtcbiAgICAgIHZhciBidWZmZXIgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgIHZhciBwb3NpdGlvbiA9IHN0cmVhbS5zdGFydCxcbiAgICAgICAgICBsZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgICAgdmFyIHRyYWlsZXJzID0gW10sXG4gICAgICAgICAgeHJlZlN0bXMgPSBbXTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaCA9IGJ1ZmZlcltwb3NpdGlvbl07XG5cbiAgICAgICAgaWYgKGNoID09PSBUQUIgfHwgY2ggPT09IExGIHx8IGNoID09PSBDUiB8fCBjaCA9PT0gU1BBQ0UpIHtcbiAgICAgICAgICArK3Bvc2l0aW9uO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgKytwb3NpdGlvbjtcblxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICAgIH0gd2hpbGUgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IpO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG9rZW4gPSByZWFkVG9rZW4oYnVmZmVyLCBwb3NpdGlvbik7XG4gICAgICAgIHZhciBtO1xuXG4gICAgICAgIGlmICh0b2tlbi5zdGFydHNXaXRoKFwieHJlZlwiKSAmJiAodG9rZW4ubGVuZ3RoID09PSA0IHx8IC9cXHMvLnRlc3QodG9rZW5bNF0pKSkge1xuICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCB0cmFpbGVyQnl0ZXMpO1xuICAgICAgICAgIHRyYWlsZXJzLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9IG9ialJlZ0V4cC5leGVjKHRva2VuKSkge1xuICAgICAgICAgIGNvbnN0IG51bSA9IG1bMV0gfCAwLFxuICAgICAgICAgICAgICAgIGdlbiA9IG1bMl0gfCAwO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbbnVtXSB8fCB0aGlzLmVudHJpZXNbbnVtXS5nZW4gPT09IGdlbikge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzW251bV0gPSB7XG4gICAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgIGdlbixcbiAgICAgICAgICAgICAgdW5jb21wcmVzc2VkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgICBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoO1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUG9zID0gc3RhcnRQb3MgKyBza2lwVW50aWwoYnVmZmVyLCBzdGFydFBvcywgb2JqQnl0ZXMpICsgNDtcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSBlbmRQb3MgLSBwb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrUG9zID0gTWF0aC5tYXgoZW5kUG9zIC0gQ0hFQ0tfQ09OVEVOVF9MRU5HVEgsIHN0YXJ0UG9zKTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuU3RyID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGJ1ZmZlci5zdWJhcnJheShjaGVja1BvcywgZW5kUG9zKSk7XG5cbiAgICAgICAgICAgIGlmIChlbmRvYmpSZWdFeHAudGVzdCh0b2tlblN0cikpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvYmpUb2tlbiA9IG5lc3RlZE9ialJlZ0V4cC5leGVjKHRva2VuU3RyKTtcblxuICAgICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2luZGV4T2JqZWN0czogRm91bmQgbmV3IFwib2JqXCIgaW5zaWRlIG9mIGFub3RoZXIgXCJvYmpcIiwgJyArICdjYXVzZWQgYnkgbWlzc2luZyBcImVuZG9ialwiIC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggLT0gb2JqVG9rZW5bMV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBidWZmZXIuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgY29udGVudExlbmd0aCk7XG4gICAgICAgICAgdmFyIHhyZWZUYWdPZmZzZXQgPSBza2lwVW50aWwoY29udGVudCwgMCwgeHJlZkJ5dGVzKTtcblxuICAgICAgICAgIGlmICh4cmVmVGFnT2Zmc2V0IDwgY29udGVudExlbmd0aCAmJiBjb250ZW50W3hyZWZUYWdPZmZzZXQgKyA1XSA8IDY0KSB7XG4gICAgICAgICAgICB4cmVmU3Rtcy5wdXNoKHBvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zaXRpb24gLSBzdHJlYW0uc3RhcnRdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwb3NpdGlvbiArPSBjb250ZW50TGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnN0YXJ0c1dpdGgoXCJ0cmFpbGVyXCIpICYmICh0b2tlbi5sZW5ndGggPT09IDcgfHwgL1xccy8udGVzdCh0b2tlbls3XSkpKSB7XG4gICAgICAgICAgdHJhaWxlcnMucHVzaChwb3NpdGlvbik7XG4gICAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpLCBpaTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSB4cmVmU3Rtcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICAgIHRoaXMucmVhZFhSZWYodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0cmFpbGVyRGljdDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSB0cmFpbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICAgIGFsbG93U3RyZWFtczogdHJ1ZSxcbiAgICAgICAgICByZWNvdmVyeU1vZGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ0cmFpbGVyXCIpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb290RGljdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJvb3REaWN0ID0gZGljdC5nZXQoXCJSb290XCIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdERpY3QpIHx8ICFyb290RGljdC5oYXMoXCJQYWdlc1wiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpY3QuaGFzKFwiSURcIikpIHtcbiAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYWlsZXJEaWN0ID0gZGljdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYWlsZXJEaWN0KSB7XG4gICAgICAgIHJldHVybiB0cmFpbGVyRGljdDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oXCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuXCIpO1xuICAgIH0sXG4gICAgcmVhZFhSZWY6IGZ1bmN0aW9uIFhSZWZfcmVhZFhSZWYocmVjb3ZlcnlNb2RlKSB7XG4gICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICBjb25zdCBzdGFydFhSZWZQYXJzZWRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBzdGFydFhSZWYgPSB0aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0WFJlZlBhcnNlZENhY2hlW3N0YXJ0WFJlZl0pIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuXCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhcnRYUmVmUGFyc2VkQ2FjaGVbc3RhcnRYUmVmXSA9IHRydWU7XG4gICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0WFJlZiArIHN0cmVhbS5zdGFydDtcbiAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSksXG4gICAgICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICB2YXIgZGljdDtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJ4cmVmXCIpKSB7XG4gICAgICAgICAgICBkaWN0ID0gdGhpcy5wcm9jZXNzWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IGRpY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KFwiWFJlZlN0bVwiKTtcblxuICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICB2YXIgcG9zID0gb2JqO1xuXG4gICAgICAgICAgICAgIGlmICghKHBvcyBpbiB0aGlzLnhyZWZzdG1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zXSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHBvcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlci5nZXRPYmooKSkgfHwgISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkocGFyc2VyLmdldE9iaigpLCBcIm9ialwiKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmogPSBwYXJzZXIuZ2V0T2JqKCkpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmU3RyZWFtKG9iaik7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IGRpY3Q7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJGYWlsZWQgdG8gcmVhZCBYUmVmIHN0cmVhbVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2JqID0gZGljdC5nZXQoXCJQcmV2XCIpO1xuXG4gICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG9iaik7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChvYmoubnVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50b3BEaWN0O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIih3aGlsZSByZWFkaW5nIFhSZWYpOiBcIiArIGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICB9LFxuICAgIGdldEVudHJ5OiBmdW5jdGlvbiBYUmVmX2dldEVudHJ5KGkpIHtcbiAgICAgIHZhciB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICAgIGlmICh4cmVmRW50cnkgJiYgIXhyZWZFbnRyeS5mcmVlICYmIHhyZWZFbnRyeS5vZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBmZXRjaElmUmVmOiBmdW5jdGlvbiBYUmVmX2ZldGNoSWZSZWYob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgZmV0Y2g6IGZ1bmN0aW9uIFhSZWZfZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgIGlmICghKHJlZiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2VcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bSA9IHJlZi5udW07XG5cbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLl9jYWNoZU1hcC5nZXQobnVtKTtcblxuICAgICAgaWYgKGNhY2hlRW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FjaGVFbnRyeSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgIWNhY2hlRW50cnkub2JqSWQpIHtcbiAgICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhyZWZFbnRyeSA9IHRoaXMuZ2V0RW50cnkobnVtKTtcblxuICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCB4cmVmRW50cnkpO1xuXG4gICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICB9XG5cbiAgICAgIGlmICh4cmVmRW50cnkudW5jb21wcmVzc2VkKSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHhyZWZFbnRyeSkpIHtcbiAgICAgICAgeHJlZkVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeHJlZkVudHJ5KSkge1xuICAgICAgICB4cmVmRW50cnkuZGljdC5vYmpJZCA9IHJlZi50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH0sXG5cbiAgICBmZXRjaFVuY29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2UpIHtcbiAgICAgIHZhciBnZW4gPSByZWYuZ2VuO1xuICAgICAgdmFyIG51bSA9IHJlZi5udW07XG5cbiAgICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZFbnRyeUV4Y2VwdGlvbihgSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbS5tYWtlU3ViU3RyZWFtKHhyZWZFbnRyeS5vZmZzZXQgKyB0aGlzLnN0cmVhbS5zdGFydCk7XG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHZhciBvYmoxID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICB2YXIgb2JqMyA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iajEgIT09IG51bSB8fCBvYmoyICE9PSBnZW4gfHwgIShvYmozIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSkge1xuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmozLmNtZCAhPT0gXCJvYmpcIikge1xuICAgICAgICBpZiAob2JqMy5jbWQuc3RhcnRzV2l0aChcIm9ialwiKSkge1xuICAgICAgICAgIG51bSA9IHBhcnNlSW50KG9iajMuY21kLnN1YnN0cmluZygzKSwgMTApO1xuXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVuY3J5cHQgJiYgIXN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgICB4cmVmRW50cnkgPSBwYXJzZXIuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhyZWZFbnRyeSkpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgeHJlZkVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICB9LFxuXG4gICAgZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFibGVPZmZzZXQgPSB4cmVmRW50cnkub2Zmc2V0O1xuICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy5mZXRjaChfcHJpbWl0aXZlcy5SZWYuZ2V0KHRhYmxlT2Zmc2V0LCAwKSk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImJhZCBPYmpTdG0gc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdCA9IHN0cmVhbS5kaWN0LmdldChcIkZpcnN0XCIpO1xuICAgICAgY29uc3QgbiA9IHN0cmVhbS5kaWN0LmdldChcIk5cIik7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG51bXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke251bX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke29mZnNldH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG51bXNbaV0gPSBudW07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgZW50cmllc1tpXSA9IG9iajtcblxuICAgICAgICBpZiAocGFyc2VyLmJ1ZjEgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQgJiYgcGFyc2VyLmJ1ZjEuY21kID09PSBcImVuZG9ialwiKSB7XG4gICAgICAgICAgcGFyc2VyLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmopKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW0gPSBudW1zW2ldLFxuICAgICAgICAgICAgICBlbnRyeSA9IHRoaXMuZW50cmllc1tudW1dO1xuXG4gICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICAgIHRoaXMuX2NhY2hlTWFwLnNldChudW0sIG9iaik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgeHJlZkVudHJ5ID0gZW50cmllc1t4cmVmRW50cnkuZ2VuXTtcblxuICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoSWZSZWZBc3luYyhvYmosIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEFzeW5jKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hBc3luYyhyZWYsIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoQXN5bmMocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRDYXRhbG9nT2JqOiBmdW5jdGlvbiBYUmVmX2dldENhdGFsb2dPYmooKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFhSZWY7XG59KCk7XG5cbmV4cG9ydHMuWFJlZiA9IFhSZWY7XG5cbmNsYXNzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IE5hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgY29uc3QgZGljdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoIXRoaXMucm9vdCkge1xuICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgIGNvbnN0IHF1ZXVlID0gW3RoaXMucm9vdF07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2JqID0geHJlZi5mZXRjaElmUmVmKHF1ZXVlLnNoaWZ0KCkpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmouaGFzKFwiS2lkc1wiKSkge1xuICAgICAgICBjb25zdCBraWRzID0gb2JqLmdldChcIktpZHNcIik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2lkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRHVwbGljYXRlIGVudHJ5IGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgIHByb2Nlc3NlZC5wdXQoa2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZW50cmllcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgZGljdFt4cmVmLmZldGNoSWZSZWYoZW50cmllc1tpXSldID0geHJlZi5mZXRjaElmUmVmKGVudHJpZXNbaSArIDFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0KGtleSkge1xuICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKHRoaXMucm9vdCk7XG4gICAgbGV0IGxvb3BDb3VudCA9IDA7XG4gICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuXG4gICAgd2hpbGUgKGtpZHNPckVudHJpZXMuaGFzKFwiS2lkc1wiKSkge1xuICAgICAgaWYgKCsrbG9vcENvdW50ID4gTUFYX0xFVkVMUykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciBcIiR7dGhpcy5fdHlwZX1cIiB0cmVlLmApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2lkcyA9IGtpZHNPckVudHJpZXMuZ2V0KFwiS2lkc1wiKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBsZXQgbCA9IDAsXG4gICAgICAgICAgciA9IGtpZHMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGwgPD0gcikge1xuICAgICAgICBjb25zdCBtID0gbCArIHIgPj4gMTtcbiAgICAgICAgY29uc3Qga2lkID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICBjb25zdCBsaW1pdHMgPSBraWQuZ2V0KFwiTGltaXRzXCIpO1xuXG4gICAgICAgIGlmIChrZXkgPCB4cmVmLmZldGNoSWZSZWYobGltaXRzWzBdKSkge1xuICAgICAgICAgIHIgPSBtIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPiB4cmVmLmZldGNoSWZSZWYobGltaXRzWzFdKSkge1xuICAgICAgICAgIGwgPSBtICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsID4gcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzID0ga2lkc09yRW50cmllcy5nZXQodGhpcy5fdHlwZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgbGV0IGwgPSAwLFxuICAgICAgICAgIHIgPSBlbnRyaWVzLmxlbmd0aCAtIDI7XG5cbiAgICAgIHdoaWxlIChsIDw9IHIpIHtcbiAgICAgICAgY29uc3QgdG1wID0gbCArIHIgPj4gMSxcbiAgICAgICAgICAgICAgbSA9IHRtcCArICh0bXAgJiAxKTtcbiAgICAgICAgY29uc3QgY3VycmVudEtleSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW21dKTtcblxuICAgICAgICBpZiAoa2V5IDwgY3VycmVudEtleSkge1xuICAgICAgICAgIHIgPSBtIC0gMjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPiBjdXJyZW50S2V5KSB7XG4gICAgICAgICAgbCA9IG0gKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWYoZW50cmllc1ttICsgMV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShgRmFsbGluZyBiYWNrIHRvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLCBmb3Iga2V5IFwiJHtrZXl9XCIsIGAgKyBgaW4gXCIke3RoaXMuX3R5cGV9XCIgdHJlZS5gKTtcblxuICAgICAgZm9yIChsZXQgbSA9IDAsIG1tID0gZW50cmllcy5sZW5ndGg7IG0gPCBtbTsgbSArPSAyKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRLZXkgPSB4cmVmLmZldGNoSWZSZWYoZW50cmllc1ttXSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRLZXkgPT09IGtleSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVGhlIFwiJHtrZXl9XCIga2V5IHdhcyBmb3VuZCBhdCBhbiBpbmNvcnJlY3QsIGAgKyBgaS5lLiBvdXQtb2Ytb3JkZXIsIHBvc2l0aW9uIGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW20gKyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk5hbWVzXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmKSB7XG4gICAgc3VwZXIocm9vdCwgeHJlZiwgXCJOdW1zXCIpO1xuICB9XG5cbn1cblxudmFyIEZpbGVTcGVjID0gZnVuY3Rpb24gRmlsZVNwZWNDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBGaWxlU3BlYyhyb290LCB4cmVmKSB7XG4gICAgaWYgKCFyb290IHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb290KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIGlmIChyb290LmhhcyhcIkZTXCIpKSB7XG4gICAgICB0aGlzLmZzID0gcm9vdC5nZXQoXCJGU1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcm9vdC5oYXMoXCJEZXNjXCIpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldChcIkRlc2NcIikpIDogXCJcIjtcblxuICAgIGlmIChyb290LmhhcyhcIlJGXCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcblxuICAgIGlmICghcm9vdC5oYXMoXCJFRlwiKSkge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGRpY3QpIHtcbiAgICBpZiAoZGljdC5oYXMoXCJVRlwiKSkge1xuICAgICAgcmV0dXJuIGRpY3QuZ2V0KFwiVUZcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIkZcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIkZcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIlVuaXhcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIlVuaXhcIik7XG4gICAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIk1hY1wiKSkge1xuICAgICAgcmV0dXJuIGRpY3QuZ2V0KFwiTWFjXCIpO1xuICAgIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJET1NcIikpIHtcbiAgICAgIHJldHVybiBkaWN0LmdldChcIkRPU1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEZpbGVTcGVjLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgICBpZiAoIXRoaXMuX2ZpbGVuYW1lICYmIHRoaXMucm9vdCkge1xuICAgICAgICB2YXIgZmlsZW5hbWUgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdCkgfHwgXCJ1bm5hbWVkXCI7XG4gICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShmaWxlbmFtZSkucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcXC8vZywgXCIvXCIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgfSxcblxuICAgIGdldCBjb250ZW50KCkge1xuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jb250ZW50UmVmICYmIHRoaXMucm9vdCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWYgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdC5nZXQoXCJFRlwiKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZW50ID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuY29udGVudFJlZikge1xuICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgdmFyIGZpbGVPYmogPSB4cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTtcblxuICAgICAgICBpZiAoZmlsZU9iaiAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGZpbGVPYmopKSB7XG4gICAgICAgICAgY29udGVudCA9IGZpbGVPYmouZ2V0Qnl0ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIFwiICsgXCJjb250ZW50XCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnRcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0sXG5cbiAgICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudFxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEZpbGVTcGVjO1xufSgpO1xuXG5leHBvcnRzLkZpbGVTcGVjID0gRmlsZVNwZWM7XG5cbmNvbnN0IE9iamVjdExvYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmIHx8IHZhbHVlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUsIG5vZGVzVG9WaXNpdCkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgbm9kZSA9IG5vZGUuZ2V0UmF3VmFsdWVzKCk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vZGUpKSB7XG4gICAgICBub2RlID0gbm9kZS5kaWN0LmdldFJhd1ZhbHVlcygpO1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJhd1ZhbHVlIG9mIG5vZGUpIHtcbiAgICAgIGlmIChtYXlIYXZlQ2hpbGRyZW4ocmF3VmFsdWUpKSB7XG4gICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoZGljdCwga2V5cywgeHJlZikge1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgIHRoaXMucmVmU2V0ID0gbnVsbDtcbiAgfVxuXG4gIE9iamVjdExvYWRlci5wcm90b3R5cGUgPSB7XG4gICAgYXN5bmMgbG9hZCgpIHtcbiAgICAgIGlmICghdGhpcy54cmVmLnN0cmVhbS5hbGxDaHVua3NMb2FkZWQgfHwgdGhpcy54cmVmLnN0cmVhbS5hbGxDaHVua3NMb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGtleXMsXG4gICAgICAgIGRpY3RcbiAgICAgIH0gPSB0aGlzO1xuICAgICAgdGhpcy5yZWZTZXQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgICBjb25zdCBub2Rlc1RvVmlzaXQgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZGljdC5nZXRSYXcoa2V5c1tpXSk7XG5cbiAgICAgICAgaWYgKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3dhbGsobm9kZXNUb1Zpc2l0KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgX3dhbGsobm9kZXNUb1Zpc2l0KSB7XG4gICAgICBjb25zdCBub2Rlc1RvUmV2aXNpdCA9IFtdO1xuICAgICAgY29uc3QgcGVuZGluZ1JlcXVlc3RzID0gW107XG5cbiAgICAgIHdoaWxlIChub2Rlc1RvVmlzaXQubGVuZ3RoKSB7XG4gICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVzVG9WaXNpdC5wb3AoKTtcblxuICAgICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZWZTZXQuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVmU2V0LnB1dChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMueHJlZi5mZXRjaChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmICghKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pKSB7XG4gICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgYmVnaW46IGV4LmJlZ2luLFxuICAgICAgICAgICAgICBlbmQ6IGV4LmVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLmdldEJhc2VTdHJlYW1zKSB7XG4gICAgICAgICAgY29uc3QgYmFzZVN0cmVhbXMgPSBjdXJyZW50Tm9kZS5nZXRCYXNlU3RyZWFtcygpO1xuICAgICAgICAgIGxldCBmb3VuZE1pc3NpbmdEYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBiYXNlU3RyZWFtcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJlYW0gPSBiYXNlU3RyZWFtc1tpXTtcblxuICAgICAgICAgICAgaWYgKHN0cmVhbS5hbGxDaHVua3NMb2FkZWQgJiYgIXN0cmVhbS5hbGxDaHVua3NMb2FkZWQoKSkge1xuICAgICAgICAgICAgICBmb3VuZE1pc3NpbmdEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzLnB1c2goe1xuICAgICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kOiBzdHJlYW0uZW5kXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmb3VuZE1pc3NpbmdEYXRhKSB7XG4gICAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhZGRDaGlsZHJlbihjdXJyZW50Tm9kZSwgbm9kZXNUb1Zpc2l0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBub2Rlc1RvUmV2aXNpdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzVG9SZXZpc2l0W2ldO1xuXG4gICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgIHRoaXMucmVmU2V0LnJlbW92ZShub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fd2Fsayhub2Rlc1RvUmV2aXNpdCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmU2V0ID0gbnVsbDtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBPYmplY3RMb2FkZXI7XG59KCk7XG5cbmV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuXG4vKioqLyB9KSxcbi8qIDExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IGV4cG9ydHMuTGluZWFyaXphdGlvbiA9IGV4cG9ydHMuTGV4ZXIgPSB2b2lkIDA7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfY2NpdHRfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMyk7XG5cbnZhciBfamJpZzJfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxNSk7XG5cbnZhciBfanBlZ19zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9qcHhfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygyMCk7XG5cbmNvbnN0IE1BWF9MRU5HVEhfVE9fQ0FDSEUgPSAxMDAwO1xuY29uc3QgTUFYX0FETEVSMzJfTEVOR1RIID0gNTU1MjtcblxuZnVuY3Rpb24gY29tcHV0ZUFkbGVyMzIoYnl0ZXMpIHtcbiAgY29uc3QgYnl0ZXNMZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gIGxldCBhID0gMSxcbiAgICAgIGIgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXNMZW5ndGg7ICsraSkge1xuICAgIGEgKz0gYnl0ZXNbaV0gJiAweGZmO1xuICAgIGIgKz0gYTtcbiAgfVxuXG4gIHJldHVybiBiICUgNjU1MjEgPDwgMTYgfCBhICUgNjU1MjE7XG59XG5cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBsZXhlcixcbiAgICB4cmVmLFxuICAgIGFsbG93U3RyZWFtcyA9IGZhbHNlLFxuICAgIHJlY292ZXJ5TW9kZSA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmFsbG93U3RyZWFtcyA9IGFsbG93U3RyZWFtcztcbiAgICB0aGlzLnJlY292ZXJ5TW9kZSA9IHJlY292ZXJ5TW9kZTtcbiAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMucmVmaWxsKCk7XG4gIH1cblxuICByZWZpbGwoKSB7XG4gICAgdGhpcy5idWYxID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMuYnVmMiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCAmJiB0aGlzLmJ1ZjIuY21kID09PSBcIklEXCIpIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IHRoaXMubGV4ZXIuZ2V0T2JqKCk7XG4gICAgfVxuICB9XG5cbiAgdHJ5U2hpZnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldE9iaihjaXBoZXJUcmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgY29uc3QgYnVmMSA9IHRoaXMuYnVmMTtcbiAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICBpZiAoYnVmMSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgc3dpdGNoIChidWYxLmNtZCkge1xuICAgICAgICBjYXNlIFwiQklcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKTtcblxuICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG5cbiAgICAgICAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYxLCBcIl1cIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgYXJyYXkucHVzaCh0aGlzLmdldE9iaihjaXBoZXJUcmFuc2Zvcm0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkVuZCBvZiBmaWxlIGluc2lkZSBhcnJheVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7XG5cbiAgICAgICAgY2FzZSBcIjw8XCI6XG4gICAgICAgICAgY29uc3QgZGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHRoaXMueHJlZik7XG5cbiAgICAgICAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYxLCBcIj4+XCIpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5idWYxLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpY3Quc2V0KGtleSwgdGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCBcInN0cmVhbVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zID8gdGhpcy5tYWtlU3RyZWFtKGRpY3QsIGNpcGhlclRyYW5zZm9ybSkgOiBkaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICByZXR1cm4gZGljdDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBidWYxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGJ1ZjEpKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpICYmICgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCBcIlJcIikpIHtcbiAgICAgICAgY29uc3QgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChidWYxLCB0aGlzLmJ1ZjEpO1xuXG4gICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICByZXR1cm4gcmVmO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmMTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJ1ZjEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIGNpcGhlclRyYW5zZm9ybS5kZWNyeXB0U3RyaW5nKGJ1ZjEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmMTtcbiAgfVxuXG4gIGZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgIGNvbnN0IEUgPSAweDQ1LFxuICAgICAgICAgIEkgPSAweDQ5LFxuICAgICAgICAgIFNQQUNFID0gMHgyMCxcbiAgICAgICAgICBMRiA9IDB4YSxcbiAgICAgICAgICBDUiA9IDB4ZCxcbiAgICAgICAgICBOVUwgPSAweDA7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyLFxuICAgICAgICAgIHN0YXJ0UG9zID0gc3RyZWFtLnBvcyxcbiAgICAgICAgICBuID0gMTA7XG4gICAgbGV0IHN0YXRlID0gMCxcbiAgICAgICAgY2gsXG4gICAgICAgIG1heWJlRUlQb3M7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IDApIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gRSA/IDEgOiAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkge1xuICAgICAgICBzdGF0ZSA9IGNoID09PSBJID8gMiA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShzdGF0ZSA9PT0gMiwgXCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGludmFsaWQgc3RhdGUuXCIpO1xuXG4gICAgICAgIGlmIChjaCA9PT0gU1BBQ0UgfHwgY2ggPT09IExGIHx8IGNoID09PSBDUikge1xuICAgICAgICAgIG1heWJlRUlQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgIGNvbnN0IGZvbGxvd2luZ0J5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhuKTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZvbGxvd2luZ0J5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIGNoID0gZm9sbG93aW5nQnl0ZXNbaV07XG5cbiAgICAgICAgICAgIGlmIChjaCA9PT0gTlVMICYmIGZvbGxvd2luZ0J5dGVzW2kgKyAxXSAhPT0gTlVMKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiAoY2ggPCBTUEFDRSB8fCBjaCA+IDB4N2YpKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlICE9PSAyKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGV4ZXIua25vd25Db21tYW5kcykge1xuICAgICAgICAgICAgY29uc3QgbmV4dE9iaiA9IGxleGVyLnBlZWtPYmooKTtcblxuICAgICAgICAgICAgaWYgKG5leHRPYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQgJiYgIWxleGVyLmtub3duQ29tbWFuZHNbbmV4dE9iai5jbWRdKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBgbGV4ZXIua25vd25Db21tYW5kc2AgaXMgdW5kZWZpbmVkLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUgPT09IDIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IC0xKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZDogXCIgKyBcIlJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlclwiKTtcblxuICAgICAgaWYgKG1heWJlRUlQb3MpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgXCJFSVwiIG9jY3VycmVuY2UuJyk7XG4gICAgICAgIHN0cmVhbS5za2lwKC0oc3RyZWFtLnBvcyAtIG1heWJlRUlQb3MpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZW5kT2Zmc2V0ID0gNDtcbiAgICBzdHJlYW0uc2tpcCgtZW5kT2Zmc2V0KTtcbiAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgIHN0cmVhbS5za2lwKGVuZE9mZnNldCk7XG5cbiAgICBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgZW5kT2Zmc2V0LS07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBlbmRPZmZzZXQgLSBzdGFydFBvcztcbiAgfVxuXG4gIGZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBmb3VuZEVPSSA9IGZhbHNlLFxuICAgICAgICBiLFxuICAgICAgICBtYXJrZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAoKGIgPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChiICE9PSAweGZmKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHN0cmVhbS5nZXRCeXRlKCkpIHtcbiAgICAgICAgY2FzZSAweDAwOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhmZjpcbiAgICAgICAgICBzdHJlYW0uc2tpcCgtMSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGQ5OlxuICAgICAgICAgIGZvdW5kRU9JID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4YzA6XG4gICAgICAgIGNhc2UgMHhjMTpcbiAgICAgICAgY2FzZSAweGMyOlxuICAgICAgICBjYXNlIDB4YzM6XG4gICAgICAgIGNhc2UgMHhjNTpcbiAgICAgICAgY2FzZSAweGM2OlxuICAgICAgICBjYXNlIDB4Yzc6XG4gICAgICAgIGNhc2UgMHhjOTpcbiAgICAgICAgY2FzZSAweGNhOlxuICAgICAgICBjYXNlIDB4Y2I6XG4gICAgICAgIGNhc2UgMHhjZDpcbiAgICAgICAgY2FzZSAweGNlOlxuICAgICAgICBjYXNlIDB4Y2Y6XG4gICAgICAgIGNhc2UgMHhjNDpcbiAgICAgICAgY2FzZSAweGNjOlxuICAgICAgICBjYXNlIDB4ZGE6XG4gICAgICAgIGNhc2UgMHhkYjpcbiAgICAgICAgY2FzZSAweGRjOlxuICAgICAgICBjYXNlIDB4ZGQ6XG4gICAgICAgIGNhc2UgMHhkZTpcbiAgICAgICAgY2FzZSAweGRmOlxuICAgICAgICBjYXNlIDB4ZTA6XG4gICAgICAgIGNhc2UgMHhlMTpcbiAgICAgICAgY2FzZSAweGUyOlxuICAgICAgICBjYXNlIDB4ZTM6XG4gICAgICAgIGNhc2UgMHhlNDpcbiAgICAgICAgY2FzZSAweGU1OlxuICAgICAgICBjYXNlIDB4ZTY6XG4gICAgICAgIGNhc2UgMHhlNzpcbiAgICAgICAgY2FzZSAweGU4OlxuICAgICAgICBjYXNlIDB4ZTk6XG4gICAgICAgIGNhc2UgMHhlYTpcbiAgICAgICAgY2FzZSAweGViOlxuICAgICAgICBjYXNlIDB4ZWM6XG4gICAgICAgIGNhc2UgMHhlZDpcbiAgICAgICAgY2FzZSAweGVlOlxuICAgICAgICBjYXNlIDB4ZWY6XG4gICAgICAgIGNhc2UgMHhmZTpcbiAgICAgICAgICBtYXJrZXJMZW5ndGggPSBzdHJlYW0uZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICBpZiAobWFya2VyTGVuZ3RoID4gMikge1xuICAgICAgICAgICAgc3RyZWFtLnNraXAobWFya2VyTGVuZ3RoIC0gMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbS5za2lwKC0yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kRU9JKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdGFydFBvcztcblxuICAgIGlmIChiID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5saW5lIERDVERlY29kZSBpbWFnZSBzdHJlYW06IFwiICsgXCJFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuXCIpO1xuICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgIGNvbnN0IFRJTERFID0gMHg3ZSxcbiAgICAgICAgICBHVCA9IDB4M2U7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gVElMREUpIHtcbiAgICAgICAgY29uc3QgdGlsZGVQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuXG4gICAgICAgIHdoaWxlICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjaCkpIHtcbiAgICAgICAgICBzdHJlYW0uc2tpcCgpO1xuICAgICAgICAgIGNoID0gc3RyZWFtLnBlZWtCeXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09IEdUKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXAoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW0ucG9zID4gdGlsZGVQb3MpIHtcbiAgICAgICAgICBjb25zdCBtYXliZUVJID0gc3RyZWFtLnBlZWtCeXRlcygyKTtcblxuICAgICAgICAgIGlmIChtYXliZUVJWzBdID09PSAweDQ1ICYmIG1heWJlRUlbMV0gPT09IDB4NDkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdGFydFBvcztcblxuICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogXCIgKyBcIkVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC5cIik7XG4gICAgICBzdHJlYW0uc2tpcCgtbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgIGNvbnN0IEdUID0gMHgzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3M7XG4gICAgbGV0IGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKGNoID09PSBHVCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICBpZiAoY2ggPT09IC0xKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmxpbmUgQVNDSUlIZXhEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBcIiArIFwiRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLlwiKTtcbiAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBpbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKSB7XG4gICAgY29uc3QgRSA9IDB4NDUsXG4gICAgICAgICAgSSA9IDB4NDk7XG4gICAgbGV0IHN0YXRlID0gMCxcbiAgICAgICAgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IDApIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gRSA/IDEgOiAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkge1xuICAgICAgICBzdGF0ZSA9IGNoID09PSBJID8gMiA6IDA7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1ha2VJbmxpbmVJbWFnZShjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICBjb25zdCBsZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgY29uc3Qgc3RyZWFtID0gbGV4ZXIuc3RyZWFtO1xuICAgIGNvbnN0IGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuICAgIGxldCBkaWN0TGVuZ3RoO1xuXG4gICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMSwgXCJJRFwiKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzRU9GKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1ZjEubmFtZTtcbiAgICAgIHRoaXMuc2hpZnQoKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGljdC5zZXQoa2V5LCB0aGlzLmdldE9iaihjaXBoZXJUcmFuc2Zvcm0pKTtcbiAgICB9XG5cbiAgICBpZiAobGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcyAhPT0gLTEpIHtcbiAgICAgIGRpY3RMZW5ndGggPSBzdHJlYW0ucG9zIC0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSBkaWN0LmdldChcIkZpbHRlclwiLCBcIkZcIik7XG4gICAgbGV0IGZpbHRlck5hbWU7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgZmlsdGVyTmFtZSA9IGZpbHRlci5uYW1lO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJaZXJvID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyWzBdKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlclplcm8pKSB7XG4gICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXJaZXJvLm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBsZW5ndGg7XG5cbiAgICBpZiAoZmlsdGVyTmFtZSA9PT0gXCJEQ1REZWNvZGVcIiB8fCBmaWx0ZXJOYW1lID09PSBcIkRDVFwiKSB7XG4gICAgICBsZW5ndGggPSB0aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlck5hbWUgPT09IFwiQVNDSUk4NURlY29kZVwiIHx8IGZpbHRlck5hbWUgPT09IFwiQTg1XCIpIHtcbiAgICAgIGxlbmd0aCA9IHRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlck5hbWUgPT09IFwiQVNDSUlIZXhEZWNvZGVcIiB8fCBmaWx0ZXJOYW1lID09PSBcIkFIeFwiKSB7XG4gICAgICBsZW5ndGggPSB0aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgbGV0IGltYWdlU3RyZWFtID0gc3RyZWFtLm1ha2VTdWJTdHJlYW0oc3RhcnRQb3MsIGxlbmd0aCwgZGljdCk7XG4gICAgbGV0IGNhY2hlS2V5O1xuXG4gICAgaWYgKGxlbmd0aCA8IE1BWF9MRU5HVEhfVE9fQ0FDSEUgJiYgZGljdExlbmd0aCA8IE1BWF9BRExFUjMyX0xFTkdUSCkge1xuICAgICAgY29uc3QgaW1hZ2VCeXRlcyA9IGltYWdlU3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICBpbWFnZVN0cmVhbS5yZXNldCgpO1xuICAgICAgY29uc3QgaW5pdGlhbFN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICAgIGNvbnN0IGRpY3RCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoKTtcbiAgICAgIHN0cmVhbS5wb3MgPSBpbml0aWFsU3RyZWFtUG9zO1xuICAgICAgY2FjaGVLZXkgPSBjb21wdXRlQWRsZXIzMihpbWFnZUJ5dGVzKSArIFwiX1wiICsgY29tcHV0ZUFkbGVyMzIoZGljdEJ5dGVzKTtcbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLmltYWdlQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICBpZiAoY2FjaGVFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICBjYWNoZUVudHJ5LnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgIGltYWdlU3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShpbWFnZVN0cmVhbSwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpbWFnZVN0cmVhbSA9IHRoaXMuZmlsdGVyKGltYWdlU3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgIGltYWdlU3RyZWFtLmRpY3QgPSBkaWN0O1xuXG4gICAgaWYgKGNhY2hlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGltYWdlU3RyZWFtLmNhY2hlS2V5ID0gYGlubGluZV8ke2xlbmd0aH1fJHtjYWNoZUtleX1gO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlW2NhY2hlS2V5XSA9IGltYWdlU3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICB0aGlzLnNoaWZ0KCk7XG4gICAgcmV0dXJuIGltYWdlU3RyZWFtO1xuICB9XG5cbiAgX2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MsIHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0cmVhbVxuICAgIH0gPSB0aGlzLmxleGVyO1xuICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcztcbiAgICBjb25zdCBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7XG4gICAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gc2lnbmF0dXJlLmxlbmd0aDtcblxuICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgc3RyZWFtLmVuZCkge1xuICAgICAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhTQ0FOX0JMT0NLX0xFTkdUSCk7XG4gICAgICBjb25zdCBzY2FuTGVuZ3RoID0gc2NhbkJ5dGVzLmxlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcblxuICAgICAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIHdoaWxlIChwb3MgPCBzY2FuTGVuZ3RoKSB7XG4gICAgICAgIGxldCBqID0gMDtcblxuICAgICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICAgIHN0cmVhbS5wb3MgKz0gcG9zO1xuICAgICAgICAgIHJldHVybiBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBwb3MrKztcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLnBvcyArPSBzY2FuTGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIG1ha2VTdHJlYW0oZGljdCwgY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIGxldCBzdHJlYW0gPSBsZXhlci5zdHJlYW07XG4gICAgbGV4ZXIuc2tpcFRvTmV4dExpbmUoKTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3MgLSAxO1xuICAgIGxldCBsZW5ndGggPSBkaWN0LmdldChcIkxlbmd0aFwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCBsZW5ndGggXCIke2xlbmd0aH1cIiBpbiBzdHJlYW1gKTtcbiAgICAgIGxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zICsgbGVuZ3RoO1xuICAgIGxleGVyLm5leHRDaGFyKCk7XG5cbiAgICBpZiAodGhpcy50cnlTaGlmdCgpICYmICgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCBcImVuZHN0cmVhbVwiKSkge1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBFTkRTVFJFQU1fU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjUsIDB4NkUsIDB4NjQsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NkRdKTtcblxuICAgICAgbGV0IGFjdHVhbExlbmd0aCA9IHRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MsIEVORFNUUkVBTV9TSUdOQVRVUkUpO1xuXG4gICAgICBpZiAoYWN0dWFsTGVuZ3RoIDwgMCkge1xuICAgICAgICBjb25zdCBNQVhfVFJVTkNBVElPTiA9IDE7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gTUFYX1RSVU5DQVRJT047IGkrKykge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IEVORFNUUkVBTV9TSUdOQVRVUkUubGVuZ3RoIC0gaTtcbiAgICAgICAgICBjb25zdCBUUlVOQ0FURURfU0lHTkFUVVJFID0gRU5EU1RSRUFNX1NJR05BVFVSRS5zbGljZSgwLCBlbmQpO1xuXG4gICAgICAgICAgY29uc3QgbWF5YmVMZW5ndGggPSB0aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zLCBUUlVOQ0FURURfU0lHTkFUVVJFKTtcblxuICAgICAgICAgIGlmIChtYXliZUxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0Qnl0ZSA9IHN0cmVhbS5wZWVrQnl0ZXMoZW5kICsgMSlbZW5kXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShsYXN0Qnl0ZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgRm91bmQgXCIkeygwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShUUlVOQ0FURURfU0lHTkFUVVJFKX1cIiB3aGVuIGAgKyBcInNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuXCIpO1xuICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWN0dWFsTGVuZ3RoIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxlbmd0aCA9IGFjdHVhbExlbmd0aDtcbiAgICAgIGxleGVyLm5leHRDaGFyKCk7XG4gICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaGlmdCgpO1xuICAgIHN0cmVhbSA9IHN0cmVhbS5tYWtlU3ViU3RyZWFtKHN0YXJ0UG9zLCBsZW5ndGgsIGRpY3QpO1xuXG4gICAgaWYgKGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgc3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShzdHJlYW0sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgc3RyZWFtID0gdGhpcy5maWx0ZXIoc3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgIHN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgZmlsdGVyKHN0cmVhbSwgZGljdCwgbGVuZ3RoKSB7XG4gICAgbGV0IGZpbHRlciA9IGRpY3QuZ2V0KFwiRmlsdGVyXCIsIFwiRlwiKTtcbiAgICBsZXQgcGFyYW1zID0gZGljdC5nZXQoXCJEZWNvZGVQYXJtc1wiLCBcIkRQXCIpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiL0RlY29kZVBhcm1zIHNob3VsZCBub3QgY29udGFpbiBhbiBBcnJheSwgXCIgKyBcIndoZW4gL0ZpbHRlciBjb250YWlucyBhIE5hbWUuXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5tYWtlRmlsdGVyKHN0cmVhbSwgZmlsdGVyLm5hbWUsIGxlbmd0aCwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgbWF5YmVMZW5ndGggPSBsZW5ndGg7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJBcnJheSA9IGZpbHRlcjtcbiAgICAgIGNvbnN0IHBhcmFtc0FycmF5ID0gcGFyYW1zO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmaWx0ZXJBcnJheS5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGZpbHRlciA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZpbHRlckFycmF5W2ldKTtcblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJhZCBmaWx0ZXIgbmFtZSBcIiR7ZmlsdGVyfVwiYCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJhbXMgPSBudWxsO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtc0FycmF5KSAmJiBpIGluIHBhcmFtc0FycmF5KSB7XG4gICAgICAgICAgcGFyYW1zID0gdGhpcy54cmVmLmZldGNoSWZSZWYocGFyYW1zQXJyYXlbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtID0gdGhpcy5tYWtlRmlsdGVyKHN0cmVhbSwgZmlsdGVyLm5hbWUsIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICBtYXliZUxlbmd0aCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIG1ha2VGaWx0ZXIoc3RyZWFtLCBuYW1lLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgaWYgKG1heWJlTGVuZ3RoID09PSAwKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYEVtcHR5IFwiJHtuYW1lfVwiIHN0cmVhbS5gKTtcbiAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5OdWxsU3RyZWFtKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHhyZWZTdHJlYW1TdGF0cyA9IHRoaXMueHJlZi5zdGF0cy5zdHJlYW1UeXBlcztcblxuICAgICAgaWYgKG5hbWUgPT09IFwiRmxhdGVEZWNvZGVcIiB8fCBuYW1lID09PSBcIkZsXCIpIHtcbiAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuRkxBVEVdID0gdHJ1ZTtcblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLlByZWRpY3RvclN0cmVhbShuZXcgX3N0cmVhbS5GbGF0ZVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcIkxaV0RlY29kZVwiIHx8IG5hbWUgPT09IFwiTFpXXCIpIHtcbiAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuTFpXXSA9IHRydWU7XG4gICAgICAgIGxldCBlYXJseUNoYW5nZSA9IDE7XG5cbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwiRWFybHlDaGFuZ2VcIikpIHtcbiAgICAgICAgICAgIGVhcmx5Q2hhbmdlID0gcGFyYW1zLmdldChcIkVhcmx5Q2hhbmdlXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5QcmVkaWN0b3JTdHJlYW0obmV3IF9zdHJlYW0uTFpXU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGVhcmx5Q2hhbmdlKSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTFpXU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGVhcmx5Q2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiRENURGVjb2RlXCIgfHwgbmFtZSA9PT0gXCJEQ1RcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5EQ1RdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfanBlZ19zdHJlYW0uSnBlZ1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBzdHJlYW0uZGljdCwgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiSlBYRGVjb2RlXCIgfHwgbmFtZSA9PT0gXCJKUFhcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5KUFhdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfanB4X3N0cmVhbS5KcHhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgc3RyZWFtLmRpY3QsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcIkFTQ0lJODVEZWNvZGVcIiB8fCBuYW1lID09PSBcIkE4NVwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkE4NV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uQXNjaWk4NVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiQVNDSUlIZXhEZWNvZGVcIiB8fCBuYW1lID09PSBcIkFIeFwiKSB7XG4gICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkFIWF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uQXNjaWlIZXhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcIkNDSVRURmF4RGVjb2RlXCIgfHwgbmFtZSA9PT0gXCJDQ0ZcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5DQ0ZdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfY2NpdHRfc3RyZWFtLkNDSVRURmF4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcIlJ1bkxlbmd0aERlY29kZVwiIHx8IG5hbWUgPT09IFwiUkxcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5STFhdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLlJ1bkxlbmd0aFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IFwiSkJJRzJEZWNvZGVcIikge1xuICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5KQklHXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgX2piaWcyX3N0cmVhbS5KYmlnMlN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBzdHJlYW0uZGljdCwgcGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBGaWx0ZXIgXCIke25hbWV9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICAgIHJldHVybiBzdHJlYW07XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYEludmFsaWQgc3RyZWFtOiBcIiR7ZXh9XCJgKTtcbiAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5OdWxsU3RyZWFtKCk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG5jb25zdCBzcGVjaWFsQ2hhcnMgPSBbMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMiwgMCwgMCwgMiwgMiwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG5cbmZ1bmN0aW9uIHRvSGV4RGlnaXQoY2gpIHtcbiAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkge1xuICAgIHJldHVybiBjaCAmIDB4MGY7XG4gIH1cblxuICBpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDQ2IHx8IGNoID49IDB4NjEgJiYgY2ggPD0gMHg2Nikge1xuICAgIHJldHVybiAoY2ggJiAweDBmKSArIDk7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmNsYXNzIExleGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBrbm93bkNvbW1hbmRzID0gbnVsbCkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICB0aGlzLnN0ckJ1ZiA9IFtdO1xuICAgIHRoaXMua25vd25Db21tYW5kcyA9IGtub3duQ29tbWFuZHM7XG4gICAgdGhpcy5faGV4U3RyaW5nTnVtV2FybiA9IDA7XG4gICAgdGhpcy5iZWdpbklubGluZUltYWdlUG9zID0gLTE7XG4gIH1cblxuICBuZXh0Q2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgfVxuXG4gIHBlZWtDaGFyKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpO1xuICB9XG5cbiAgZ2V0TnVtYmVyKCkge1xuICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7XG4gICAgbGV0IGVOb3RhdGlvbiA9IGZhbHNlO1xuICAgIGxldCBkaXZpZGVCeSA9IDA7XG4gICAgbGV0IHNpZ24gPSAwO1xuXG4gICAgaWYgKGNoID09PSAweDJkKSB7XG4gICAgICBzaWduID0gLTE7XG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgaWYgKGNoID09PSAweDJkKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MmIpIHtcbiAgICAgIHNpZ24gPSAxO1xuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfSB3aGlsZSAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gMHgyZSkge1xuICAgICAgZGl2aWRlQnkgPSAxMDtcbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cblxuICAgIGlmIChjaCA8IDB4MzAgfHwgY2ggPiAweDM5KSB7XG4gICAgICBpZiAoZGl2aWRlQnkgPT09IDEwICYmIHNpZ24gPT09IDAgJiYgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSB8fCBjaCA9PT0gLTEpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkxleGVyLmdldE51bWJlciAtIHRyZWF0aW5nIGEgc2luZ2xlIGRlY2ltYWwgcG9pbnQgYXMgemVyby5cIik7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgbnVtYmVyOiAke1N0cmluZy5mcm9tQ2hhckNvZGUoY2gpfSAoY2hhckNvZGUgJHtjaH0pYCk7XG4gICAgfVxuXG4gICAgc2lnbiA9IHNpZ24gfHwgMTtcbiAgICBsZXQgYmFzZVZhbHVlID0gY2ggLSAweDMwO1xuICAgIGxldCBwb3dlclZhbHVlID0gMDtcbiAgICBsZXQgcG93ZXJWYWx1ZVNpZ24gPSAxO1xuXG4gICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCkge1xuICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICBjb25zdCBjdXJyZW50RGlnaXQgPSBjaCAtIDB4MzA7XG5cbiAgICAgICAgaWYgKGVOb3RhdGlvbikge1xuICAgICAgICAgIHBvd2VyVmFsdWUgPSBwb3dlclZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGRpdmlkZUJ5ICE9PSAwKSB7XG4gICAgICAgICAgICBkaXZpZGVCeSAqPSAxMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlVmFsdWUgKiAxMCArIGN1cnJlbnREaWdpdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyZSkge1xuICAgICAgICBpZiAoZGl2aWRlQnkgPT09IDApIHtcbiAgICAgICAgICBkaXZpZGVCeSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MmQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQmFkbHkgZm9ybWF0dGVkIG51bWJlcjogbWludXMgc2lnbiBpbiB0aGUgbWlkZGxlXCIpO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHg0NSB8fCBjaCA9PT0gMHg2NSkge1xuICAgICAgICBjaCA9IHRoaXMucGVla0NoYXIoKTtcblxuICAgICAgICBpZiAoY2ggPT09IDB4MmIgfHwgY2ggPT09IDB4MmQpIHtcbiAgICAgICAgICBwb3dlclZhbHVlU2lnbiA9IGNoID09PSAweDJkID8gLTEgOiAxO1xuICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA8IDB4MzAgfHwgY2ggPiAweDM5KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlTm90YXRpb24gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpdmlkZUJ5ICE9PSAwKSB7XG4gICAgICBiYXNlVmFsdWUgLz0gZGl2aWRlQnk7XG4gICAgfVxuXG4gICAgaWYgKGVOb3RhdGlvbikge1xuICAgICAgYmFzZVZhbHVlICo9IDEwICoqIChwb3dlclZhbHVlU2lnbiAqIHBvd2VyVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBzaWduICogYmFzZVZhbHVlO1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIGxldCBudW1QYXJlbiA9IDE7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBsZXQgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGNoYXJCdWZmZXJlZCA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKGNoIHwgMCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVudGVybWluYXRlZCBzdHJpbmdcIik7XG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDI4OlxuICAgICAgICAgICsrbnVtUGFyZW47XG4gICAgICAgICAgc3RyQnVmLnB1c2goXCIoXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICBpZiAoLS1udW1QYXJlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiKVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4NWM6XG4gICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nXCIpO1xuICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg2ZTpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXG5cIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NzI6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxyXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDc0OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcdFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg2MjpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXGJcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NjY6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxmXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDVjOlxuICAgICAgICAgICAgY2FzZSAweDI4OlxuICAgICAgICAgICAgY2FzZSAweDI5OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4MzA6XG4gICAgICAgICAgICBjYXNlIDB4MzE6XG4gICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICBjYXNlIDB4MzM6XG4gICAgICAgICAgICBjYXNlIDB4MzQ6XG4gICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICBjYXNlIDB4MzY6XG4gICAgICAgICAgICBjYXNlIDB4Mzc6XG4gICAgICAgICAgICAgIGxldCB4ID0gY2ggJiAweDBmO1xuICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgY2hhckJ1ZmZlcmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM3KSB7XG4gICAgICAgICAgICAgICAgeCA9ICh4IDw8IDMpICsgKGNoICYgMHgwZik7XG4gICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM3KSB7XG4gICAgICAgICAgICAgICAgICBjaGFyQnVmZmVyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoeCkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDBkOlxuICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ2hhcigpID09PSAweDBhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHgwYTpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNoYXJCdWZmZXJlZCkge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIGxldCBjaCwgcHJldmlvdXNDaDtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDAgJiYgIXNwZWNpYWxDaGFyc1tjaF0pIHtcbiAgICAgIGlmIChjaCA9PT0gMHgyMykge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICBpZiAoc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkxleGVyX2dldE5hbWU6IFwiICsgXCJOVU1CRVIgU0lHTiAoIykgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgaGV4YWRlY2ltYWwgbnVtYmVyLlwiKTtcbiAgICAgICAgICBzdHJCdWYucHVzaChcIiNcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4ID0gdG9IZXhEaWdpdChjaCk7XG5cbiAgICAgICAgaWYgKHggIT09IC0xKSB7XG4gICAgICAgICAgcHJldmlvdXNDaCA9IGNoO1xuICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgIGNvbnN0IHgyID0gdG9IZXhEaWdpdChjaCk7XG5cbiAgICAgICAgICBpZiAoeDIgPT09IC0xKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShjaCl9KSBgICsgXCJpbiBoZXhhZGVjaW1hbCBudW1iZXIuXCIpO1xuICAgICAgICAgICAgc3RyQnVmLnB1c2goXCIjXCIsIFN0cmluZy5mcm9tQ2hhckNvZGUocHJldmlvdXNDaCkpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4IDw8IDQgfCB4MikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiI1wiLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyQnVmLmxlbmd0aCA+IDEyNykge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBOYW1lIHRva2VuIGlzIGxvbmdlciB0aGFuIGFsbG93ZWQgYnkgdGhlIHNwZWM6ICR7c3RyQnVmLmxlbmd0aH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoc3RyQnVmLmpvaW4oXCJcIikpO1xuICB9XG5cbiAgX2hleFN0cmluZ1dhcm4oY2gpIHtcbiAgICBjb25zdCBNQVhfSEVYX1NUUklOR19OVU1fV0FSTiA9IDU7XG5cbiAgICBpZiAodGhpcy5faGV4U3RyaW5nTnVtV2FybisrID09PSBNQVhfSEVYX1NUUklOR19OVU1fV0FSTikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZXhTdHJpbmdOdW1XYXJuID4gTUFYX0hFWF9TVFJJTkdfTlVNX1dBUk4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYGdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAke2NofWApO1xuICB9XG5cbiAgZ2V0SGV4U3RyaW5nKCkge1xuICAgIGNvbnN0IHN0ckJ1ZiA9IHRoaXMuc3RyQnVmO1xuICAgIHN0ckJ1Zi5sZW5ndGggPSAwO1xuICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7XG4gICAgbGV0IGlzRmlyc3RIZXggPSB0cnVlO1xuICAgIGxldCBmaXJzdERpZ2l0LCBzZWNvbmREaWdpdDtcbiAgICB0aGlzLl9oZXhTdHJpbmdOdW1XYXJuID0gMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVudGVybWluYXRlZCBoZXggc3RyaW5nXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4M2UpIHtcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbENoYXJzW2NoXSA9PT0gMSkge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGaXJzdEhleCkge1xuICAgICAgICAgIGZpcnN0RGlnaXQgPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICAgIGlmIChmaXJzdERpZ2l0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5faGV4U3RyaW5nV2FybihjaCk7XG5cbiAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlY29uZERpZ2l0ID0gdG9IZXhEaWdpdChjaCk7XG5cbiAgICAgICAgICBpZiAoc2Vjb25kRGlnaXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9oZXhTdHJpbmdXYXJuKGNoKTtcblxuICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGZpcnN0RGlnaXQgPDwgNCB8IHNlY29uZERpZ2l0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpc0ZpcnN0SGV4ID0gIWlzRmlyc3RIZXg7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbiAgfVxuXG4gIGdldE9iaigpIHtcbiAgICBsZXQgY29tbWVudCA9IGZhbHNlO1xuICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGNoIDwgMCkge1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRU9GO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICBpZiAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpIHtcbiAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjUpIHtcbiAgICAgICAgY29tbWVudCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNwZWNpYWxDaGFyc1tjaF0gIT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICBjYXNlIDB4MzA6XG4gICAgICBjYXNlIDB4MzE6XG4gICAgICBjYXNlIDB4MzI6XG4gICAgICBjYXNlIDB4MzM6XG4gICAgICBjYXNlIDB4MzQ6XG4gICAgICBjYXNlIDB4MzU6XG4gICAgICBjYXNlIDB4MzY6XG4gICAgICBjYXNlIDB4Mzc6XG4gICAgICBjYXNlIDB4Mzg6XG4gICAgICBjYXNlIDB4Mzk6XG4gICAgICBjYXNlIDB4MmI6XG4gICAgICBjYXNlIDB4MmQ6XG4gICAgICBjYXNlIDB4MmU6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpO1xuXG4gICAgICBjYXNlIDB4Mjg6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBjYXNlIDB4MmY6XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUoKTtcblxuICAgICAgY2FzZSAweDViOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiW1wiKTtcblxuICAgICAgY2FzZSAweDVkOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiXVwiKTtcblxuICAgICAgY2FzZSAweDNjOlxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICBpZiAoY2ggPT09IDB4M2MpIHtcbiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCI8PFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldEhleFN0cmluZygpO1xuXG4gICAgICBjYXNlIDB4M2U6XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChjaCA9PT0gMHgzZSkge1xuICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIj4+XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCI+XCIpO1xuXG4gICAgICBjYXNlIDB4N2I6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCJ7XCIpO1xuXG4gICAgICBjYXNlIDB4N2Q6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCJ9XCIpO1xuXG4gICAgICBjYXNlIDB4Mjk6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHtjaH1gKTtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgY29uc3Qga25vd25Db21tYW5kcyA9IHRoaXMua25vd25Db21tYW5kcztcbiAgICBsZXQga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzICYmIGtub3duQ29tbWFuZHNbc3RyXSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCAmJiAhc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgY29uc3QgcG9zc2libGVDb21tYW5kID0gc3RyICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgIGlmIChrbm93bkNvbW1hbmRGb3VuZCAmJiBrbm93bkNvbW1hbmRzW3Bvc3NpYmxlQ29tbWFuZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDEyOCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYENvbW1hbmQgdG9rZW4gdG9vIGxvbmc6ICR7c3RyLmxlbmd0aH1gKTtcbiAgICAgIH1cblxuICAgICAgc3RyID0gcG9zc2libGVDb21tYW5kO1xuICAgICAga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzICYmIGtub3duQ29tbWFuZHNbc3RyXSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwidHJ1ZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RyID09PSBcImZhbHNlXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoc3RyID09PSBcIm51bGxcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHN0ciA9PT0gXCJCSVwiKSB7XG4gICAgICB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3MgPSB0aGlzLnN0cmVhbS5wb3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoc3RyKTtcbiAgfVxuXG4gIHBlZWtPYmooKSB7XG4gICAgY29uc3Qgc3RyZWFtUG9zID0gdGhpcy5zdHJlYW0ucG9zLFxuICAgICAgICAgIGN1cnJlbnRDaGFyID0gdGhpcy5jdXJyZW50Q2hhcixcbiAgICAgICAgICBiZWdpbklubGluZUltYWdlUG9zID0gdGhpcy5iZWdpbklubGluZUltYWdlUG9zO1xuICAgIGxldCBuZXh0T2JqO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5leHRPYmogPSB0aGlzLmdldE9iaigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBwZWVrT2JqOiAke2V4fWApO1xuICAgIH1cblxuICAgIHRoaXMuc3RyZWFtLnBvcyA9IHN0cmVhbVBvcztcbiAgICB0aGlzLmN1cnJlbnRDaGFyID0gY3VycmVudENoYXI7XG4gICAgdGhpcy5iZWdpbklubGluZUltYWdlUG9zID0gYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICByZXR1cm4gbmV4dE9iajtcbiAgfVxuXG4gIHNraXBUb05leHRMaW5lKCkge1xuICAgIGxldCBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICB3aGlsZSAoY2ggPj0gMCkge1xuICAgICAgaWYgKGNoID09PSAweDBkKSB7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSkge1xuICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgwYSkge1xuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkxleGVyID0gTGV4ZXI7XG5cbmNsYXNzIExpbmVhcml6YXRpb24ge1xuICBzdGF0aWMgY3JlYXRlKHN0cmVhbSkge1xuICAgIGZ1bmN0aW9uIGdldEludChsaW5EaWN0LCBuYW1lLCBhbGxvd1plcm9WYWx1ZSA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBvYmogPSBsaW5EaWN0LmdldChuYW1lKTtcblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSAmJiAoYWxsb3daZXJvVmFsdWUgPyBvYmogPj0gMCA6IG9iaiA+IDApKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBgICsgXCJkaWN0aW9uYXJ5IGlzIGludmFsaWQuXCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhpbnRzKGxpbkRpY3QpIHtcbiAgICAgIGNvbnN0IGhpbnRzID0gbGluRGljdC5nZXQoXCJIXCIpO1xuICAgICAgbGV0IGhpbnRzTGVuZ3RoO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoaW50cykgJiYgKChoaW50c0xlbmd0aCA9IGhpbnRzLmxlbmd0aCkgPT09IDIgfHwgaGludHNMZW5ndGggPT09IDQpKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBoaW50c0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tpbmRleF07XG5cbiAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKGhpbnQpICYmIGhpbnQgPiAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIaW50ICgke2luZGV4fSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoaW50cztcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGludCBhcnJheSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoe1xuICAgICAgbGV4ZXI6IG5ldyBMZXhlcihzdHJlYW0pLFxuICAgICAgeHJlZjogbnVsbFxuICAgIH0pO1xuICAgIGNvbnN0IG9iajEgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgY29uc3Qgb2JqMiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmozID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IGxpbkRpY3QgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgbGV0IG9iaiwgbGVuZ3RoO1xuXG4gICAgaWYgKCEoTnVtYmVyLmlzSW50ZWdlcihvYmoxKSAmJiBOdW1iZXIuaXNJbnRlZ2VyKG9iajIpICYmICgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqMywgXCJvYmpcIikgJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobGluRGljdCkgJiYgKDAsIF91dGlsLmlzTnVtKShvYmogPSBsaW5EaWN0LmdldChcIkxpbmVhcml6ZWRcIikpICYmIG9iaiA+IDApKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKChsZW5ndGggPSBnZXRJbnQobGluRGljdCwgXCJMXCIpKSAhPT0gc3RyZWFtLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJMXCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgJyArIFwiZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZW5ndGgsXG4gICAgICBoaW50czogZ2V0SGludHMobGluRGljdCksXG4gICAgICBvYmplY3ROdW1iZXJGaXJzdDogZ2V0SW50KGxpbkRpY3QsIFwiT1wiKSxcbiAgICAgIGVuZEZpcnN0OiBnZXRJbnQobGluRGljdCwgXCJFXCIpLFxuICAgICAgbnVtUGFnZXM6IGdldEludChsaW5EaWN0LCBcIk5cIiksXG4gICAgICBtYWluWFJlZkVudHJpZXNPZmZzZXQ6IGdldEludChsaW5EaWN0LCBcIlRcIiksXG4gICAgICBwYWdlRmlyc3Q6IGxpbkRpY3QuaGFzKFwiUFwiKSA/IGdldEludChsaW5EaWN0LCBcIlBcIiwgdHJ1ZSkgOiAwXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTGluZWFyaXphdGlvbiA9IExpbmVhcml6YXRpb247XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTFpXU3RyZWFtID0gZXhwb3J0cy5TdHJpbmdTdHJlYW0gPSBleHBvcnRzLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbSA9IGV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cy5SdW5MZW5ndGhTdHJlYW0gPSBleHBvcnRzLlByZWRpY3RvclN0cmVhbSA9IGV4cG9ydHMuTnVsbFN0cmVhbSA9IGV4cG9ydHMuRmxhdGVTdHJlYW0gPSBleHBvcnRzLkRlY29kZVN0cmVhbSA9IGV4cG9ydHMuRGVjcnlwdFN0cmVhbSA9IGV4cG9ydHMuQXNjaWlIZXhTdHJlYW0gPSBleHBvcnRzLkFzY2lpODVTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBTdHJlYW0gPSBmdW5jdGlvbiBTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBTdHJlYW0oYXJyYXlCdWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpIHtcbiAgICB0aGlzLmJ5dGVzID0gYXJyYXlCdWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gYXJyYXlCdWZmZXIgOiBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgIHRoaXMuZW5kID0gc3RhcnQgKyBsZW5ndGggfHwgdGhpcy5ieXRlcy5sZW5ndGg7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgfVxuXG4gIFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gICAgfSxcblxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAwO1xuICAgIH0sXG5cbiAgICBnZXRCeXRlOiBmdW5jdGlvbiBTdHJlYW1fZ2V0Qnl0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBTdHJlYW1fZ2V0VWludDE2KCkge1xuICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgaWYgKGIwID09PSAtMSB8fCBiMSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gU3RyZWFtX2dldEludDMyKCkge1xuICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMiA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgdmFyIGIzID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgICB9LFxuXG4gICAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBwb3MgPSB0aGlzLnBvcztcbiAgICAgIHZhciBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIHN0ckVuZCk7XG4gICAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbmQgPSBwb3MgKyBsZW5ndGg7XG5cbiAgICAgIGlmIChlbmQgPiBzdHJFbmQpIHtcbiAgICAgICAgZW5kID0gc3RyRW5kO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gYnl0ZXMuc3ViYXJyYXkocG9zLCBlbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICB9LFxuXG4gICAgcGVla0J5dGU6IGZ1bmN0aW9uIFN0cmVhbV9wZWVrQnl0ZSgpIHtcbiAgICAgIHZhciBwZWVrZWRCeXRlID0gdGhpcy5nZXRCeXRlKCk7XG5cbiAgICAgIGlmIChwZWVrZWRCeXRlICE9PSAtMSkge1xuICAgICAgICB0aGlzLnBvcy0tO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGVla2VkQnl0ZTtcbiAgICB9LFxuXG4gICAgcGVla0J5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkID0gZmFsc2UpIHtcbiAgICAgIHZhciBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQpO1xuICAgICAgdGhpcy5wb3MgLT0gYnl0ZXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICBnZXRCeXRlUmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgaWYgKGJlZ2luIDwgMCkge1xuICAgICAgICBiZWdpbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPiB0aGlzLmVuZCkge1xuICAgICAgICBlbmQgPSB0aGlzLmVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuYnl0ZXMuc3ViYXJyYXkoYmVnaW4sIGVuZCk7XG4gICAgfSxcblxuICAgIHNraXA6IGZ1bmN0aW9uIFN0cmVhbV9za2lwKG4pIHtcbiAgICAgIGlmICghbikge1xuICAgICAgICBuID0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3MgKz0gbjtcbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiBTdHJlYW1fcmVzZXQoKSB7XG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfSxcbiAgICBtb3ZlU3RhcnQ6IGZ1bmN0aW9uIFN0cmVhbV9tb3ZlU3RhcnQoKSB7XG4gICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgfSxcbiAgICBtYWtlU3ViU3RyZWFtOiBmdW5jdGlvbiBTdHJlYW1fbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0KSB7XG4gICAgICByZXR1cm4gbmV3IFN0cmVhbSh0aGlzLmJ5dGVzLmJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLlN0cmVhbSA9IFN0cmVhbTtcblxudmFyIFN0cmluZ1N0cmVhbSA9IGZ1bmN0aW9uIFN0cmluZ1N0cmVhbUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHIpIHtcbiAgICBjb25zdCBieXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzdHIpO1xuICAgIFN0cmVhbS5jYWxsKHRoaXMsIGJ5dGVzKTtcbiAgfVxuXG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSBTdHJlYW0ucHJvdG90eXBlO1xuICByZXR1cm4gU3RyaW5nU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0cmVhbTtcblxudmFyIERlY29kZVN0cmVhbSA9IGZ1bmN0aW9uIERlY29kZVN0cmVhbUNsb3N1cmUoKSB7XG4gIHZhciBlbXB0eUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuXG4gIGZ1bmN0aW9uIERlY29kZVN0cmVhbShtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgIHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aCA9IG1heWJlTWluQnVmZmVyTGVuZ3RoIHx8IDA7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB0aGlzLmVvZiA9IGZhbHNlO1xuICAgIHRoaXMuYnVmZmVyID0gZW1wdHlCdWZmZXI7XG4gICAgdGhpcy5taW5CdWZmZXJMZW5ndGggPSA1MTI7XG5cbiAgICBpZiAobWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRGVjb2RlU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyTGVuZ3RoID09PSAwO1xuICAgIH0sXG5cbiAgICBlbnN1cmVCdWZmZXI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9lbnN1cmVCdWZmZXIocmVxdWVzdGVkKSB7XG4gICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG5cbiAgICAgIGlmIChyZXF1ZXN0ZWQgPD0gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSB0aGlzLm1pbkJ1ZmZlckxlbmd0aDtcblxuICAgICAgd2hpbGUgKHNpemUgPCByZXF1ZXN0ZWQpIHtcbiAgICAgICAgc2l6ZSAqPSAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnVmZmVyMiA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgYnVmZmVyMi5zZXQoYnVmZmVyKTtcbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7XG4gICAgfSxcbiAgICBnZXRCeXRlOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fZ2V0Qnl0ZSgpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLnBvcztcblxuICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IHBvcykge1xuICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRVaW50MTYoKSB7XG4gICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgICBpZiAoYjAgPT09IC0xIHx8IGIxID09PSAtMSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fZ2V0SW50MzIoKSB7XG4gICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgdmFyIGIyID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgIH0sXG5cbiAgICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgICB2YXIgZW5kLFxuICAgICAgICAgIHBvcyA9IHRoaXMucG9zO1xuXG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7XG4gICAgICAgIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoIXRoaXMuZW9mICYmIHRoaXMuYnVmZmVyTGVuZ3RoIDwgZW5kKSB7XG4gICAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBidWZFbmQgPSB0aGlzLmJ1ZmZlckxlbmd0aDtcblxuICAgICAgICBpZiAoZW5kID4gYnVmRW5kKSB7XG4gICAgICAgICAgZW5kID0gYnVmRW5kO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gdGhpcy5idWZmZXIuc3ViYXJyYXkocG9zLCBlbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCAmJiAhKHN1YmFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgIH0sXG5cbiAgICBwZWVrQnl0ZTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX3BlZWtCeXRlKCkge1xuICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgaWYgKHBlZWtlZEJ5dGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgIH0sXG5cbiAgICBwZWVrQnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5nZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCk7XG4gICAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfSxcblxuICAgIG1ha2VTdWJTdHJlYW06IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9tYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QpIHtcbiAgICAgIHZhciBlbmQgPSBzdGFydCArIGxlbmd0aDtcblxuICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IGVuZCAmJiAhdGhpcy5lb2YpIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpO1xuICAgIH0sXG5cbiAgICBnZXRCeXRlUmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBEZWNvZGVTdHJlYW0uZ2V0Qnl0ZVJhbmdlXCIpO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fc2tpcChuKSB7XG4gICAgICBpZiAoIW4pIHtcbiAgICAgICAgbiA9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zICs9IG47XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX3Jlc2V0KCkge1xuICAgICAgdGhpcy5wb3MgPSAwO1xuICAgIH0sXG4gICAgZ2V0QmFzZVN0cmVhbXM6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRCYXNlU3RyZWFtcygpIHtcbiAgICAgIGlmICh0aGlzLnN0ciAmJiB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHIuZ2V0QmFzZVN0cmVhbXMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIERlY29kZVN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5EZWNvZGVTdHJlYW0gPSBEZWNvZGVTdHJlYW07XG5cbnZhciBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gPSBmdW5jdGlvbiBTdHJlYW1zU2VxdWVuY2VTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBTdHJlYW1zU2VxdWVuY2VTdHJlYW0oc3RyZWFtcykge1xuICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgbGV0IG1heWJlTGVuZ3RoID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0cmVhbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3Qgc3RyZWFtID0gc3RyZWFtc1tpXTtcblxuICAgICAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSkge1xuICAgICAgICBtYXliZUxlbmd0aCArPSBzdHJlYW0uX3Jhd01pbkJ1ZmZlckxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heWJlTGVuZ3RoICs9IHN0cmVhbS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgU3RyZWFtc1NlcXVlbmNlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgU3RyZWFtc1NlcXVlbmNlU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBzdHJlYW1TZXF1ZW5jZVN0cmVhbVJlYWRCbG9jaygpIHtcbiAgICB2YXIgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcblxuICAgIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdHJlYW0gPSBzdHJlYW1zLnNoaWZ0KCk7XG4gICAgdmFyIGNodW5rID0gc3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIHZhciBuZXdMZW5ndGggPSBidWZmZXJMZW5ndGggKyBjaHVuay5sZW5ndGg7XG4gICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKG5ld0xlbmd0aCk7XG4gICAgYnVmZmVyLnNldChjaHVuaywgYnVmZmVyTGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgfTtcblxuICBTdHJlYW1zU2VxdWVuY2VTdHJlYW0ucHJvdG90eXBlLmdldEJhc2VTdHJlYW1zID0gZnVuY3Rpb24gU3RyZWFtc1NlcXVlbmNlU3RyZWFtX2dldEJhc2VTdHJlYW1zKCkge1xuICAgIHZhciBiYXNlU3RyZWFtcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5zdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbXNbaV07XG5cbiAgICAgIGlmIChzdHJlYW0uZ2V0QmFzZVN0cmVhbXMpIHtcbiAgICAgICAgYmFzZVN0cmVhbXMucHVzaCguLi5zdHJlYW0uZ2V0QmFzZVN0cmVhbXMoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VTdHJlYW1zO1xuICB9O1xuXG4gIHJldHVybiBTdHJlYW1zU2VxdWVuY2VTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuXG52YXIgRmxhdGVTdHJlYW0gPSBmdW5jdGlvbiBGbGF0ZVN0cmVhbUNsb3N1cmUoKSB7XG4gIHZhciBjb2RlTGVuQ29kZU1hcCA9IG5ldyBJbnQzMkFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSk7XG4gIHZhciBsZW5ndGhEZWNvZGUgPSBuZXcgSW50MzJBcnJheShbMHgwMDAwMywgMHgwMDAwNCwgMHgwMDAwNSwgMHgwMDAwNiwgMHgwMDAwNywgMHgwMDAwOCwgMHgwMDAwOSwgMHgwMDAwYSwgMHgxMDAwYiwgMHgxMDAwZCwgMHgxMDAwZiwgMHgxMDAxMSwgMHgyMDAxMywgMHgyMDAxNywgMHgyMDAxYiwgMHgyMDAxZiwgMHgzMDAyMywgMHgzMDAyYiwgMHgzMDAzMywgMHgzMDAzYiwgMHg0MDA0MywgMHg0MDA1MywgMHg0MDA2MywgMHg0MDA3MywgMHg1MDA4MywgMHg1MDBhMywgMHg1MDBjMywgMHg1MDBlMywgMHgwMDEwMiwgMHgwMDEwMiwgMHgwMDEwMl0pO1xuICB2YXIgZGlzdERlY29kZSA9IG5ldyBJbnQzMkFycmF5KFsweDAwMDAxLCAweDAwMDAyLCAweDAwMDAzLCAweDAwMDA0LCAweDEwMDA1LCAweDEwMDA3LCAweDIwMDA5LCAweDIwMDBkLCAweDMwMDExLCAweDMwMDE5LCAweDQwMDIxLCAweDQwMDMxLCAweDUwMDQxLCAweDUwMDYxLCAweDYwMDgxLCAweDYwMGMxLCAweDcwMTAxLCAweDcwMTgxLCAweDgwMjAxLCAweDgwMzAxLCAweDkwNDAxLCAweDkwNjAxLCAweGEwODAxLCAweGEwYzAxLCAweGIxMDAxLCAweGIxODAxLCAweGMyMDAxLCAweGMzMDAxLCAweGQ0MDAxLCAweGQ2MDAxXSk7XG4gIHZhciBmaXhlZExpdENvZGVUYWIgPSBbbmV3IEludDMyQXJyYXkoWzB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzAsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTAsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTAsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTAsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDAsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjAsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjAsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzgsIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTgsIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTgsIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTgsIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDgsIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjgsIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjgsIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzQsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTQsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTQsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTQsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDQsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjQsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjQsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2MsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWMsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWMsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWMsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGMsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmMsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmMsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzIsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTIsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTIsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTIsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDIsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjIsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjIsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2EsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWEsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWEsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWEsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGEsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmEsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmEsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzYsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTYsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTYsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTYsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDYsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjYsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjYsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2UsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWUsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWUsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWUsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGUsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmUsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmUsIDB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzEsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTEsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTEsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTEsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDEsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjEsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjEsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzksIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTksIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTksIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTksIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDksIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjksIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjksIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzUsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTUsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTUsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTUsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDUsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjUsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjUsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2QsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWQsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWQsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWQsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGQsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmQsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmQsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzMsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTMsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTMsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTMsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDMsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjMsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjMsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2IsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWIsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWIsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWIsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGIsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmIsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmIsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzcsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTcsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTcsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTcsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDcsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjcsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjcsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2YsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWYsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWYsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWYsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGYsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmYsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmZdKSwgOV07XG4gIHZhciBmaXhlZERpc3RDb2RlVGFiID0gW25ldyBJbnQzMkFycmF5KFsweDUwMDAwLCAweDUwMDEwLCAweDUwMDA4LCAweDUwMDE4LCAweDUwMDA0LCAweDUwMDE0LCAweDUwMDBjLCAweDUwMDFjLCAweDUwMDAyLCAweDUwMDEyLCAweDUwMDBhLCAweDUwMDFhLCAweDUwMDA2LCAweDUwMDE2LCAweDUwMDBlLCAweDAwMDAwLCAweDUwMDAxLCAweDUwMDExLCAweDUwMDA5LCAweDUwMDE5LCAweDUwMDA1LCAweDUwMDE1LCAweDUwMDBkLCAweDUwMDFkLCAweDUwMDAzLCAweDUwMDEzLCAweDUwMDBiLCAweDUwMDFiLCAweDUwMDA3LCAweDUwMDE3LCAweDUwMDBmLCAweDAwMDAwXSksIDVdO1xuXG4gIGZ1bmN0aW9uIEZsYXRlU3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB2YXIgY21mID0gc3RyLmdldEJ5dGUoKTtcbiAgICB2YXIgZmxnID0gc3RyLmdldEJ5dGUoKTtcblxuICAgIGlmIChjbWYgPT09IC0xIHx8IGZsZyA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIGlmICgoY21mICYgMHgwZikgIT09IDB4MDgpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIGlmICgoKGNtZiA8PCA4KSArIGZsZykgJSAzMSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogJHtjbWZ9LCAke2ZsZ31gKTtcbiAgICB9XG5cbiAgICBpZiAoZmxnICYgMHgyMCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBGRElDVCBiaXQgc2V0IGluIGZsYXRlIHN0cmVhbTogJHtjbWZ9LCAke2ZsZ31gKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICB0aGlzLmNvZGVCdWYgPSAwO1xuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIEZsYXRlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgRmxhdGVTdHJlYW0ucHJvdG90eXBlLmdldEJpdHMgPSBmdW5jdGlvbiBGbGF0ZVN0cmVhbV9nZXRCaXRzKGJpdHMpIHtcbiAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgdmFyIGNvZGVTaXplID0gdGhpcy5jb2RlU2l6ZTtcbiAgICB2YXIgY29kZUJ1ZiA9IHRoaXMuY29kZUJ1ZjtcbiAgICB2YXIgYjtcblxuICAgIHdoaWxlIChjb2RlU2l6ZSA8IGJpdHMpIHtcbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICBjb2RlU2l6ZSArPSA4O1xuICAgIH1cblxuICAgIGIgPSBjb2RlQnVmICYgKDEgPDwgYml0cykgLSAxO1xuICAgIHRoaXMuY29kZUJ1ZiA9IGNvZGVCdWYgPj4gYml0cztcbiAgICB0aGlzLmNvZGVTaXplID0gY29kZVNpemUgLT0gYml0cztcbiAgICByZXR1cm4gYjtcbiAgfTtcblxuICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2V0Q29kZSA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtX2dldENvZGUodGFibGUpIHtcbiAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgdmFyIGNvZGVzID0gdGFibGVbMF07XG4gICAgdmFyIG1heExlbiA9IHRhYmxlWzFdO1xuICAgIHZhciBjb2RlU2l6ZSA9IHRoaXMuY29kZVNpemU7XG4gICAgdmFyIGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7XG4gICAgdmFyIGI7XG5cbiAgICB3aGlsZSAoY29kZVNpemUgPCBtYXhMZW4pIHtcbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29kZUJ1ZiB8PSBiIDw8IGNvZGVTaXplO1xuICAgICAgY29kZVNpemUgKz0gODtcbiAgICB9XG5cbiAgICB2YXIgY29kZSA9IGNvZGVzW2NvZGVCdWYgJiAoMSA8PCBtYXhMZW4pIC0gMV07XG4gICAgdmFyIGNvZGVMZW4gPSBjb2RlID4+IDE2O1xuICAgIHZhciBjb2RlVmFsID0gY29kZSAmIDB4ZmZmZjtcblxuICAgIGlmIChjb2RlTGVuIDwgMSB8fCBjb2RlU2l6ZSA8IGNvZGVMZW4pIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBjb2RlTGVuO1xuICAgIHRoaXMuY29kZVNpemUgPSBjb2RlU2l6ZSAtIGNvZGVMZW47XG4gICAgcmV0dXJuIGNvZGVWYWw7XG4gIH07XG5cbiAgRmxhdGVTdHJlYW0ucHJvdG90eXBlLmdlbmVyYXRlSHVmZm1hblRhYmxlID0gZnVuY3Rpb24gZmxhdGVTdHJlYW1HZW5lcmF0ZUh1ZmZtYW5UYWJsZShsZW5ndGhzKSB7XG4gICAgdmFyIG4gPSBsZW5ndGhzLmxlbmd0aDtcbiAgICB2YXIgbWF4TGVuID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChsZW5ndGhzW2ldID4gbWF4TGVuKSB7XG4gICAgICAgIG1heExlbiA9IGxlbmd0aHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpemUgPSAxIDw8IG1heExlbjtcbiAgICB2YXIgY29kZXMgPSBuZXcgSW50MzJBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGxlbiA9IDEsIGNvZGUgPSAwLCBza2lwID0gMjsgbGVuIDw9IG1heExlbjsgKytsZW4sIGNvZGUgPDw9IDEsIHNraXAgPDw9IDEpIHtcbiAgICAgIGZvciAodmFyIHZhbCA9IDA7IHZhbCA8IG47ICsrdmFsKSB7XG4gICAgICAgIGlmIChsZW5ndGhzW3ZhbF0gPT09IGxlbikge1xuICAgICAgICAgIHZhciBjb2RlMiA9IDA7XG4gICAgICAgICAgdmFyIHQgPSBjb2RlO1xuXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBjb2RlMiA9IGNvZGUyIDw8IDEgfCB0ICYgMTtcbiAgICAgICAgICAgIHQgPj49IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChpID0gY29kZTI7IGkgPCBzaXplOyBpICs9IHNraXApIHtcbiAgICAgICAgICAgIGNvZGVzW2ldID0gbGVuIDw8IDE2IHwgdmFsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICsrY29kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbY29kZXMsIG1heExlbl07XG4gIH07XG5cbiAgRmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICB2YXIgYnVmZmVyLCBsZW47XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RyO1xuICAgIHZhciBoZHIgPSB0aGlzLmdldEJpdHMoMyk7XG5cbiAgICBpZiAoaGRyICYgMSkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgIH1cblxuICAgIGhkciA+Pj0gMTtcblxuICAgIGlmIChoZHIgPT09IDApIHtcbiAgICAgIHZhciBiO1xuXG4gICAgICBpZiAoKGIgPSBzdHIuZ2V0Qnl0ZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBibG9ja0xlbiA9IGI7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgYmxvY2tMZW4gfD0gYiA8PCA4O1xuXG4gICAgICBpZiAoKGIgPSBzdHIuZ2V0Qnl0ZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGVjayA9IGI7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgY2hlY2sgfD0gYiA8PCA4O1xuXG4gICAgICBpZiAoY2hlY2sgIT09ICh+YmxvY2tMZW4gJiAweGZmZmYpICYmIChibG9ja0xlbiAhPT0gMCB8fCBjaGVjayAhPT0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIHVuY29tcHJlc3NlZCBibG9jayBsZW5ndGggaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvZGVCdWYgPSAwO1xuICAgICAgdGhpcy5jb2RlU2l6ZSA9IDA7XG4gICAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IGJ1ZmZlckxlbmd0aCArIGJsb2NrTGVuO1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoZW5kKTtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gZW5kO1xuXG4gICAgICBpZiAoYmxvY2tMZW4gPT09IDApIHtcbiAgICAgICAgaWYgKHN0ci5wZWVrQnl0ZSgpID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBzdHIuZ2V0Qnl0ZXMoYmxvY2tMZW4pO1xuICAgICAgICBidWZmZXIuc2V0KGJsb2NrLCBidWZmZXJMZW5ndGgpO1xuXG4gICAgICAgIGlmIChibG9jay5sZW5ndGggPCBibG9ja0xlbikge1xuICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxpdENvZGVUYWJsZTtcbiAgICB2YXIgZGlzdENvZGVUYWJsZTtcblxuICAgIGlmIChoZHIgPT09IDEpIHtcbiAgICAgIGxpdENvZGVUYWJsZSA9IGZpeGVkTGl0Q29kZVRhYjtcbiAgICAgIGRpc3RDb2RlVGFibGUgPSBmaXhlZERpc3RDb2RlVGFiO1xuICAgIH0gZWxzZSBpZiAoaGRyID09PSAyKSB7XG4gICAgICB2YXIgbnVtTGl0Q29kZXMgPSB0aGlzLmdldEJpdHMoNSkgKyAyNTc7XG4gICAgICB2YXIgbnVtRGlzdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMTtcbiAgICAgIHZhciBudW1Db2RlTGVuQ29kZXMgPSB0aGlzLmdldEJpdHMoNCkgKyA0O1xuICAgICAgdmFyIGNvZGVMZW5Db2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5Db2RlTWFwLmxlbmd0aCk7XG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bUNvZGVMZW5Db2RlczsgKytpKSB7XG4gICAgICAgIGNvZGVMZW5Db2RlTGVuZ3Roc1tjb2RlTGVuQ29kZU1hcFtpXV0gPSB0aGlzLmdldEJpdHMoMyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTtcbiAgICAgIGxlbiA9IDA7XG4gICAgICBpID0gMDtcbiAgICAgIHZhciBjb2RlcyA9IG51bUxpdENvZGVzICsgbnVtRGlzdENvZGVzO1xuICAgICAgdmFyIGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoY29kZXMpO1xuICAgICAgdmFyIGJpdHNMZW5ndGgsIGJpdHNPZmZzZXQsIHdoYXQ7XG5cbiAgICAgIHdoaWxlIChpIDwgY29kZXMpIHtcbiAgICAgICAgdmFyIGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSAxNikge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSAyO1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAzO1xuICAgICAgICAgIHdoYXQgPSBsZW47XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTcpIHtcbiAgICAgICAgICBiaXRzTGVuZ3RoID0gMztcbiAgICAgICAgICBiaXRzT2Zmc2V0ID0gMztcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxOCkge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSA3O1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAxMTtcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gbGVuID0gY29kZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXBlYXRMZW5ndGggPSB0aGlzLmdldEJpdHMoYml0c0xlbmd0aCkgKyBiaXRzT2Zmc2V0O1xuXG4gICAgICAgIHdoaWxlIChyZXBlYXRMZW5ndGgtLSA+IDApIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gd2hhdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXRDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KDAsIG51bUxpdENvZGVzKSk7XG4gICAgICBkaXN0Q29kZVRhYmxlID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocy5zdWJhcnJheShudW1MaXRDb2RlcywgY29kZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBibG9jayB0eXBlIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICB2YXIgbGltaXQgPSBidWZmZXIgPyBidWZmZXIubGVuZ3RoIDogMDtcbiAgICB2YXIgcG9zID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7XG5cbiAgICAgIGlmIChjb2RlMSA8IDI1Nikge1xuICAgICAgICBpZiAocG9zICsgMSA+PSBsaW1pdCkge1xuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIDEpO1xuICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjb2RlMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlMSA9PT0gMjU2KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gcG9zO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvZGUxIC09IDI1NztcbiAgICAgIGNvZGUxID0gbGVuZ3RoRGVjb2RlW2NvZGUxXTtcbiAgICAgIHZhciBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgIH1cblxuICAgICAgbGVuID0gKGNvZGUxICYgMHhmZmZmKSArIGNvZGUyO1xuICAgICAgY29kZTEgPSB0aGlzLmdldENvZGUoZGlzdENvZGVUYWJsZSk7XG4gICAgICBjb2RlMSA9IGRpc3REZWNvZGVbY29kZTFdO1xuICAgICAgY29kZTIgPSBjb2RlMSA+PiAxNjtcblxuICAgICAgaWYgKGNvZGUyID4gMCkge1xuICAgICAgICBjb2RlMiA9IHRoaXMuZ2V0Qml0cyhjb2RlMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkaXN0ID0gKGNvZGUxICYgMHhmZmZmKSArIGNvZGUyO1xuXG4gICAgICBpZiAocG9zICsgbGVuID49IGxpbWl0KSB7XG4gICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbik7XG4gICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBsZW47ICsraywgKytwb3MpIHtcbiAgICAgICAgYnVmZmVyW3Bvc10gPSBidWZmZXJbcG9zIC0gZGlzdF07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBGbGF0ZVN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5GbGF0ZVN0cmVhbSA9IEZsYXRlU3RyZWFtO1xuXG52YXIgUHJlZGljdG9yU3RyZWFtID0gZnVuY3Rpb24gUHJlZGljdG9yU3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gUHJlZGljdG9yU3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFyYW1zKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgcHJlZGljdG9yID0gdGhpcy5wcmVkaWN0b3IgPSBwYXJhbXMuZ2V0KFwiUHJlZGljdG9yXCIpIHx8IDE7XG5cbiAgICBpZiAocHJlZGljdG9yIDw9IDEpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgaWYgKHByZWRpY3RvciAhPT0gMiAmJiAocHJlZGljdG9yIDwgMTAgfHwgcHJlZGljdG9yID4gMTUpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtwcmVkaWN0b3J9YCk7XG4gICAgfVxuXG4gICAgaWYgKHByZWRpY3RvciA9PT0gMikge1xuICAgICAgdGhpcy5yZWFkQmxvY2sgPSB0aGlzLnJlYWRCbG9ja1RpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVhZEJsb2NrID0gdGhpcy5yZWFkQmxvY2tQbmc7XG4gICAgfVxuXG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzID0gcGFyYW1zLmdldChcIkNvbG9yc1wiKSB8fCAxO1xuICAgIHZhciBiaXRzID0gdGhpcy5iaXRzID0gcGFyYW1zLmdldChcIkJpdHNQZXJDb21wb25lbnRcIikgfHwgODtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA9IHBhcmFtcy5nZXQoXCJDb2x1bW5zXCIpIHx8IDE7XG4gICAgdGhpcy5waXhCeXRlcyA9IGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgdGhpcy5yb3dCeXRlcyA9IGNvbHVtbnMgKiBjb2xvcnMgKiBiaXRzICsgNyA+PiAzO1xuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrVGlmZiA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1RpZmYoKSB7XG4gICAgdmFyIHJvd0J5dGVzID0gdGhpcy5yb3dCeXRlcztcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICB2YXIgYml0cyA9IHRoaXMuYml0cztcbiAgICB2YXIgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgdmFyIHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbmJ1ZiA9IDAsXG4gICAgICAgIG91dGJ1ZiA9IDA7XG4gICAgdmFyIGluYml0cyA9IDAsXG4gICAgICAgIG91dGJpdHMgPSAwO1xuICAgIHZhciBwb3MgPSBidWZmZXJMZW5ndGg7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIHZhciBjID0gcmF3Qnl0ZXNbaV0gXiBpbmJ1ZjtcbiAgICAgICAgYyBePSBjID4+IDE7XG4gICAgICAgIGMgXj0gYyA+PiAyO1xuICAgICAgICBjIF49IGMgPj4gNDtcbiAgICAgICAgaW5idWYgPSAoYyAmIDEpIDw8IDc7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3NdID0gYnVmZmVyW3BvcyAtIGNvbG9yc10gKyByYXdCeXRlc1tpXTtcbiAgICAgICAgcG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChiaXRzID09PSAxNikge1xuICAgICAgdmFyIGJ5dGVzUGVyUGl4ZWwgPSBjb2xvcnMgKiAyO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXNQZXJQaXhlbDsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgaSArPSAyKSB7XG4gICAgICAgIHZhciBzdW0gPSAoKHJhd0J5dGVzW2ldICYgMHhmZikgPDwgOCkgKyAocmF3Qnl0ZXNbaSArIDFdICYgMHhmZikgKyAoKGJ1ZmZlcltwb3MgLSBieXRlc1BlclBpeGVsXSAmIDB4ZmYpIDw8IDgpICsgKGJ1ZmZlcltwb3MgLSBieXRlc1BlclBpeGVsICsgMV0gJiAweGZmKTtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHN1bSA+PiA4ICYgMHhmZjtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHN1bSAmIDB4ZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb21wQXJyYXkgPSBuZXcgVWludDhBcnJheShjb2xvcnMgKyAxKTtcbiAgICAgIHZhciBiaXRNYXNrID0gKDEgPDwgYml0cykgLSAxO1xuICAgICAgdmFyIGogPSAwLFxuICAgICAgICAgIGsgPSBidWZmZXJMZW5ndGg7XG4gICAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnM7ICsraSkge1xuICAgICAgICBmb3IgKHZhciBrayA9IDA7IGtrIDwgY29sb3JzOyArK2trKSB7XG4gICAgICAgICAgaWYgKGluYml0cyA8IGJpdHMpIHtcbiAgICAgICAgICAgIGluYnVmID0gaW5idWYgPDwgOCB8IHJhd0J5dGVzW2orK10gJiAweGZmO1xuICAgICAgICAgICAgaW5iaXRzICs9IDg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29tcEFycmF5W2trXSA9IGNvbXBBcnJheVtra10gKyAoaW5idWYgPj4gaW5iaXRzIC0gYml0cykgJiBiaXRNYXNrO1xuICAgICAgICAgIGluYml0cyAtPSBiaXRzO1xuICAgICAgICAgIG91dGJ1ZiA9IG91dGJ1ZiA8PCBiaXRzIHwgY29tcEFycmF5W2trXTtcbiAgICAgICAgICBvdXRiaXRzICs9IGJpdHM7XG5cbiAgICAgICAgICBpZiAob3V0Yml0cyA+PSA4KSB7XG4gICAgICAgICAgICBidWZmZXJbaysrXSA9IG91dGJ1ZiA+PiBvdXRiaXRzIC0gOCAmIDB4ZmY7XG4gICAgICAgICAgICBvdXRiaXRzIC09IDg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvdXRiaXRzID4gMCkge1xuICAgICAgICBidWZmZXJbaysrXSA9IChvdXRidWYgPDwgOCAtIG91dGJpdHMpICsgKGluYnVmICYgKDEgPDwgOCAtIG91dGJpdHMpIC0gMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJMZW5ndGggKz0gcm93Qnl0ZXM7XG4gIH07XG5cbiAgUHJlZGljdG9yU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2tQbmcgPSBmdW5jdGlvbiBwcmVkaWN0b3JTdHJlYW1SZWFkQmxvY2tQbmcoKSB7XG4gICAgdmFyIHJvd0J5dGVzID0gdGhpcy5yb3dCeXRlcztcbiAgICB2YXIgcGl4Qnl0ZXMgPSB0aGlzLnBpeEJ5dGVzO1xuICAgIHZhciBwcmVkaWN0b3IgPSB0aGlzLnN0ci5nZXRCeXRlKCk7XG4gICAgdmFyIHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgcm93Qnl0ZXMpO1xuICAgIHZhciBwcmV2Um93ID0gYnVmZmVyLnN1YmFycmF5KGJ1ZmZlckxlbmd0aCAtIHJvd0J5dGVzLCBidWZmZXJMZW5ndGgpO1xuXG4gICAgaWYgKHByZXZSb3cubGVuZ3RoID09PSAwKSB7XG4gICAgICBwcmV2Um93ID0gbmV3IFVpbnQ4QXJyYXkocm93Qnl0ZXMpO1xuICAgIH1cblxuICAgIHZhciBpLFxuICAgICAgICBqID0gYnVmZmVyTGVuZ3RoLFxuICAgICAgICB1cCxcbiAgICAgICAgYztcblxuICAgIHN3aXRjaCAocHJlZGljdG9yKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2orK10gPSByYXdCeXRlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2orK10gPSByYXdCeXRlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqXSA9IGJ1ZmZlcltqIC0gcGl4Qnl0ZXNdICsgcmF3Qnl0ZXNbaV0gJiAweGZmO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2orK10gPSBwcmV2Um93W2ldICsgcmF3Qnl0ZXNbaV0gJiAweGZmO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaisrXSA9IChwcmV2Um93W2ldID4+IDEpICsgcmF3Qnl0ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbal0gPSAocHJldlJvd1tpXSArIGJ1ZmZlcltqIC0gcGl4Qnl0ZXNdID4+IDEpICsgcmF3Qnl0ZXNbaV0gJiAweGZmO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgdXAgPSBwcmV2Um93W2ldO1xuICAgICAgICAgIGMgPSByYXdCeXRlc1tpXTtcbiAgICAgICAgICBidWZmZXJbaisrXSA9IHVwICsgYztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIHVwID0gcHJldlJvd1tpXTtcbiAgICAgICAgICB2YXIgdXBMZWZ0ID0gcHJldlJvd1tpIC0gcGl4Qnl0ZXNdO1xuICAgICAgICAgIHZhciBsZWZ0ID0gYnVmZmVyW2ogLSBwaXhCeXRlc107XG4gICAgICAgICAgdmFyIHAgPSBsZWZ0ICsgdXAgLSB1cExlZnQ7XG4gICAgICAgICAgdmFyIHBhID0gcCAtIGxlZnQ7XG5cbiAgICAgICAgICBpZiAocGEgPCAwKSB7XG4gICAgICAgICAgICBwYSA9IC1wYTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGIgPSBwIC0gdXA7XG5cbiAgICAgICAgICBpZiAocGIgPCAwKSB7XG4gICAgICAgICAgICBwYiA9IC1wYjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcGMgPSBwIC0gdXBMZWZ0O1xuXG4gICAgICAgICAgaWYgKHBjIDwgMCkge1xuICAgICAgICAgICAgcGMgPSAtcGM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYyA9IHJhd0J5dGVzW2ldO1xuXG4gICAgICAgICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKSB7XG4gICAgICAgICAgICBidWZmZXJbaisrXSA9IGxlZnQgKyBjO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGIgPD0gcGMpIHtcbiAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXJbaisrXSA9IHVwTGVmdCArIGM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke3ByZWRpY3Rvcn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgfTtcblxuICByZXR1cm4gUHJlZGljdG9yU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLlByZWRpY3RvclN0cmVhbSA9IFByZWRpY3RvclN0cmVhbTtcblxudmFyIERlY3J5cHRTdHJlYW0gPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gRGVjcnlwdFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5kZWNyeXB0ID0gZGVjcnlwdDtcbiAgICB0aGlzLm5leHRDaHVuayA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIHZhciBjaHVua1NpemUgPSA1MTI7XG4gIERlY3J5cHRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBEZWNyeXB0U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICB2YXIgY2h1bms7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY2h1bmsgPSB0aGlzLm5leHRDaHVuaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2h1bmsgPSB0aGlzLnN0ci5nZXRCeXRlcyhjaHVua1NpemUpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFjaHVuayB8fCBjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5leHRDaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgdmFyIGhhc01vcmVEYXRhID0gdGhpcy5uZXh0Q2h1bmsgJiYgdGhpcy5uZXh0Q2h1bmsubGVuZ3RoID4gMDtcbiAgICB2YXIgZGVjcnlwdCA9IHRoaXMuZGVjcnlwdDtcbiAgICBjaHVuayA9IGRlY3J5cHQoY2h1bmssICFoYXNNb3JlRGF0YSk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIHZhciBpLFxuICAgICAgICBuID0gY2h1bmsubGVuZ3RoO1xuICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjaHVua1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gRGVjcnlwdFN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gRGVjcnlwdFN0cmVhbTtcblxudmFyIEFzY2lpODVTdHJlYW0gPSBmdW5jdGlvbiBBc2NpaTg1U3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQXNjaWk4NVN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5pbnB1dCA9IG5ldyBVaW50OEFycmF5KDUpO1xuXG4gICAgaWYgKG1heWJlTGVuZ3RoKSB7XG4gICAgICBtYXliZUxlbmd0aCA9IDAuOCAqIG1heWJlTGVuZ3RoO1xuICAgIH1cblxuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIEFzY2lpODVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBBc2NpaTg1U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBBc2NpaTg1U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICB2YXIgVElMREFfQ0hBUiA9IDB4N2U7XG4gICAgdmFyIFpfTE9XRVJfQ0hBUiA9IDB4N2E7XG4gICAgdmFyIEVPRiA9IC0xO1xuICAgIHZhciBzdHIgPSB0aGlzLnN0cjtcbiAgICB2YXIgYyA9IHN0ci5nZXRCeXRlKCk7XG5cbiAgICB3aGlsZSAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoYykpIHtcbiAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgIH1cblxuICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aCxcbiAgICAgICAgYnVmZmVyO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKGMgPT09IFpfTE9XRVJfQ0hBUikge1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgNCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICAgIGlucHV0WzBdID0gYztcblxuICAgICAgZm9yIChpID0gMTsgaSA8IDU7ICsraSkge1xuICAgICAgICBjID0gc3RyLmdldEJ5dGUoKTtcblxuICAgICAgICB3aGlsZSAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoYykpIHtcbiAgICAgICAgICBjID0gc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0W2ldID0gYztcblxuICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09IFRJTERBX0NIQVIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBpIC0gMSk7XG4gICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSBpIC0gMTtcblxuICAgICAgaWYgKGkgPCA1KSB7XG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgaW5wdXRbaV0gPSAweDIxICsgODQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB0ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IDU7ICsraSkge1xuICAgICAgICB0ID0gdCAqIDg1ICsgKGlucHV0W2ldIC0gMHgyMSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IHQgJiAweGZmO1xuICAgICAgICB0ID4+PSA4O1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQXNjaWk4NVN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5Bc2NpaTg1U3RyZWFtID0gQXNjaWk4NVN0cmVhbTtcblxudmFyIEFzY2lpSGV4U3RyZWFtID0gZnVuY3Rpb24gQXNjaWlIZXhTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBBc2NpaUhleFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5maXJzdERpZ2l0ID0gLTE7XG5cbiAgICBpZiAobWF5YmVMZW5ndGgpIHtcbiAgICAgIG1heWJlTGVuZ3RoID0gMC41ICogbWF5YmVMZW5ndGg7XG4gICAgfVxuXG4gICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgQXNjaWlIZXhTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICBBc2NpaUhleFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gQXNjaWlIZXhTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgIHZhciBVUFNUUkVBTV9CTE9DS19TSVpFID0gODAwMDtcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLnN0ci5nZXRCeXRlcyhVUFNUUkVBTV9CTE9DS19TSVpFKTtcblxuICAgIGlmICghYnl0ZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1heERlY29kZUxlbmd0aCA9IGJ5dGVzLmxlbmd0aCArIDEgPj4gMTtcbiAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBtYXhEZWNvZGVMZW5ndGgpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICB2YXIgZmlyc3REaWdpdCA9IHRoaXMuZmlyc3REaWdpdDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IGJ5dGVzW2ldLFxuICAgICAgICAgIGRpZ2l0O1xuXG4gICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgIGRpZ2l0ID0gY2ggJiAweDBmO1xuICAgICAgfSBlbHNlIGlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NDYgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDY2KSB7XG4gICAgICAgIGRpZ2l0ID0gKGNoICYgMHgwZikgKyA5O1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdERpZ2l0IDwgMCkge1xuICAgICAgICBmaXJzdERpZ2l0ID0gZGlnaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7XG4gICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlyc3REaWdpdCA+PSAwICYmIHRoaXMuZW9mKSB7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0O1xuICAgICAgZmlyc3REaWdpdCA9IC0xO1xuICAgIH1cblxuICAgIHRoaXMuZmlyc3REaWdpdCA9IGZpcnN0RGlnaXQ7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIEFzY2lpSGV4U3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gQXNjaWlIZXhTdHJlYW07XG5cbnZhciBSdW5MZW5ndGhTdHJlYW0gPSBmdW5jdGlvbiBSdW5MZW5ndGhTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBSdW5MZW5ndGhTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCkge1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIFJ1bkxlbmd0aFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIFJ1bkxlbmd0aFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gUnVuTGVuZ3RoU3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICB2YXIgcmVwZWF0SGVhZGVyID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoMik7XG5cbiAgICBpZiAoIXJlcGVhdEhlYWRlciB8fCByZXBlYXRIZWFkZXIubGVuZ3RoIDwgMiB8fCByZXBlYXRIZWFkZXJbMF0gPT09IDEyOCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBidWZmZXI7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIHZhciBuID0gcmVwZWF0SGVhZGVyWzBdO1xuXG4gICAgaWYgKG4gPCAxMjgpIHtcbiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4gKyAxKTtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSByZXBlYXRIZWFkZXJbMV07XG5cbiAgICAgIGlmIChuID4gMCkge1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5zdHIuZ2V0Qnl0ZXMobik7XG4gICAgICAgIGJ1ZmZlci5zZXQoc291cmNlLCBidWZmZXJMZW5ndGgpO1xuICAgICAgICBidWZmZXJMZW5ndGggKz0gbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IDI1NyAtIG47XG4gICAgICB2YXIgYiA9IHJlcGVhdEhlYWRlclsxXTtcbiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4gKyAxKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIFJ1bkxlbmd0aFN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5SdW5MZW5ndGhTdHJlYW0gPSBSdW5MZW5ndGhTdHJlYW07XG5cbnZhciBMWldTdHJlYW0gPSBmdW5jdGlvbiBMWldTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBMWldTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpIHtcbiAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICB0aGlzLmNhY2hlZERhdGEgPSAwO1xuICAgIHRoaXMuYml0c0NhY2hlZCA9IDA7XG4gICAgdmFyIG1heEx6d0RpY3Rpb25hcnlTaXplID0gNDA5NjtcbiAgICB2YXIgbHp3U3RhdGUgPSB7XG4gICAgICBlYXJseUNoYW5nZSxcbiAgICAgIGNvZGVMZW5ndGg6IDksXG4gICAgICBuZXh0Q29kZTogMjU4LFxuICAgICAgZGljdGlvbmFyeVZhbHVlczogbmV3IFVpbnQ4QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgZGljdGlvbmFyeUxlbmd0aHM6IG5ldyBVaW50MTZBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzOiBuZXcgVWludDE2QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgY3VycmVudFNlcXVlbmNlOiBuZXcgVWludDhBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGg6IDBcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgbHp3U3RhdGUuZGljdGlvbmFyeVZhbHVlc1tpXSA9IGk7XG4gICAgICBsendTdGF0ZS5kaWN0aW9uYXJ5TGVuZ3Roc1tpXSA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5sendTdGF0ZSA9IGx6d1N0YXRlO1xuICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIExaV1N0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gIExaV1N0cmVhbS5wcm90b3R5cGUucmVhZEJpdHMgPSBmdW5jdGlvbiBMWldTdHJlYW1fcmVhZEJpdHMobikge1xuICAgIHZhciBiaXRzQ2FjaGVkID0gdGhpcy5iaXRzQ2FjaGVkO1xuICAgIHZhciBjYWNoZWREYXRhID0gdGhpcy5jYWNoZWREYXRhO1xuXG4gICAgd2hpbGUgKGJpdHNDYWNoZWQgPCBuKSB7XG4gICAgICB2YXIgYyA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcblxuICAgICAgaWYgKGMgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlZERhdGEgPSBjYWNoZWREYXRhIDw8IDggfCBjO1xuICAgICAgYml0c0NhY2hlZCArPSA4O1xuICAgIH1cblxuICAgIHRoaXMuYml0c0NhY2hlZCA9IGJpdHNDYWNoZWQgLT0gbjtcbiAgICB0aGlzLmNhY2hlZERhdGEgPSBjYWNoZWREYXRhO1xuICAgIHRoaXMubGFzdENvZGUgPSBudWxsO1xuICAgIHJldHVybiBjYWNoZWREYXRhID4+PiBiaXRzQ2FjaGVkICYgKDEgPDwgbikgLSAxO1xuICB9O1xuXG4gIExaV1N0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gTFpXU3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICB2YXIgYmxvY2tTaXplID0gNTEyO1xuICAgIHZhciBlc3RpbWF0ZWREZWNvZGVkU2l6ZSA9IGJsb2NrU2l6ZSAqIDIsXG4gICAgICAgIGRlY29kZWRTaXplRGVsdGEgPSBibG9ja1NpemU7XG4gICAgdmFyIGksIGosIHE7XG4gICAgdmFyIGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTtcblxuICAgIGlmICghbHp3U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZWFybHlDaGFuZ2UgPSBsendTdGF0ZS5lYXJseUNoYW5nZTtcbiAgICB2YXIgbmV4dENvZGUgPSBsendTdGF0ZS5uZXh0Q29kZTtcbiAgICB2YXIgZGljdGlvbmFyeVZhbHVlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlWYWx1ZXM7XG4gICAgdmFyIGRpY3Rpb25hcnlMZW5ndGhzID0gbHp3U3RhdGUuZGljdGlvbmFyeUxlbmd0aHM7XG4gICAgdmFyIGRpY3Rpb25hcnlQcmV2Q29kZXMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5UHJldkNvZGVzO1xuICAgIHZhciBjb2RlTGVuZ3RoID0gbHp3U3RhdGUuY29kZUxlbmd0aDtcbiAgICB2YXIgcHJldkNvZGUgPSBsendTdGF0ZS5wcmV2Q29kZTtcbiAgICB2YXIgY3VycmVudFNlcXVlbmNlID0gbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlO1xuICAgIHZhciBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgdmFyIGRlY29kZWRMZW5ndGggPSAwO1xuICAgIHZhciBjdXJyZW50QnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoICsgZXN0aW1hdGVkRGVjb2RlZFNpemUpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGJsb2NrU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIgY29kZSA9IHRoaXMucmVhZEJpdHMoY29kZUxlbmd0aCk7XG4gICAgICB2YXIgaGFzUHJldiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA+IDA7XG5cbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIGN1cnJlbnRTZXF1ZW5jZVswXSA9IGNvZGU7XG4gICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPj0gMjU4KSB7XG4gICAgICAgIGlmIChjb2RlIDwgbmV4dENvZGUpIHtcbiAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSBkaWN0aW9uYXJ5TGVuZ3Roc1tjb2RlXTtcblxuICAgICAgICAgIGZvciAoaiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCAtIDEsIHEgPSBjb2RlOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgY3VycmVudFNlcXVlbmNlW2pdID0gZGljdGlvbmFyeVZhbHVlc1txXTtcbiAgICAgICAgICAgIHEgPSBkaWN0aW9uYXJ5UHJldkNvZGVzW3FdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50U2VxdWVuY2VbY3VycmVudFNlcXVlbmNlTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDI1Nikge1xuICAgICAgICBjb2RlTGVuZ3RoID0gOTtcbiAgICAgICAgbmV4dENvZGUgPSAyNTg7XG4gICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICBkZWxldGUgdGhpcy5sendTdGF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcmV2KSB7XG4gICAgICAgIGRpY3Rpb25hcnlQcmV2Q29kZXNbbmV4dENvZGVdID0gcHJldkNvZGU7XG4gICAgICAgIGRpY3Rpb25hcnlMZW5ndGhzW25leHRDb2RlXSA9IGRpY3Rpb25hcnlMZW5ndGhzW3ByZXZDb2RlXSArIDE7XG4gICAgICAgIGRpY3Rpb25hcnlWYWx1ZXNbbmV4dENvZGVdID0gY3VycmVudFNlcXVlbmNlWzBdO1xuICAgICAgICBuZXh0Q29kZSsrO1xuICAgICAgICBjb2RlTGVuZ3RoID0gbmV4dENvZGUgKyBlYXJseUNoYW5nZSAmIG5leHRDb2RlICsgZWFybHlDaGFuZ2UgLSAxID8gY29kZUxlbmd0aCA6IE1hdGgubWluKE1hdGgubG9nKG5leHRDb2RlICsgZWFybHlDaGFuZ2UpIC8gMC42OTMxNDcxODA1NTk5NDUzICsgMSwgMTIpIHwgMDtcbiAgICAgIH1cblxuICAgICAgcHJldkNvZGUgPSBjb2RlO1xuICAgICAgZGVjb2RlZExlbmd0aCArPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG5cbiAgICAgIGlmIChlc3RpbWF0ZWREZWNvZGVkU2l6ZSA8IGRlY29kZWRMZW5ndGgpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGVzdGltYXRlZERlY29kZWRTaXplICs9IGRlY29kZWRTaXplRGVsdGE7XG4gICAgICAgIH0gd2hpbGUgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCk7XG5cbiAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBlc3RpbWF0ZWREZWNvZGVkU2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBjdXJyZW50U2VxdWVuY2VMZW5ndGg7IGorKykge1xuICAgICAgICBidWZmZXJbY3VycmVudEJ1ZmZlckxlbmd0aCsrXSA9IGN1cnJlbnRTZXF1ZW5jZVtqXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsendTdGF0ZS5uZXh0Q29kZSA9IG5leHRDb2RlO1xuICAgIGx6d1N0YXRlLmNvZGVMZW5ndGggPSBjb2RlTGVuZ3RoO1xuICAgIGx6d1N0YXRlLnByZXZDb2RlID0gcHJldkNvZGU7XG4gICAgbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gY3VycmVudEJ1ZmZlckxlbmd0aDtcbiAgfTtcblxuICByZXR1cm4gTFpXU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkxaV1N0cmVhbSA9IExaV1N0cmVhbTtcblxudmFyIE51bGxTdHJlYW0gPSBmdW5jdGlvbiBOdWxsU3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gTnVsbFN0cmVhbSgpIHtcbiAgICBTdHJlYW0uY2FsbCh0aGlzLCBuZXcgVWludDhBcnJheSgwKSk7XG4gIH1cblxuICBOdWxsU3RyZWFtLnByb3RvdHlwZSA9IFN0cmVhbS5wcm90b3R5cGU7XG4gIHJldHVybiBOdWxsU3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLk51bGxTdHJlYW0gPSBOdWxsU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNDSVRURmF4U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NjaXR0ID0gX193X3BkZmpzX3JlcXVpcmVfXygxNCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBDQ0lUVEZheFN0cmVhbSA9IGZ1bmN0aW9uIENDSVRURmF4U3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gQ0NJVFRGYXhTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmFtcykpIHtcbiAgICAgIHBhcmFtcyA9IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5nZXRCeXRlKCk7XG4gICAgICB9XG5cbiAgICB9O1xuICAgIHRoaXMuY2NpdHRGYXhEZWNvZGVyID0gbmV3IF9jY2l0dC5DQ0lUVEZheERlY29kZXIoc291cmNlLCB7XG4gICAgICBLOiBwYXJhbXMuZ2V0KFwiS1wiKSxcbiAgICAgIEVuZE9mTGluZTogcGFyYW1zLmdldChcIkVuZE9mTGluZVwiKSxcbiAgICAgIEVuY29kZWRCeXRlQWxpZ246IHBhcmFtcy5nZXQoXCJFbmNvZGVkQnl0ZUFsaWduXCIpLFxuICAgICAgQ29sdW1uczogcGFyYW1zLmdldChcIkNvbHVtbnNcIiksXG4gICAgICBSb3dzOiBwYXJhbXMuZ2V0KFwiUm93c1wiKSxcbiAgICAgIEVuZE9mQmxvY2s6IHBhcmFtcy5nZXQoXCJFbmRPZkJsb2NrXCIpLFxuICAgICAgQmxhY2tJczE6IHBhcmFtcy5nZXQoXCJCbGFja0lzMVwiKVxuICAgIH0pO1xuXG4gICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gIH1cblxuICBDQ0lUVEZheFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgQ0NJVFRGYXhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTtcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdID0gYztcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENDSVRURmF4U3RyZWFtO1xufSgpO1xuXG5leHBvcnRzLkNDSVRURmF4U3RyZWFtID0gQ0NJVFRGYXhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ0NJVFRGYXhEZWNvZGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDQ0lUVEZheERlY29kZXIgPSBmdW5jdGlvbiBDQ0lUVEZheERlY29kZXIoKSB7XG4gIGNvbnN0IGNjaXR0RU9MID0gLTI7XG4gIGNvbnN0IGNjaXR0RU9GID0gLTE7XG4gIGNvbnN0IHR3b0RpbVBhc3MgPSAwO1xuICBjb25zdCB0d29EaW1Ib3JpeiA9IDE7XG4gIGNvbnN0IHR3b0RpbVZlcnQwID0gMjtcbiAgY29uc3QgdHdvRGltVmVydFIxID0gMztcbiAgY29uc3QgdHdvRGltVmVydEwxID0gNDtcbiAgY29uc3QgdHdvRGltVmVydFIyID0gNTtcbiAgY29uc3QgdHdvRGltVmVydEwyID0gNjtcbiAgY29uc3QgdHdvRGltVmVydFIzID0gNztcbiAgY29uc3QgdHdvRGltVmVydEwzID0gODtcbiAgY29uc3QgdHdvRGltVGFibGUgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbNywgdHdvRGltVmVydEwzXSwgWzcsIHR3b0RpbVZlcnRSM10sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydEwyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs2LCB0d29EaW1WZXJ0UjJdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdXTtcbiAgY29uc3Qgd2hpdGVUYWJsZTEgPSBbWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF1dO1xuICBjb25zdCB3aGl0ZVRhYmxlMiA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWzgsIDI5XSwgWzgsIDI5XSwgWzgsIDMwXSwgWzgsIDMwXSwgWzgsIDQ1XSwgWzgsIDQ1XSwgWzgsIDQ2XSwgWzgsIDQ2XSwgWzcsIDIyXSwgWzcsIDIyXSwgWzcsIDIyXSwgWzcsIDIyXSwgWzcsIDIzXSwgWzcsIDIzXSwgWzcsIDIzXSwgWzcsIDIzXSwgWzgsIDQ3XSwgWzgsIDQ3XSwgWzgsIDQ4XSwgWzgsIDQ4XSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzYsIDEzXSwgWzcsIDIwXSwgWzcsIDIwXSwgWzcsIDIwXSwgWzcsIDIwXSwgWzgsIDMzXSwgWzgsIDMzXSwgWzgsIDM0XSwgWzgsIDM0XSwgWzgsIDM1XSwgWzgsIDM1XSwgWzgsIDM2XSwgWzgsIDM2XSwgWzgsIDM3XSwgWzgsIDM3XSwgWzgsIDM4XSwgWzgsIDM4XSwgWzcsIDE5XSwgWzcsIDE5XSwgWzcsIDE5XSwgWzcsIDE5XSwgWzgsIDMxXSwgWzgsIDMxXSwgWzgsIDMyXSwgWzgsIDMyXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs2LCAxMl0sIFs4LCA1M10sIFs4LCA1M10sIFs4LCA1NF0sIFs4LCA1NF0sIFs3LCAyNl0sIFs3LCAyNl0sIFs3LCAyNl0sIFs3LCAyNl0sIFs4LCAzOV0sIFs4LCAzOV0sIFs4LCA0MF0sIFs4LCA0MF0sIFs4LCA0MV0sIFs4LCA0MV0sIFs4LCA0Ml0sIFs4LCA0Ml0sIFs4LCA0M10sIFs4LCA0M10sIFs4LCA0NF0sIFs4LCA0NF0sIFs3LCAyMV0sIFs3LCAyMV0sIFs3LCAyMV0sIFs3LCAyMV0sIFs3LCAyOF0sIFs3LCAyOF0sIFs3LCAyOF0sIFs3LCAyOF0sIFs4LCA2MV0sIFs4LCA2MV0sIFs4LCA2Ml0sIFs4LCA2Ml0sIFs4LCA2M10sIFs4LCA2M10sIFs4LCAwXSwgWzgsIDBdLCBbOCwgMzIwXSwgWzgsIDMyMF0sIFs4LCAzODRdLCBbOCwgMzg0XSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDEwXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzUsIDExXSwgWzcsIDI3XSwgWzcsIDI3XSwgWzcsIDI3XSwgWzcsIDI3XSwgWzgsIDU5XSwgWzgsIDU5XSwgWzgsIDYwXSwgWzgsIDYwXSwgWzksIDE0NzJdLCBbOSwgMTUzNl0sIFs5LCAxNjAwXSwgWzksIDE3MjhdLCBbNywgMThdLCBbNywgMThdLCBbNywgMThdLCBbNywgMThdLCBbNywgMjRdLCBbNywgMjRdLCBbNywgMjRdLCBbNywgMjRdLCBbOCwgNDldLCBbOCwgNDldLCBbOCwgNTBdLCBbOCwgNTBdLCBbOCwgNTFdLCBbOCwgNTFdLCBbOCwgNTJdLCBbOCwgNTJdLCBbNywgMjVdLCBbNywgMjVdLCBbNywgMjVdLCBbNywgMjVdLCBbOCwgNTVdLCBbOCwgNTVdLCBbOCwgNTZdLCBbOCwgNTZdLCBbOCwgNTddLCBbOCwgNTddLCBbOCwgNThdLCBbOCwgNThdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbOCwgNDQ4XSwgWzgsIDQ0OF0sIFs4LCA1MTJdLCBbOCwgNTEyXSwgWzksIDcwNF0sIFs5LCA3NjhdLCBbOCwgNjQwXSwgWzgsIDY0MF0sIFs4LCA1NzZdLCBbOCwgNTc2XSwgWzksIDgzMl0sIFs5LCA4OTZdLCBbOSwgOTYwXSwgWzksIDEwMjRdLCBbOSwgMTA4OF0sIFs5LCAxMTUyXSwgWzksIDEyMTZdLCBbOSwgMTI4MF0sIFs5LCAxMzQ0XSwgWzksIDE0MDhdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxNl0sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs2LCAxN10sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE0XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzYsIDE1XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzUsIDY0XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddXTtcbiAgY29uc3QgYmxhY2tUYWJsZTEgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWzEyLCBjY2l0dEVPTF0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdLCBbMTIsIDI1NjBdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMiwgNTJdLCBbMTIsIDUyXSwgWzEzLCA2NDBdLCBbMTMsIDcwNF0sIFsxMywgNzY4XSwgWzEzLCA4MzJdLCBbMTIsIDU1XSwgWzEyLCA1NV0sIFsxMiwgNTZdLCBbMTIsIDU2XSwgWzEzLCAxMjgwXSwgWzEzLCAxMzQ0XSwgWzEzLCAxNDA4XSwgWzEzLCAxNDcyXSwgWzEyLCA1OV0sIFsxMiwgNTldLCBbMTIsIDYwXSwgWzEyLCA2MF0sIFsxMywgMTUzNl0sIFsxMywgMTYwMF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzEzLCAxNjY0XSwgWzEzLCAxNzI4XSwgWzEyLCAzMjBdLCBbMTIsIDMyMF0sIFsxMiwgMzg0XSwgWzEyLCAzODRdLCBbMTIsIDQ0OF0sIFsxMiwgNDQ4XSwgWzEzLCA1MTJdLCBbMTMsIDU3Nl0sIFsxMiwgNTNdLCBbMTIsIDUzXSwgWzEyLCA1NF0sIFsxMiwgNTRdLCBbMTMsIDg5Nl0sIFsxMywgOTYwXSwgWzEzLCAxMDI0XSwgWzEzLCAxMDg4XSwgWzEzLCAxMTUyXSwgWzEzLCAxMjE2XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdXTtcbiAgY29uc3QgYmxhY2tUYWJsZTIgPSBbWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzExLCAyM10sIFsxMSwgMjNdLCBbMTIsIDUwXSwgWzEyLCA1MV0sIFsxMiwgNDRdLCBbMTIsIDQ1XSwgWzEyLCA0Nl0sIFsxMiwgNDddLCBbMTIsIDU3XSwgWzEyLCA1OF0sIFsxMiwgNjFdLCBbMTIsIDI1Nl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEyLCA0OF0sIFsxMiwgNDldLCBbMTIsIDYyXSwgWzEyLCA2M10sIFsxMiwgMzBdLCBbMTIsIDMxXSwgWzEyLCAzMl0sIFsxMiwgMzNdLCBbMTIsIDQwXSwgWzEyLCA0MV0sIFsxMSwgMjJdLCBbMTEsIDIyXSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzEyLCAxMjhdLCBbMTIsIDE5Ml0sIFsxMiwgMjZdLCBbMTIsIDI3XSwgWzEyLCAyOF0sIFsxMiwgMjldLCBbMTEsIDE5XSwgWzExLCAxOV0sIFsxMSwgMjBdLCBbMTEsIDIwXSwgWzEyLCAzNF0sIFsxMiwgMzVdLCBbMTIsIDM2XSwgWzEyLCAzN10sIFsxMiwgMzhdLCBbMTIsIDM5XSwgWzExLCAyMV0sIFsxMSwgMjFdLCBbMTIsIDQyXSwgWzEyLCA0M10sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl1dO1xuICBjb25zdCBibGFja1RhYmxlMyA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWzYsIDldLCBbNiwgOF0sIFs1LCA3XSwgWzUsIDddLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXV07XG5cbiAgZnVuY3Rpb24gQ0NJVFRGYXhEZWNvZGVyKHNvdXJjZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5uZXh0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCBcInNvdXJjZVwiIHBhcmFtZXRlci4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLmVvZiA9IGZhbHNlO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLksgfHwgMDtcbiAgICB0aGlzLmVvbGluZSA9IG9wdGlvbnMuRW5kT2ZMaW5lIHx8IGZhbHNlO1xuICAgIHRoaXMuYnl0ZUFsaWduID0gb3B0aW9ucy5FbmNvZGVkQnl0ZUFsaWduIHx8IGZhbHNlO1xuICAgIHRoaXMuY29sdW1ucyA9IG9wdGlvbnMuQ29sdW1ucyB8fCAxNzI4O1xuICAgIHRoaXMucm93cyA9IG9wdGlvbnMuUm93cyB8fCAwO1xuICAgIGxldCBlb2Jsb2NrID0gb3B0aW9ucy5FbmRPZkJsb2NrO1xuXG4gICAgaWYgKGVvYmxvY2sgPT09IG51bGwgfHwgZW9ibG9jayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlb2Jsb2NrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmVvYmxvY2sgPSBlb2Jsb2NrO1xuICAgIHRoaXMuYmxhY2sgPSBvcHRpb25zLkJsYWNrSXMxIHx8IGZhbHNlO1xuICAgIHRoaXMuY29kaW5nTGluZSA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMgKyAxKTtcbiAgICB0aGlzLnJlZkxpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMik7XG4gICAgdGhpcy5jb2RpbmdMaW5lWzBdID0gdGhpcy5jb2x1bW5zO1xuICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICB0aGlzLnJvdyA9IDA7XG4gICAgdGhpcy5uZXh0TGluZTJEID0gdGhpcy5lbmNvZGluZyA8IDA7XG4gICAgdGhpcy5pbnB1dEJpdHMgPSAwO1xuICAgIHRoaXMuaW5wdXRCdWYgPSAwO1xuICAgIHRoaXMub3V0cHV0Qml0cyA9IDA7XG4gICAgdGhpcy5yb3dzRG9uZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlMTtcblxuICAgIHdoaWxlICgoY29kZTEgPSB0aGlzLl9sb29rQml0cygxMikpID09PSAwKSB7XG4gICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgIH1cblxuICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICB0aGlzLm5leHRMaW5lMkQgPSAhdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgfVxuICB9XG5cbiAgQ0NJVFRGYXhEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICByZWFkTmV4dENoYXIoKSB7XG4gICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWZMaW5lID0gdGhpcy5yZWZMaW5lO1xuICAgICAgY29uc3QgY29kaW5nTGluZSA9IHRoaXMuY29kaW5nTGluZTtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICBsZXQgcmVmUG9zLCBibGFja1BpeGVscywgYml0cywgaTtcblxuICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCkge1xuICAgICAgICBpZiAodGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXJyID0gZmFsc2U7XG4gICAgICAgIGxldCBjb2RlMSwgY29kZTIsIGNvZGUzO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRMaW5lMkQpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBjb2RpbmdMaW5lW2ldIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgICByZWZMaW5lW2ldID0gY29kaW5nTGluZVtpXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWZMaW5lW2krK10gPSBjb2x1bW5zO1xuICAgICAgICAgIHJlZkxpbmVbaV0gPSBjb2x1bW5zO1xuICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgICByZWZQb3MgPSAwO1xuICAgICAgICAgIGJsYWNrUGl4ZWxzID0gMDtcblxuICAgICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fZ2V0VHdvRGltQ29kZSgpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvZGUxKSB7XG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltUGFzczpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3MgKyAxXSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlZkxpbmVbcmVmUG9zICsgMV0gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbUhvcml6OlxuICAgICAgICAgICAgICAgIGNvZGUxID0gY29kZTIgPSAwO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG5cbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRXaGl0ZUNvZGUoKTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuXG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUyLCBibGFja1BpeGVscyBeIDEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjM6XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDMsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIyOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMTpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0MDpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMzpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMjpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMiwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMTpcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIGNjaXR0RU9GOlxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCAyZCBjb2RlXCIpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvbHVtbnMsIDApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RpbmdMaW5lWzBdID0gMDtcbiAgICAgICAgICB0aGlzLmNvZGluZ1BvcyA9IDA7XG4gICAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgICAgd2hpbGUgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgY29kZTEgPSAwO1xuXG4gICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdvdEVPTCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmJ5dGVBbGlnbikge1xuICAgICAgICAgIHRoaXMuaW5wdXRCaXRzICY9IH43O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVvYmxvY2sgJiYgdGhpcy5yb3cgPT09IHRoaXMucm93cyAtIDEpIHtcbiAgICAgICAgICB0aGlzLnJvd3NEb25lID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcblxuICAgICAgICAgIGlmICh0aGlzLmVvbGluZSkge1xuICAgICAgICAgICAgd2hpbGUgKGNvZGUxICE9PSBjY2l0dEVPRiAmJiBjb2RlMSAhPT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuXG4gICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICBnb3RFT0wgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmVvZiAmJiB0aGlzLmVuY29kaW5nID4gMCAmJiAhdGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICF0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lb2Jsb2NrICYmIGdvdEVPTCAmJiB0aGlzLmJ5dGVBbGlnbikge1xuICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID49IDApIHtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgcnRjIGNvZGU6IFwiICsgY29kZTEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVyciAmJiB0aGlzLmVvbGluZSkge1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEzKTtcblxuICAgICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikge1xuICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZGUxID4+IDEgPT09IDEpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICEoY29kZTEgJiAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kaW5nTGluZVswXSA+IDApIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zID0gMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3crKztcbiAgICAgIH1cblxuICAgICAgbGV0IGM7XG5cbiAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPj0gOCkge1xuICAgICAgICBjID0gdGhpcy5jb2RpbmdQb3MgJiAxID8gMCA6IDB4ZmY7XG4gICAgICAgIHRoaXMub3V0cHV0Qml0cyAtPSA4O1xuXG4gICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPT09IDAgJiYgY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAtIGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgLSAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYml0cyA9IDg7XG4gICAgICAgIGMgPSAwO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpZiAodGhpcy5vdXRwdXRCaXRzID4gYml0cykge1xuICAgICAgICAgICAgYyA8PD0gYml0cztcblxuICAgICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgICBjIHw9IDB4ZmYgPj4gOCAtIGJpdHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyAtPSBiaXRzO1xuICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGMgPDw9IHRoaXMub3V0cHV0Qml0cztcblxuICAgICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgICBjIHw9IDB4ZmYgPj4gOCAtIHRoaXMub3V0cHV0Qml0cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYml0cyAtPSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSAwO1xuXG4gICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zKys7XG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyA9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIC0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyAtIDFdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChiaXRzID4gMCkge1xuICAgICAgICAgICAgICBjIDw8PSBiaXRzO1xuICAgICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGJpdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5ibGFjaykge1xuICAgICAgICBjIF49IDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG5cbiAgICBfYWRkUGl4ZWxzKGExLCBibGFja1BpeGVscykge1xuICAgICAgY29uc3QgY29kaW5nTGluZSA9IHRoaXMuY29kaW5nTGluZTtcbiAgICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgICAgaWYgKGExID4gY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7XG4gICAgICAgIGlmIChhMSA+IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgIGExID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGluZ1BvcyAmIDEgXiBibGFja1BpeGVscykge1xuICAgICAgICAgICsrY29kaW5nUG9zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgIH0sXG5cbiAgICBfYWRkUGl4ZWxzTmVnKGExLCBibGFja1BpeGVscykge1xuICAgICAgY29uc3QgY29kaW5nTGluZSA9IHRoaXMuY29kaW5nTGluZTtcbiAgICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgICAgaWYgKGExID4gY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7XG4gICAgICAgIGlmIChhMSA+IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgIGExID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGluZ1BvcyAmIDEgXiBibGFja1BpeGVscykge1xuICAgICAgICAgICsrY29kaW5nUG9zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7XG4gICAgICB9IGVsc2UgaWYgKGExIDwgY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7XG4gICAgICAgIGlmIChhMSA8IDApIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJpbnZhbGlkIGNvZGVcIik7XG4gICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgIGExID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChjb2RpbmdQb3MgPiAwICYmIGExIDwgY29kaW5nTGluZVtjb2RpbmdQb3MgLSAxXSkge1xuICAgICAgICAgIC0tY29kaW5nUG9zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgIH0sXG5cbiAgICBfZmluZFRhYmxlQ29kZShzdGFydCwgZW5kLCB0YWJsZSwgbGltaXQpIHtcbiAgICAgIGNvbnN0IGxpbWl0VmFsdWUgPSBsaW1pdCB8fCAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHtcbiAgICAgICAgbGV0IGNvZGUgPSB0aGlzLl9sb29rQml0cyhpKTtcblxuICAgICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICByZXR1cm4gW3RydWUsIDEsIGZhbHNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgZW5kKSB7XG4gICAgICAgICAgY29kZSA8PD0gZW5kIC0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbGltaXRWYWx1ZSB8fCBjb2RlID49IGxpbWl0VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBwID0gdGFibGVbY29kZSAtIGxpbWl0VmFsdWVdO1xuXG4gICAgICAgICAgaWYgKHBbMF0gPT09IGkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoaSk7XG5cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgcFsxXSwgdHJ1ZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbZmFsc2UsIDAsIGZhbHNlXTtcbiAgICB9LFxuXG4gICAgX2dldFR3b0RpbUNvZGUoKSB7XG4gICAgICBsZXQgY29kZSA9IDA7XG4gICAgICBsZXQgcDtcblxuICAgICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoNyk7XG4gICAgICAgIHAgPSB0d29EaW1UYWJsZVtjb2RlXTtcblxuICAgICAgICBpZiAocCAmJiBwWzBdID4gMCkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMocFswXSk7XG5cbiAgICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxLCA3LCB0d29EaW1UYWJsZSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSAmJiByZXN1bHRbMl0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCB0d28gZGltIGNvZGVcIik7XG4gICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgfSxcblxuICAgIF9nZXRXaGl0ZUNvZGUoKSB7XG4gICAgICBsZXQgY29kZSA9IDA7XG4gICAgICBsZXQgcDtcblxuICAgICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSBjY2l0dEVPRikge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPj4gNSA9PT0gMCkge1xuICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMVtjb2RlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwID0gd2hpdGVUYWJsZTJbY29kZSA+PiAzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwWzBdID4gMCkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMocFswXSk7XG5cbiAgICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMSwgOSwgd2hpdGVUYWJsZTIpO1xuXG4gICAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMSwgMTIsIHdoaXRlVGFibGUxKTtcblxuICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgd2hpdGUgY29kZVwiKTtcblxuICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIF9nZXRCbGFja0NvZGUoKSB7XG4gICAgICBsZXQgY29kZSwgcDtcblxuICAgICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSBjY2l0dEVPRikge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPj4gNyA9PT0gMCkge1xuICAgICAgICAgIHAgPSBibGFja1RhYmxlMVtjb2RlXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7XG4gICAgICAgICAgcCA9IGJsYWNrVGFibGUyWyhjb2RlID4+IDEpIC0gNjRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAgPSBibGFja1RhYmxlM1tjb2RlID4+IDddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBbMF0gPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgyLCA2LCBibGFja1RhYmxlMyk7XG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDcsIDEyLCBibGFja1RhYmxlMiwgNjQpO1xuXG4gICAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMCwgMTMsIGJsYWNrVGFibGUxKTtcblxuICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgYmxhY2sgY29kZVwiKTtcblxuICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgcmV0dXJuIDE7XG4gICAgfSxcblxuICAgIF9sb29rQml0cyhuKSB7XG4gICAgICBsZXQgYztcblxuICAgICAgd2hpbGUgKHRoaXMuaW5wdXRCaXRzIDwgbikge1xuICAgICAgICBpZiAoKGMgPSB0aGlzLnNvdXJjZS5uZXh0KCkpID09PSAtMSkge1xuICAgICAgICAgIGlmICh0aGlzLmlucHV0Qml0cyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNjaXR0RU9GO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0QnVmIDw8IG4gLSB0aGlzLmlucHV0Qml0cyAmIDB4ZmZmZiA+PiAxNiAtIG47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0QnVmID0gdGhpcy5pbnB1dEJ1ZiA8PCA4IHwgYztcbiAgICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRCdWYgPj4gdGhpcy5pbnB1dEJpdHMgLSBuICYgMHhmZmZmID4+IDE2IC0gbjtcbiAgICB9LFxuXG4gICAgX2VhdEJpdHMobikge1xuICAgICAgaWYgKCh0aGlzLmlucHV0Qml0cyAtPSBuKSA8IDApIHtcbiAgICAgICAgdGhpcy5pbnB1dEJpdHMgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuICByZXR1cm4gQ0NJVFRGYXhEZWNvZGVyO1xufSgpO1xuXG5leHBvcnRzLkNDSVRURmF4RGVjb2RlciA9IENDSVRURmF4RGVjb2RlcjtcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5KYmlnMlN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9qYmlnID0gX193X3BkZmpzX3JlcXVpcmVfXygxNik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IEpiaWcyU3RyZWFtID0gZnVuY3Rpb24gSmJpZzJTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBKYmlnMlN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBkaWN0LCBwYXJhbXMpIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcblxuICAgIF9zdHJlYW0uRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgSmJpZzJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfc3RyZWFtLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSmJpZzJTdHJlYW0ucHJvdG90eXBlLCBcImJ5dGVzXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJieXRlc1wiLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgfSxcblxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcblxuICBKYmlnMlN0cmVhbS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyID0gZnVuY3Rpb24gKHJlcXVlc3RlZCkge307XG5cbiAgSmJpZzJTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqYmlnMkltYWdlID0gbmV3IF9qYmlnLkpiaWcySW1hZ2UoKTtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmFtcykpIHtcbiAgICAgIGNvbnN0IGdsb2JhbHNTdHJlYW0gPSB0aGlzLnBhcmFtcy5nZXQoXCJKQklHMkdsb2JhbHNcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGdsb2JhbHNTdHJlYW0pKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxzU3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICAgIGNodW5rcy5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBnbG9iYWxzLFxuICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgIGVuZDogZ2xvYmFscy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2h1bmtzLnB1c2goe1xuICAgICAgZGF0YTogdGhpcy5ieXRlcyxcbiAgICAgIHN0YXJ0OiAwLFxuICAgICAgZW5kOiB0aGlzLmJ5dGVzLmxlbmd0aFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBqYmlnMkltYWdlLnBhcnNlQ2h1bmtzKGNodW5rcyk7XG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGFbaV0gXj0gMHhmZjtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBkYXRhTGVuZ3RoO1xuICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gSmJpZzJTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuSmJpZzJTdHJlYW0gPSBKYmlnMlN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5KYmlnMkltYWdlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG52YXIgX2NjaXR0ID0gX193X3BkZmpzX3JlcXVpcmVfXygxNCk7XG5cbmNsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIoYEpCSUcyIGVycm9yOiAke21zZ31gKTtcbiAgfVxuXG59XG5cbnZhciBKYmlnMkltYWdlID0gZnVuY3Rpb24gSmJpZzJJbWFnZUNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENvbnRleHRDYWNoZSgpIHt9XG5cbiAgQ29udGV4dENhY2hlLnByb3RvdHlwZSA9IHtcbiAgICBnZXRDb250ZXh0cyhpZCkge1xuICAgICAgaWYgKGlkIGluIHRoaXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbaWRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICBEZWNvZGluZ0NvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGdldCBkZWNvZGVyKCkge1xuICAgICAgdmFyIGRlY29kZXIgPSBuZXcgX2FyaXRobWV0aWNfZGVjb2Rlci5Bcml0aG1ldGljRGVjb2Rlcih0aGlzLmRhdGEsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRlY29kZXJcIiwgZGVjb2Rlcik7XG4gICAgfSxcblxuICAgIGdldCBjb250ZXh0Q2FjaGUoKSB7XG4gICAgICB2YXIgY2FjaGUgPSBuZXcgQ29udGV4dENhY2hlKCk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjb250ZXh0Q2FjaGVcIiwgY2FjaGUpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBwcm9jZWR1cmUsIGRlY29kZXIpIHtcbiAgICB2YXIgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMocHJvY2VkdXJlKTtcbiAgICB2YXIgcHJldiA9IDE7XG5cbiAgICBmdW5jdGlvbiByZWFkQml0cyhsZW5ndGgpIHtcbiAgICAgIHZhciB2ID0gMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYml0ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwcmV2KTtcbiAgICAgICAgcHJldiA9IHByZXYgPCAyNTYgPyBwcmV2IDw8IDEgfCBiaXQgOiAocHJldiA8PCAxIHwgYml0KSAmIDUxMSB8IDI1NjtcbiAgICAgICAgdiA9IHYgPDwgMSB8IGJpdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHYgPj4+IDA7XG4gICAgfVxuXG4gICAgdmFyIHNpZ24gPSByZWFkQml0cygxKTtcbiAgICB2YXIgdmFsdWUgPSByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMzIpICsgNDQzNiA6IHJlYWRCaXRzKDEyKSArIDM0MCA6IHJlYWRCaXRzKDgpICsgODQgOiByZWFkQml0cyg2KSArIDIwIDogcmVhZEJpdHMoNCkgKyA0IDogcmVhZEJpdHMoMik7XG5cbiAgICBpZiAoc2lnbiA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPiAwKSB7XG4gICAgICByZXR1cm4gLXZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIGNvZGVMZW5ndGgpIHtcbiAgICB2YXIgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJJQUlEXCIpO1xuICAgIHZhciBwcmV2ID0gMTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZUxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYml0ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwcmV2KTtcbiAgICAgIHByZXYgPSBwcmV2IDw8IDEgfCBiaXQ7XG4gICAgfVxuXG4gICAgaWYgKGNvZGVMZW5ndGggPCAzMSkge1xuICAgICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXYgJiAweDdmZmZmZmZmO1xuICB9XG5cbiAgdmFyIFNlZ21lbnRUeXBlcyA9IFtcIlN5bWJvbERpY3Rpb25hcnlcIiwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlVGV4dFJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvblwiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBhdHRlcm5EaWN0aW9uYXJ5XCIsIG51bGwsIG51bGwsIG51bGwsIFwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvblwiLCBcIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb25cIiwgXCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiUGFnZUluZm9ybWF0aW9uXCIsIFwiRW5kT2ZQYWdlXCIsIFwiRW5kT2ZTdHJpcGVcIiwgXCJFbmRPZkZpbGVcIiwgXCJQcm9maWxlc1wiLCBcIlRhYmxlc1wiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIkV4dGVuc2lvblwiXTtcbiAgdmFyIENvZGluZ1RlbXBsYXRlcyA9IFtbe1xuICAgIHg6IC0xLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0yXG4gIH0sIHtcbiAgICB4OiAtMixcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDIsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC00LFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0zLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDBcbiAgfV0sIFt7XG4gICAgeDogLTEsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IDIsXG4gICAgeTogLTJcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMixcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTMsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTIsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9XSwgW3tcbiAgICB4OiAtMSxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMlxuICB9LCB7XG4gICAgeDogLTIsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMixcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAwXG4gIH1dLCBbe1xuICAgIHg6IC0zLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMixcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC00LFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0zLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0yLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDBcbiAgfV1dO1xuICB2YXIgUmVmaW5lbWVudFRlbXBsYXRlcyA9IFt7XG4gICAgY29kaW5nOiBbe1xuICAgICAgeDogMCxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogLTEsXG4gICAgICB5OiAwXG4gICAgfV0sXG4gICAgcmVmZXJlbmNlOiBbe1xuICAgICAgeDogMCxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IC0xXG4gICAgfSwge1xuICAgICAgeDogLTEsXG4gICAgICB5OiAwXG4gICAgfSwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9LCB7XG4gICAgICB4OiAxLFxuICAgICAgeTogMFxuICAgIH0sIHtcbiAgICAgIHg6IC0xLFxuICAgICAgeTogMVxuICAgIH0sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAxXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IDFcbiAgICB9XVxuICB9LCB7XG4gICAgY29kaW5nOiBbe1xuICAgICAgeDogLTEsXG4gICAgICB5OiAtMVxuICAgIH0sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAtMVxuICAgIH0sIHtcbiAgICAgIHg6IDEsXG4gICAgICB5OiAtMVxuICAgIH0sIHtcbiAgICAgIHg6IC0xLFxuICAgICAgeTogMFxuICAgIH1dLFxuICAgIHJlZmVyZW5jZTogW3tcbiAgICAgIHg6IDAsXG4gICAgICB5OiAtMVxuICAgIH0sIHtcbiAgICAgIHg6IC0xLFxuICAgICAgeTogMFxuICAgIH0sIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfSwge1xuICAgICAgeDogMSxcbiAgICAgIHk6IDBcbiAgICB9LCB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMVxuICAgIH0sIHtcbiAgICAgIHg6IDEsXG4gICAgICB5OiAxXG4gICAgfV1cbiAgfV07XG4gIHZhciBSZXVzZWRDb250ZXh0cyA9IFsweDliMjUsIDB4MDc5NSwgMHgwMGU1LCAweDAxOTVdO1xuICB2YXIgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTtcblxuICBmdW5jdGlvbiBkZWNvZGVCaXRtYXBUZW1wbGF0ZTAod2lkdGgsIGhlaWdodCwgZGVjb2RpbmdDb250ZXh0KSB7XG4gICAgdmFyIGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgICB2YXIgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKFwiR0JcIik7XG4gICAgdmFyIGNvbnRleHRMYWJlbCxcbiAgICAgICAgaSxcbiAgICAgICAgaixcbiAgICAgICAgcGl4ZWwsXG4gICAgICAgIHJvdyxcbiAgICAgICAgcm93MSxcbiAgICAgICAgcm93MixcbiAgICAgICAgYml0bWFwID0gW107XG4gICAgdmFyIE9MRF9QSVhFTF9NQVNLID0gMHg3YmY3O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICByb3cgPSBiaXRtYXBbaV0gPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG4gICAgICByb3cxID0gaSA8IDEgPyByb3cgOiBiaXRtYXBbaSAtIDFdO1xuICAgICAgcm93MiA9IGkgPCAyID8gcm93IDogYml0bWFwW2kgLSAyXTtcbiAgICAgIGNvbnRleHRMYWJlbCA9IHJvdzJbMF0gPDwgMTMgfCByb3cyWzFdIDw8IDEyIHwgcm93MlsyXSA8PCAxMSB8IHJvdzFbMF0gPDwgNyB8IHJvdzFbMV0gPDwgNiB8IHJvdzFbMl0gPDwgNSB8IHJvdzFbM10gPDwgNDtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgIGNvbnRleHRMYWJlbCA9IChjb250ZXh0TGFiZWwgJiBPTERfUElYRUxfTUFTSykgPDwgMSB8IChqICsgMyA8IHdpZHRoID8gcm93MltqICsgM10gPDwgMTEgOiAwKSB8IChqICsgNCA8IHdpZHRoID8gcm93MVtqICsgNF0gPDwgNCA6IDApIHwgcGl4ZWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpdG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZUJpdG1hcChtbXIsIHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHByZWRpY3Rpb24sIHNraXAsIGF0LCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICBpZiAobW1yKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgICByZXR1cm4gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDAgJiYgIXNraXAgJiYgIXByZWRpY3Rpb24gJiYgYXQubGVuZ3RoID09PSA0ICYmIGF0WzBdLnggPT09IDMgJiYgYXRbMF0ueSA9PT0gLTEgJiYgYXRbMV0ueCA9PT0gLTMgJiYgYXRbMV0ueSA9PT0gLTEgJiYgYXRbMl0ueCA9PT0gMiAmJiBhdFsyXS55ID09PSAtMiAmJiBhdFszXS54ID09PSAtMiAmJiBhdFszXS55ID09PSAtMikge1xuICAgICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgIH1cblxuICAgIHZhciB1c2Vza2lwID0gISFza2lwO1xuICAgIHZhciB0ZW1wbGF0ZSA9IENvZGluZ1RlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5jb25jYXQoYXQpO1xuICAgIHRlbXBsYXRlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLnkgLSBiLnkgfHwgYS54IC0gYi54O1xuICAgIH0pO1xuICAgIHZhciB0ZW1wbGF0ZUxlbmd0aCA9IHRlbXBsYXRlLmxlbmd0aDtcbiAgICB2YXIgdGVtcGxhdGVYID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgdmFyIHRlbXBsYXRlWSA9IG5ldyBJbnQ4QXJyYXkodGVtcGxhdGVMZW5ndGgpO1xuICAgIHZhciBjaGFuZ2luZ1RlbXBsYXRlRW50cmllcyA9IFtdO1xuICAgIHZhciByZXVzZU1hc2sgPSAwLFxuICAgICAgICBtaW5YID0gMCxcbiAgICAgICAgbWF4WCA9IDAsXG4gICAgICAgIG1pblkgPSAwO1xuICAgIHZhciBjLCBrO1xuXG4gICAgZm9yIChrID0gMDsgayA8IHRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgIHRlbXBsYXRlWFtrXSA9IHRlbXBsYXRlW2tdLng7XG4gICAgICB0ZW1wbGF0ZVlba10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHRlbXBsYXRlW2tdLngpO1xuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHRlbXBsYXRlW2tdLngpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHRlbXBsYXRlW2tdLnkpO1xuXG4gICAgICBpZiAoayA8IHRlbXBsYXRlTGVuZ3RoIC0gMSAmJiB0ZW1wbGF0ZVtrXS55ID09PSB0ZW1wbGF0ZVtrICsgMV0ueSAmJiB0ZW1wbGF0ZVtrXS54ID09PSB0ZW1wbGF0ZVtrICsgMV0ueCAtIDEpIHtcbiAgICAgICAgcmV1c2VNYXNrIHw9IDEgPDwgdGVtcGxhdGVMZW5ndGggLSAxIC0gaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLnB1c2goayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYW5naW5nRW50cmllc0xlbmd0aCA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLmxlbmd0aDtcbiAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgdmFyIGNoYW5naW5nVGVtcGxhdGVZID0gbmV3IEludDhBcnJheShjaGFuZ2luZ0VudHJpZXNMZW5ndGgpO1xuICAgIHZhciBjaGFuZ2luZ1RlbXBsYXRlQml0ID0gbmV3IFVpbnQxNkFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG5cbiAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbmdpbmdFbnRyaWVzTGVuZ3RoOyBjKyspIHtcbiAgICAgIGsgPSBjaGFuZ2luZ1RlbXBsYXRlRW50cmllc1tjXTtcbiAgICAgIGNoYW5naW5nVGVtcGxhdGVYW2NdID0gdGVtcGxhdGVba10ueDtcbiAgICAgIGNoYW5naW5nVGVtcGxhdGVZW2NdID0gdGVtcGxhdGVba10ueTtcbiAgICAgIGNoYW5naW5nVGVtcGxhdGVCaXRbY10gPSAxIDw8IHRlbXBsYXRlTGVuZ3RoIC0gMSAtIGs7XG4gICAgfVxuXG4gICAgdmFyIHNiYl9sZWZ0ID0gLW1pblg7XG4gICAgdmFyIHNiYl90b3AgPSAtbWluWTtcbiAgICB2YXIgc2JiX3JpZ2h0ID0gd2lkdGggLSBtYXhYO1xuICAgIHZhciBwc2V1ZG9QaXhlbENvbnRleHQgPSBSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTtcbiAgICB2YXIgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgIHZhciBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJHQlwiKTtcbiAgICB2YXIgbHRwID0gMCxcbiAgICAgICAgaixcbiAgICAgICAgaTAsXG4gICAgICAgIGowLFxuICAgICAgICBjb250ZXh0TGFiZWwgPSAwLFxuICAgICAgICBiaXQsXG4gICAgICAgIHNoaWZ0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHByZWRpY3Rpb24pIHtcbiAgICAgICAgdmFyIHNsdHAgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHBzZXVkb1BpeGVsQ29udGV4dCk7XG4gICAgICAgIGx0cCBePSBzbHRwO1xuXG4gICAgICAgIGlmIChsdHApIHtcbiAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHJvdyk7XG4gICAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICBpZiAodXNlc2tpcCAmJiBza2lwW2ldW2pdKSB7XG4gICAgICAgICAgcm93W2pdID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID49IHNiYl9sZWZ0ICYmIGogPCBzYmJfcmlnaHQgJiYgaSA+PSBzYmJfdG9wKSB7XG4gICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgJiByZXVzZU1hc2s7XG5cbiAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY2hhbmdpbmdFbnRyaWVzTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIGkwID0gaSArIGNoYW5naW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgICAgajAgPSBqICsgY2hhbmdpbmdUZW1wbGF0ZVhba107XG4gICAgICAgICAgICBiaXQgPSBiaXRtYXBbaTBdW2owXTtcblxuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICBiaXQgPSBjaGFuZ2luZ1RlbXBsYXRlQml0W2tdO1xuICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgfD0gYml0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0TGFiZWwgPSAwO1xuICAgICAgICAgIHNoaWZ0ID0gdGVtcGxhdGVMZW5ndGggLSAxO1xuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IHRlbXBsYXRlTGVuZ3RoOyBrKyssIHNoaWZ0LS0pIHtcbiAgICAgICAgICAgIGowID0gaiArIHRlbXBsYXRlWFtrXTtcblxuICAgICAgICAgICAgaWYgKGowID49IDAgJiYgajAgPCB3aWR0aCkge1xuICAgICAgICAgICAgICBpMCA9IGkgKyB0ZW1wbGF0ZVlba107XG5cbiAgICAgICAgICAgICAgaWYgKGkwID49IDApIHtcbiAgICAgICAgICAgICAgICBiaXQgPSBiaXRtYXBbaTBdW2owXTtcblxuICAgICAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQgPDwgc2hpZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuICAgICAgICByb3dbal0gPSBwaXhlbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlUmVmaW5lbWVudCh3aWR0aCwgaGVpZ2h0LCB0ZW1wbGF0ZUluZGV4LCByZWZlcmVuY2VCaXRtYXAsIG9mZnNldFgsIG9mZnNldFksIHByZWRpY3Rpb24sIGF0LCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICB2YXIgY29kaW5nVGVtcGxhdGUgPSBSZWZpbmVtZW50VGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLmNvZGluZztcblxuICAgIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7XG4gICAgICBjb2RpbmdUZW1wbGF0ZSA9IGNvZGluZ1RlbXBsYXRlLmNvbmNhdChbYXRbMF1dKTtcbiAgICB9XG5cbiAgICB2YXIgY29kaW5nVGVtcGxhdGVMZW5ndGggPSBjb2RpbmdUZW1wbGF0ZS5sZW5ndGg7XG4gICAgdmFyIGNvZGluZ1RlbXBsYXRlWCA9IG5ldyBJbnQzMkFycmF5KGNvZGluZ1RlbXBsYXRlTGVuZ3RoKTtcbiAgICB2YXIgY29kaW5nVGVtcGxhdGVZID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICAgIHZhciBrO1xuXG4gICAgZm9yIChrID0gMDsgayA8IGNvZGluZ1RlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvZGluZ1RlbXBsYXRlWFtrXSA9IGNvZGluZ1RlbXBsYXRlW2tdLng7XG4gICAgICBjb2RpbmdUZW1wbGF0ZVlba10gPSBjb2RpbmdUZW1wbGF0ZVtrXS55O1xuICAgIH1cblxuICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0ucmVmZXJlbmNlO1xuXG4gICAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDApIHtcbiAgICAgIHJlZmVyZW5jZVRlbXBsYXRlID0gcmVmZXJlbmNlVGVtcGxhdGUuY29uY2F0KFthdFsxXV0pO1xuICAgIH1cblxuICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCA9IHJlZmVyZW5jZVRlbXBsYXRlLmxlbmd0aDtcbiAgICB2YXIgcmVmZXJlbmNlVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkocmVmZXJlbmNlVGVtcGxhdGVMZW5ndGgpO1xuICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgcmVmZXJlbmNlVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgcmVmZXJlbmNlVGVtcGxhdGVYW2tdID0gcmVmZXJlbmNlVGVtcGxhdGVba10ueDtcbiAgICAgIHJlZmVyZW5jZVRlbXBsYXRlWVtrXSA9IHJlZmVyZW5jZVRlbXBsYXRlW2tdLnk7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVyZW5jZVdpZHRoID0gcmVmZXJlbmNlQml0bWFwWzBdLmxlbmd0aDtcbiAgICB2YXIgcmVmZXJlbmNlSGVpZ2h0ID0gcmVmZXJlbmNlQml0bWFwLmxlbmd0aDtcbiAgICB2YXIgcHNldWRvUGl4ZWxDb250ZXh0ID0gUmVmaW5lbWVudFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgIHZhciBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJHUlwiKTtcbiAgICB2YXIgbHRwID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICAgIHZhciBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgICBsdHAgXj0gc2x0cDtcblxuICAgICAgICBpZiAobHRwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJwcmVkaWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICB2YXIgaTAsIGowO1xuICAgICAgICB2YXIgY29udGV4dExhYmVsID0gMDtcblxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTtcbiAgICAgICAgICBqMCA9IGogKyBjb2RpbmdUZW1wbGF0ZVhba107XG5cbiAgICAgICAgICBpZiAoaTAgPCAwIHx8IGowIDwgMCB8fCBqMCA+PSB3aWR0aCkge1xuICAgICAgICAgICAgY29udGV4dExhYmVsIDw8PSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBjb250ZXh0TGFiZWwgPDwgMSB8IGJpdG1hcFtpMF1bajBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgaTAgPSBpICsgcmVmZXJlbmNlVGVtcGxhdGVZW2tdIC0gb2Zmc2V0WTtcbiAgICAgICAgICBqMCA9IGogKyByZWZlcmVuY2VUZW1wbGF0ZVhba10gLSBvZmZzZXRYO1xuXG4gICAgICAgICAgaWYgKGkwIDwgMCB8fCBpMCA+PSByZWZlcmVuY2VIZWlnaHQgfHwgajAgPCAwIHx8IGowID49IHJlZmVyZW5jZVdpZHRoKSB7XG4gICAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgcmVmZXJlbmNlQml0bWFwW2kwXVtqMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuICAgICAgICByb3dbal0gPSBwaXhlbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShodWZmbWFuLCByZWZpbmVtZW50LCBzeW1ib2xzLCBudW1iZXJPZk5ld1N5bWJvbHMsIG51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLCBodWZmbWFuVGFibGVzLCB0ZW1wbGF0ZUluZGV4LCBhdCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpIHtcbiAgICBpZiAoaHVmZm1hbiAmJiByZWZpbmVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInN5bWJvbCByZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHZhciBuZXdTeW1ib2xzID0gW107XG4gICAgdmFyIGN1cnJlbnRIZWlnaHQgPSAwO1xuICAgIHZhciBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzKTtcbiAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgIHZhciBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICAgIGxldCB0YWJsZUIxLCBzeW1ib2xXaWR0aHM7XG5cbiAgICBpZiAoaHVmZm1hbikge1xuICAgICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgICBzeW1ib2xXaWR0aHMgPSBbXTtcbiAgICAgIHN5bWJvbENvZGVMZW5ndGggPSBNYXRoLm1heChzeW1ib2xDb2RlTGVuZ3RoLCAxKTtcbiAgICB9XG5cbiAgICB3aGlsZSAobmV3U3ltYm9scy5sZW5ndGggPCBudW1iZXJPZk5ld1N5bWJvbHMpIHtcbiAgICAgIHZhciBkZWx0YUhlaWdodCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRGVsdGFIZWlnaHQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQURIXCIsIGRlY29kZXIpO1xuICAgICAgY3VycmVudEhlaWdodCArPSBkZWx0YUhlaWdodDtcbiAgICAgIGxldCBjdXJyZW50V2lkdGggPSAwLFxuICAgICAgICAgIHRvdGFsV2lkdGggPSAwO1xuICAgICAgY29uc3QgZmlyc3RTeW1ib2wgPSBodWZmbWFuID8gc3ltYm9sV2lkdGhzLmxlbmd0aCA6IDA7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWx0YVdpZHRoID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVdpZHRoLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEV1wiLCBkZWNvZGVyKTtcblxuICAgICAgICBpZiAoZGVsdGFXaWR0aCA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFdpZHRoICs9IGRlbHRhV2lkdGg7XG4gICAgICAgIHRvdGFsV2lkdGggKz0gY3VycmVudFdpZHRoO1xuICAgICAgICB2YXIgYml0bWFwO1xuXG4gICAgICAgIGlmIChyZWZpbmVtZW50KSB7XG4gICAgICAgICAgdmFyIG51bWJlck9mSW5zdGFuY2VzID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFBSVwiLCBkZWNvZGVyKTtcblxuICAgICAgICAgIGlmIChudW1iZXJPZkluc3RhbmNlcyA+IDEpIHtcbiAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCAwLCBudW1iZXJPZkluc3RhbmNlcywgMSwgc3ltYm9scy5jb25jYXQobmV3U3ltYm9scyksIHN5bWJvbENvZGVMZW5ndGgsIDAsIDAsIDEsIDAsIGh1ZmZtYW5UYWJsZXMsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgMCwgaHVmZm1hbklucHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN5bWJvbElkID0gZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIHN5bWJvbENvZGVMZW5ndGgpO1xuICAgICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRYXCIsIGRlY29kZXIpO1xuICAgICAgICAgICAgdmFyIHJkeSA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRZXCIsIGRlY29kZXIpO1xuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbElkIDwgc3ltYm9scy5sZW5ndGggPyBzeW1ib2xzW3N5bWJvbElkXSA6IG5ld1N5bWJvbHNbc3ltYm9sSWQgLSBzeW1ib2xzLmxlbmd0aF07XG4gICAgICAgICAgICBiaXRtYXAgPSBkZWNvZGVSZWZpbmVtZW50KGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHN5bWJvbCwgcmR4LCByZHksIGZhbHNlLCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3U3ltYm9scy5wdXNoKGJpdG1hcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVmZm1hbikge1xuICAgICAgICAgIHN5bWJvbFdpZHRocy5wdXNoKGN1cnJlbnRXaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIHRlbXBsYXRlSW5kZXgsIGZhbHNlLCBudWxsLCBhdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHVmZm1hbiAmJiAhcmVmaW5lbWVudCkge1xuICAgICAgICBjb25zdCBiaXRtYXBTaXplID0gaHVmZm1hblRhYmxlcy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGh1ZmZtYW5JbnB1dCk7XG4gICAgICAgIGh1ZmZtYW5JbnB1dC5ieXRlQWxpZ24oKTtcbiAgICAgICAgbGV0IGNvbGxlY3RpdmVCaXRtYXA7XG5cbiAgICAgICAgaWYgKGJpdG1hcFNpemUgPT09IDApIHtcbiAgICAgICAgICBjb2xsZWN0aXZlQml0bWFwID0gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChodWZmbWFuSW5wdXQsIHRvdGFsV2lkdGgsIGN1cnJlbnRIZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRW5kID0gaHVmZm1hbklucHV0LmVuZDtcbiAgICAgICAgICBjb25zdCBiaXRtYXBFbmQgPSBodWZmbWFuSW5wdXQucG9zaXRpb24gKyBiaXRtYXBTaXplO1xuICAgICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBiaXRtYXBFbmQ7XG4gICAgICAgICAgY29sbGVjdGl2ZUJpdG1hcCA9IGRlY29kZU1NUkJpdG1hcChodWZmbWFuSW5wdXQsIHRvdGFsV2lkdGgsIGN1cnJlbnRIZWlnaHQsIGZhbHNlKTtcbiAgICAgICAgICBodWZmbWFuSW5wdXQuZW5kID0gb3JpZ2luYWxFbmQ7XG4gICAgICAgICAgaHVmZm1hbklucHV0LnBvc2l0aW9uID0gYml0bWFwRW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtYmVyT2ZTeW1ib2xzRGVjb2RlZCA9IHN5bWJvbFdpZHRocy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGZpcnN0U3ltYm9sID09PSBudW1iZXJPZlN5bWJvbHNEZWNvZGVkIC0gMSkge1xuICAgICAgICAgIG5ld1N5bWJvbHMucHVzaChjb2xsZWN0aXZlQml0bWFwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaSxcbiAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgeE1pbiA9IDAsXG4gICAgICAgICAgICAgIHhNYXgsXG4gICAgICAgICAgICAgIGJpdG1hcFdpZHRoLFxuICAgICAgICAgICAgICBzeW1ib2xCaXRtYXA7XG5cbiAgICAgICAgICBmb3IgKGkgPSBmaXJzdFN5bWJvbDsgaSA8IG51bWJlck9mU3ltYm9sc0RlY29kZWQ7IGkrKykge1xuICAgICAgICAgICAgYml0bWFwV2lkdGggPSBzeW1ib2xXaWR0aHNbaV07XG4gICAgICAgICAgICB4TWF4ID0geE1pbiArIGJpdG1hcFdpZHRoO1xuICAgICAgICAgICAgc3ltYm9sQml0bWFwID0gW107XG5cbiAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBjdXJyZW50SGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgICAgc3ltYm9sQml0bWFwLnB1c2goY29sbGVjdGl2ZUJpdG1hcFt5XS5zdWJhcnJheSh4TWluLCB4TWF4KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5ld1N5bWJvbHMucHVzaChzeW1ib2xCaXRtYXApO1xuICAgICAgICAgICAgeE1pbiA9IHhNYXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4cG9ydGVkU3ltYm9scyA9IFtdO1xuICAgIHZhciBmbGFncyA9IFtdLFxuICAgICAgICBjdXJyZW50RmxhZyA9IGZhbHNlO1xuICAgIHZhciB0b3RhbFN5bWJvbHNMZW5ndGggPSBzeW1ib2xzLmxlbmd0aCArIG51bWJlck9mTmV3U3ltYm9scztcblxuICAgIHdoaWxlIChmbGFncy5sZW5ndGggPCB0b3RhbFN5bWJvbHNMZW5ndGgpIHtcbiAgICAgIHZhciBydW5MZW5ndGggPSBodWZmbWFuID8gdGFibGVCMS5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRVhcIiwgZGVjb2Rlcik7XG5cbiAgICAgIHdoaWxlIChydW5MZW5ndGgtLSkge1xuICAgICAgICBmbGFncy5wdXNoKGN1cnJlbnRGbGFnKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudEZsYWcgPSAhY3VycmVudEZsYWc7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3ltYm9scy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpZiAoZmxhZ3NbaV0pIHtcbiAgICAgICAgZXhwb3J0ZWRTeW1ib2xzLnB1c2goc3ltYm9sc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1iZXJPZk5ld1N5bWJvbHM7IGkrKywgaisrKSB7XG4gICAgICBpZiAoZmxhZ3NbaV0pIHtcbiAgICAgICAgZXhwb3J0ZWRTeW1ib2xzLnB1c2gobmV3U3ltYm9sc1tqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cG9ydGVkU3ltYm9scztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgd2lkdGgsIGhlaWdodCwgZGVmYXVsdFBpeGVsVmFsdWUsIG51bWJlck9mU3ltYm9sSW5zdGFuY2VzLCBzdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgdHJhbnNwb3NlZCwgZHNPZmZzZXQsIHJlZmVyZW5jZUNvcm5lciwgY29tYmluYXRpb25PcGVyYXRvciwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBsb2dTdHJpcFNpemUsIGh1ZmZtYW5JbnB1dCkge1xuICAgIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICB2YXIgYml0bWFwID0gW107XG4gICAgdmFyIGksIHJvdztcblxuICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuXG4gICAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgcm93W2pdID0gZGVmYXVsdFBpeGVsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICB9XG5cbiAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgIHZhciBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICAgIHZhciBzdHJpcFQgPSBodWZmbWFuID8gLWh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiAtZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEVFwiLCBkZWNvZGVyKTtcbiAgICB2YXIgZmlyc3RTID0gMDtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMpIHtcbiAgICAgIHZhciBkZWx0YVQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhVC5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFRcIiwgZGVjb2Rlcik7XG4gICAgICBzdHJpcFQgKz0gZGVsdGFUO1xuICAgICAgdmFyIGRlbHRhRmlyc3RTID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVGaXJzdFMuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQUZTXCIsIGRlY29kZXIpO1xuICAgICAgZmlyc3RTICs9IGRlbHRhRmlyc3RTO1xuICAgICAgdmFyIGN1cnJlbnRTID0gZmlyc3RTO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGxldCBjdXJyZW50VCA9IDA7XG5cbiAgICAgICAgaWYgKHN0cmlwU2l6ZSA+IDEpIHtcbiAgICAgICAgICBjdXJyZW50VCA9IGh1ZmZtYW4gPyBodWZmbWFuSW5wdXQucmVhZEJpdHMobG9nU3RyaXBTaXplKSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBSVRcIiwgZGVjb2Rlcik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdCA9IHN0cmlwU2l6ZSAqIHN0cmlwVCArIGN1cnJlbnRUO1xuICAgICAgICB2YXIgc3ltYm9sSWQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy5zeW1ib2xJRFRhYmxlLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIHN5bWJvbENvZGVMZW5ndGgpO1xuICAgICAgICB2YXIgYXBwbHlSZWZpbmVtZW50ID0gcmVmaW5lbWVudCAmJiAoaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0KCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJJXCIsIGRlY29kZXIpKTtcbiAgICAgICAgdmFyIHN5bWJvbEJpdG1hcCA9IGlucHV0U3ltYm9sc1tzeW1ib2xJZF07XG4gICAgICAgIHZhciBzeW1ib2xXaWR0aCA9IHN5bWJvbEJpdG1hcFswXS5sZW5ndGg7XG4gICAgICAgIHZhciBzeW1ib2xIZWlnaHQgPSBzeW1ib2xCaXRtYXAubGVuZ3RoO1xuXG4gICAgICAgIGlmIChhcHBseVJlZmluZW1lbnQpIHtcbiAgICAgICAgICB2YXIgcmR3ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFdcIiwgZGVjb2Rlcik7XG4gICAgICAgICAgdmFyIHJkaCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRIXCIsIGRlY29kZXIpO1xuICAgICAgICAgIHZhciByZHggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWFwiLCBkZWNvZGVyKTtcbiAgICAgICAgICB2YXIgcmR5ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFlcIiwgZGVjb2Rlcik7XG4gICAgICAgICAgc3ltYm9sV2lkdGggKz0gcmR3O1xuICAgICAgICAgIHN5bWJvbEhlaWdodCArPSByZGg7XG4gICAgICAgICAgc3ltYm9sQml0bWFwID0gZGVjb2RlUmVmaW5lbWVudChzeW1ib2xXaWR0aCwgc3ltYm9sSGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sQml0bWFwLCAocmR3ID4+IDEpICsgcmR4LCAocmRoID4+IDEpICsgcmR5LCBmYWxzZSwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9mZnNldFQgPSB0IC0gKHJlZmVyZW5jZUNvcm5lciAmIDEgPyAwIDogc3ltYm9sSGVpZ2h0IC0gMSk7XG4gICAgICAgIHZhciBvZmZzZXRTID0gY3VycmVudFMgLSAocmVmZXJlbmNlQ29ybmVyICYgMiA/IHN5bWJvbFdpZHRoIC0gMSA6IDApO1xuICAgICAgICB2YXIgczIsIHQyLCBzeW1ib2xSb3c7XG5cbiAgICAgICAgaWYgKHRyYW5zcG9zZWQpIHtcbiAgICAgICAgICBmb3IgKHMyID0gMDsgczIgPCBzeW1ib2xIZWlnaHQ7IHMyKyspIHtcbiAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRTICsgczJdO1xuXG4gICAgICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3MyXTtcbiAgICAgICAgICAgIHZhciBtYXhXaWR0aCA9IE1hdGgubWluKHdpZHRoIC0gb2Zmc2V0VCwgc3ltYm9sV2lkdGgpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7XG4gICAgICAgICAgICAgICAgICByb3dbb2Zmc2V0VCArIHQyXSB8PSBzeW1ib2xSb3dbdDJdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgICAgcm93W29mZnNldFQgKyB0Ml0gXj0gc3ltYm9sUm93W3QyXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2NvbWJpbmF0aW9uT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50UyArPSBzeW1ib2xIZWlnaHQgLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IHN5bWJvbEhlaWdodDsgdDIrKykge1xuICAgICAgICAgICAgcm93ID0gYml0bWFwW29mZnNldFQgKyB0Ml07XG5cbiAgICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzeW1ib2xSb3cgPSBzeW1ib2xCaXRtYXBbdDJdO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgICByb3dbb2Zmc2V0UyArIHMyXSB8PSBzeW1ib2xSb3dbczJdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBmb3IgKHMyID0gMDsgczIgPCBzeW1ib2xXaWR0aDsgczIrKykge1xuICAgICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gXj0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2NvbWJpbmF0aW9uT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50UyArPSBzeW1ib2xXaWR0aCAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgICAgIHZhciBkZWx0YVMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhUy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFNcIiwgZGVjb2Rlcik7XG5cbiAgICAgICAgaWYgKGRlbHRhUyA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFMgKz0gZGVsdGFTICsgZHNPZmZzZXQ7XG4gICAgICB9IHdoaWxlICh0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkge1xuICAgIGNvbnN0IGF0ID0gW107XG5cbiAgICBpZiAoIW1tcikge1xuICAgICAgYXQucHVzaCh7XG4gICAgICAgIHg6IC1wYXR0ZXJuV2lkdGgsXG4gICAgICAgIHk6IDBcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGVtcGxhdGUgPT09IDApIHtcbiAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgeDogLTMsXG4gICAgICAgICAgeTogLTFcbiAgICAgICAgfSk7XG4gICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgIHg6IDIsXG4gICAgICAgICAgeTogLTJcbiAgICAgICAgfSk7XG4gICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgIHg6IC0yLFxuICAgICAgICAgIHk6IC0yXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbGxlY3RpdmVXaWR0aCA9IChtYXhQYXR0ZXJuSW5kZXggKyAxKSAqIHBhdHRlcm5XaWR0aDtcbiAgICBjb25zdCBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlQml0bWFwKG1tciwgY29sbGVjdGl2ZVdpZHRoLCBwYXR0ZXJuSGVpZ2h0LCB0ZW1wbGF0ZSwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBtYXhQYXR0ZXJuSW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcGF0dGVybkJpdG1hcCA9IFtdO1xuICAgICAgY29uc3QgeE1pbiA9IHBhdHRlcm5XaWR0aCAqIGk7XG4gICAgICBjb25zdCB4TWF4ID0geE1pbiArIHBhdHRlcm5XaWR0aDtcblxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBwYXR0ZXJuSGVpZ2h0OyB5KyspIHtcbiAgICAgICAgcGF0dGVybkJpdG1hcC5wdXNoKGNvbGxlY3RpdmVCaXRtYXBbeV0uc3ViYXJyYXkoeE1pbiwgeE1heCkpO1xuICAgICAgfVxuXG4gICAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZUhhbGZ0b25lUmVnaW9uKG1tciwgcGF0dGVybnMsIHRlbXBsYXRlLCByZWdpb25XaWR0aCwgcmVnaW9uSGVpZ2h0LCBkZWZhdWx0UGl4ZWxWYWx1ZSwgZW5hYmxlU2tpcCwgY29tYmluYXRpb25PcGVyYXRvciwgZ3JpZFdpZHRoLCBncmlkSGVpZ2h0LCBncmlkT2Zmc2V0WCwgZ3JpZE9mZnNldFksIGdyaWRWZWN0b3JYLCBncmlkVmVjdG9yWSwgZGVjb2RpbmdDb250ZXh0KSB7XG4gICAgY29uc3Qgc2tpcCA9IG51bGw7XG5cbiAgICBpZiAoZW5hYmxlU2tpcCkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJza2lwIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGNvbWJpbmF0aW9uT3BlcmF0b3IgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIgKyBjb21iaW5hdGlvbk9wZXJhdG9yICsgXCIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25cIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaW9uQml0bWFwID0gW107XG4gICAgbGV0IGksIGosIHJvdztcblxuICAgIGZvciAoaSA9IDA7IGkgPCByZWdpb25IZWlnaHQ7IGkrKykge1xuICAgICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkocmVnaW9uV2lkdGgpO1xuXG4gICAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IHJlZ2lvbldpZHRoOyBqKyspIHtcbiAgICAgICAgICByb3dbal0gPSBkZWZhdWx0UGl4ZWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWdpb25CaXRtYXAucHVzaChyb3cpO1xuICAgIH1cblxuICAgIGNvbnN0IG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgY29uc3QgcGF0dGVybjAgPSBwYXR0ZXJuc1swXTtcbiAgICBjb25zdCBwYXR0ZXJuV2lkdGggPSBwYXR0ZXJuMFswXS5sZW5ndGgsXG4gICAgICAgICAgcGF0dGVybkhlaWdodCA9IHBhdHRlcm4wLmxlbmd0aDtcbiAgICBjb25zdCBiaXRzUGVyVmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMubG9nMikobnVtYmVyT2ZQYXR0ZXJucyk7XG4gICAgY29uc3QgYXQgPSBbXTtcblxuICAgIGlmICghbW1yKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogdGVtcGxhdGUgPD0gMSA/IDMgOiAyLFxuICAgICAgICB5OiAtMVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZSA9PT0gMCkge1xuICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICB4OiAtMyxcbiAgICAgICAgICB5OiAtMVxuICAgICAgICB9KTtcbiAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgeDogMixcbiAgICAgICAgICB5OiAtMlxuICAgICAgICB9KTtcbiAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgeDogLTIsXG4gICAgICAgICAgeTogLTJcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ3JheVNjYWxlQml0UGxhbmVzID0gW107XG4gICAgbGV0IG1tcklucHV0LCBiaXRtYXA7XG5cbiAgICBpZiAobW1yKSB7XG4gICAgICBtbXJJbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gYml0c1BlclZhbHVlIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChtbXIpIHtcbiAgICAgICAgYml0bWFwID0gZGVjb2RlTU1SQml0bWFwKG1tcklucHV0LCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGdyYXlTY2FsZUJpdFBsYW5lc1tpXSA9IGJpdG1hcDtcbiAgICB9XG5cbiAgICBsZXQgbWcsIG5nLCBiaXQsIHBhdHRlcm5JbmRleCwgcGF0dGVybkJpdG1hcCwgeCwgeSwgcGF0dGVyblJvdywgcmVnaW9uUm93O1xuXG4gICAgZm9yIChtZyA9IDA7IG1nIDwgZ3JpZEhlaWdodDsgbWcrKykge1xuICAgICAgZm9yIChuZyA9IDA7IG5nIDwgZ3JpZFdpZHRoOyBuZysrKSB7XG4gICAgICAgIGJpdCA9IDA7XG4gICAgICAgIHBhdHRlcm5JbmRleCA9IDA7XG5cbiAgICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICBiaXQgPSBncmF5U2NhbGVCaXRQbGFuZXNbal1bbWddW25nXSBeIGJpdDtcbiAgICAgICAgICBwYXR0ZXJuSW5kZXggfD0gYml0IDw8IGo7XG4gICAgICAgIH1cblxuICAgICAgICBwYXR0ZXJuQml0bWFwID0gcGF0dGVybnNbcGF0dGVybkluZGV4XTtcbiAgICAgICAgeCA9IGdyaWRPZmZzZXRYICsgbWcgKiBncmlkVmVjdG9yWSArIG5nICogZ3JpZFZlY3RvclggPj4gODtcbiAgICAgICAgeSA9IGdyaWRPZmZzZXRZICsgbWcgKiBncmlkVmVjdG9yWCAtIG5nICogZ3JpZFZlY3RvclkgPj4gODtcblxuICAgICAgICBpZiAoeCA+PSAwICYmIHggKyBwYXR0ZXJuV2lkdGggPD0gcmVnaW9uV2lkdGggJiYgeSA+PSAwICYmIHkgKyBwYXR0ZXJuSGVpZ2h0IDw9IHJlZ2lvbkhlaWdodCkge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIHJlZ2lvblJvdyA9IHJlZ2lvbkJpdG1hcFt5ICsgaV07XG4gICAgICAgICAgICBwYXR0ZXJuUm93ID0gcGF0dGVybkJpdG1hcFtpXTtcblxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgIHJlZ2lvblJvd1t4ICsgal0gfD0gcGF0dGVyblJvd1tqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHJlZ2lvblgsIHJlZ2lvblk7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICByZWdpb25ZID0geSArIGk7XG5cbiAgICAgICAgICAgIGlmIChyZWdpb25ZIDwgMCB8fCByZWdpb25ZID49IHJlZ2lvbkhlaWdodCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVnaW9uUm93ID0gcmVnaW9uQml0bWFwW3JlZ2lvblldO1xuICAgICAgICAgICAgcGF0dGVyblJvdyA9IHBhdHRlcm5CaXRtYXBbaV07XG5cbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwYXR0ZXJuV2lkdGg7IGorKykge1xuICAgICAgICAgICAgICByZWdpb25YID0geCArIGo7XG5cbiAgICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZWdpb25Sb3dbcmVnaW9uWF0gfD0gcGF0dGVyblJvd1tqXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWdpb25CaXRtYXA7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkU2VnbWVudEhlYWRlcihkYXRhLCBzdGFydCkge1xuICAgIHZhciBzZWdtZW50SGVhZGVyID0ge307XG4gICAgc2VnbWVudEhlYWRlci5udW1iZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQpO1xuICAgIHZhciBmbGFncyA9IGRhdGFbc3RhcnQgKyA0XTtcbiAgICB2YXIgc2VnbWVudFR5cGUgPSBmbGFncyAmIDB4M2Y7XG5cbiAgICBpZiAoIVNlZ21lbnRUeXBlc1tzZWdtZW50VHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBzZWdtZW50IHR5cGU6IFwiICsgc2VnbWVudFR5cGUpO1xuICAgIH1cblxuICAgIHNlZ21lbnRIZWFkZXIudHlwZSA9IHNlZ21lbnRUeXBlO1xuICAgIHNlZ21lbnRIZWFkZXIudHlwZU5hbWUgPSBTZWdtZW50VHlwZXNbc2VnbWVudFR5cGVdO1xuICAgIHNlZ21lbnRIZWFkZXIuZGVmZXJyZWROb25SZXRhaW4gPSAhIShmbGFncyAmIDB4ODApO1xuICAgIHZhciBwYWdlQXNzb2NpYXRpb25GaWVsZFNpemUgPSAhIShmbGFncyAmIDB4NDApO1xuICAgIHZhciByZWZlcnJlZEZsYWdzID0gZGF0YVtzdGFydCArIDVdO1xuICAgIHZhciByZWZlcnJlZFRvQ291bnQgPSByZWZlcnJlZEZsYWdzID4+IDUgJiA3O1xuICAgIHZhciByZXRhaW5CaXRzID0gW3JlZmVycmVkRmxhZ3MgJiAzMV07XG4gICAgdmFyIHBvc2l0aW9uID0gc3RhcnQgKyA2O1xuXG4gICAgaWYgKHJlZmVycmVkRmxhZ3MgPT09IDcpIHtcbiAgICAgIHJlZmVycmVkVG9Db3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiAtIDEpICYgMHgxZmZmZmZmZjtcbiAgICAgIHBvc2l0aW9uICs9IDM7XG4gICAgICB2YXIgYnl0ZXMgPSByZWZlcnJlZFRvQ291bnQgKyA3ID4+IDM7XG4gICAgICByZXRhaW5CaXRzWzBdID0gZGF0YVtwb3NpdGlvbisrXTtcblxuICAgICAgd2hpbGUgKC0tYnl0ZXMgPiAwKSB7XG4gICAgICAgIHJldGFpbkJpdHMucHVzaChkYXRhW3Bvc2l0aW9uKytdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZmVycmVkRmxhZ3MgPT09IDUgfHwgcmVmZXJyZWRGbGFncyA9PT0gNikge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzXCIpO1xuICAgIH1cblxuICAgIHNlZ21lbnRIZWFkZXIucmV0YWluQml0cyA9IHJldGFpbkJpdHM7XG4gICAgbGV0IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDQ7XG5cbiAgICBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gMjU2KSB7XG4gICAgICByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gNjU1MzYpIHtcbiAgICAgIHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDI7XG4gICAgfVxuXG4gICAgdmFyIHJlZmVycmVkVG8gPSBbXTtcbiAgICB2YXIgaSwgaWk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcmVmZXJyZWRUb0NvdW50OyBpKyspIHtcbiAgICAgIGxldCBudW1iZXI7XG5cbiAgICAgIGlmIChyZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPT09IDEpIHtcbiAgICAgICAgbnVtYmVyID0gZGF0YVtwb3NpdGlvbl07XG4gICAgICB9IGVsc2UgaWYgKHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMikge1xuICAgICAgICBudW1iZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtYmVyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmVmZXJyZWRUby5wdXNoKG51bWJlcik7XG4gICAgICBwb3NpdGlvbiArPSByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemU7XG4gICAgfVxuXG4gICAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbztcblxuICAgIGlmICghcGFnZUFzc29jaWF0aW9uRmllbGRTaXplKSB7XG4gICAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgfVxuXG4gICAgc2VnbWVudEhlYWRlci5sZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uICs9IDQ7XG5cbiAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICAgIGlmIChzZWdtZW50VHlwZSA9PT0gMzgpIHtcbiAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25JbmZvID0gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHZhciBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbiArIFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoXTtcbiAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25NbXIgPSAhIShnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICAgIHZhciBzZWFyY2hQYXR0ZXJuTGVuZ3RoID0gNjtcbiAgICAgICAgdmFyIHNlYXJjaFBhdHRlcm4gPSBuZXcgVWludDhBcnJheShzZWFyY2hQYXR0ZXJuTGVuZ3RoKTtcblxuICAgICAgICBpZiAoIWdlbmVyaWNSZWdpb25NbXIpIHtcbiAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzBdID0gMHhmZjtcbiAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzFdID0gMHhhYztcbiAgICAgICAgfVxuXG4gICAgICAgIHNlYXJjaFBhdHRlcm5bMl0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4+IDI0ICYgMHhmZjtcbiAgICAgICAgc2VhcmNoUGF0dGVyblszXSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiAxNiAmIDB4ZmY7XG4gICAgICAgIHNlYXJjaFBhdHRlcm5bNF0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4gOCAmIDB4ZmY7XG4gICAgICAgIHNlYXJjaFBhdHRlcm5bNV0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgJiAweGZmO1xuXG4gICAgICAgIGZvciAoaSA9IHBvc2l0aW9uLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHZhciBqID0gMDtcblxuICAgICAgICAgIHdoaWxlIChqIDwgc2VhcmNoUGF0dGVybkxlbmd0aCAmJiBzZWFyY2hQYXR0ZXJuW2pdID09PSBkYXRhW2kgKyBqXSkge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChqID09PSBzZWFyY2hQYXR0ZXJuTGVuZ3RoKSB7XG4gICAgICAgICAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9IGkgKyBzZWFyY2hQYXR0ZXJuTGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlZ21lbnRIZWFkZXIubGVuZ3RoID09PSAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWdtZW50SGVhZGVyLmhlYWRlckVuZCA9IHBvc2l0aW9uO1xuICAgIHJldHVybiBzZWdtZW50SGVhZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHZhciBzZWdtZW50cyA9IFtdO1xuICAgIHZhciBwb3NpdGlvbiA9IHN0YXJ0O1xuXG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7XG4gICAgICB2YXIgc2VnbWVudEhlYWRlciA9IHJlYWRTZWdtZW50SGVhZGVyKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uID0gc2VnbWVudEhlYWRlci5oZWFkZXJFbmQ7XG4gICAgICB2YXIgc2VnbWVudCA9IHtcbiAgICAgICAgaGVhZGVyOiBzZWdtZW50SGVhZGVyLFxuICAgICAgICBkYXRhXG4gICAgICB9O1xuXG4gICAgICBpZiAoIWhlYWRlci5yYW5kb21BY2Nlc3MpIHtcbiAgICAgICAgc2VnbWVudC5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgICBwb3NpdGlvbiArPSBzZWdtZW50SGVhZGVyLmxlbmd0aDtcbiAgICAgICAgc2VnbWVudC5lbmQgPSBwb3NpdGlvbjtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcblxuICAgICAgaWYgKHNlZ21lbnRIZWFkZXIudHlwZSA9PT0gNTEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhlYWRlci5yYW5kb21BY2Nlc3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgc2VnbWVudHNbaV0uc3RhcnQgPSBwb3NpdGlvbjtcbiAgICAgICAgcG9zaXRpb24gKz0gc2VnbWVudHNbaV0uaGVhZGVyLmxlbmd0aDtcbiAgICAgICAgc2VnbWVudHNbaV0uZW5kID0gcG9zaXRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBzdGFydCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0KSxcbiAgICAgIGhlaWdodDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgNCksXG4gICAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA4KSxcbiAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCArIDEyKSxcbiAgICAgIGNvbWJpbmF0aW9uT3BlcmF0b3I6IGRhdGFbc3RhcnQgKyAxNl0gJiA3XG4gICAgfTtcbiAgfVxuXG4gIHZhciBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aCA9IDE3O1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50KHNlZ21lbnQsIHZpc2l0b3IpIHtcbiAgICB2YXIgaGVhZGVyID0gc2VnbWVudC5oZWFkZXI7XG4gICAgdmFyIGRhdGEgPSBzZWdtZW50LmRhdGEsXG4gICAgICAgIHBvc2l0aW9uID0gc2VnbWVudC5zdGFydCxcbiAgICAgICAgZW5kID0gc2VnbWVudC5lbmQ7XG4gICAgdmFyIGFyZ3MsIGF0LCBpLCBhdExlbmd0aDtcblxuICAgIHN3aXRjaCAoaGVhZGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdmFyIGRpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgdmFyIGRpY3Rpb25hcnlGbGFncyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIGRpY3Rpb25hcnkuaHVmZm1hbiA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDEpO1xuICAgICAgICBkaWN0aW9uYXJ5LnJlZmluZW1lbnQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAyKTtcbiAgICAgICAgZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiAyICYgMztcbiAgICAgICAgZGljdGlvbmFyeS5odWZmbWFuRFdTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA0ICYgMztcbiAgICAgICAgZGljdGlvbmFyeS5iaXRtYXBTaXplU2VsZWN0b3IgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gNiAmIDE7XG4gICAgICAgIGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA3ICYgMTtcbiAgICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0VXNlZCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDI1Nik7XG4gICAgICAgIGRpY3Rpb25hcnkuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkID0gISEoZGljdGlvbmFyeUZsYWdzICYgNTEyKTtcbiAgICAgICAgZGljdGlvbmFyeS50ZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMCAmIDM7XG4gICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlID0gZGljdGlvbmFyeUZsYWdzID4+IDEyICYgMTtcbiAgICAgICAgcG9zaXRpb24gKz0gMjtcblxuICAgICAgICBpZiAoIWRpY3Rpb25hcnkuaHVmZm1hbikge1xuICAgICAgICAgIGF0TGVuZ3RoID0gZGljdGlvbmFyeS50ZW1wbGF0ZSA9PT0gMCA/IDQgOiAxO1xuICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWN0aW9uYXJ5LmF0ID0gYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBkaWN0aW9uYXJ5Lm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBhcmdzID0gW2RpY3Rpb25hcnksIGhlYWRlci5udW1iZXIsIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgdmFyIHRleHRSZWdpb24gPSB7fTtcbiAgICAgICAgdGV4dFJlZ2lvbi5pbmZvID0gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgICB2YXIgdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIHRleHRSZWdpb24uaHVmZm1hbiA9ICEhKHRleHRSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgdGV4dFJlZ2lvbi5yZWZpbmVtZW50ID0gISEodGV4dFJlZ2lvblNlZ21lbnRGbGFncyAmIDIpO1xuICAgICAgICB0ZXh0UmVnaW9uLmxvZ1N0cmlwU2l6ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMiAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uc3RyaXBTaXplID0gMSA8PCB0ZXh0UmVnaW9uLmxvZ1N0cmlwU2l6ZTtcbiAgICAgICAgdGV4dFJlZ2lvbi5yZWZlcmVuY2VDb3JuZXIgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDQgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLnRyYW5zcG9zZWQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgNjQpO1xuICAgICAgICB0ZXh0UmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDcgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA5ICYgMTtcbiAgICAgICAgdGV4dFJlZ2lvbi5kc09mZnNldCA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPDwgMTcgPj4gMjc7XG4gICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudFRlbXBsYXRlID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiAxNSAmIDE7XG5cbiAgICAgICAgaWYgKHRleHRSZWdpb24uaHVmZm1hbikge1xuICAgICAgICAgIHZhciB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hbkZTID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFMgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hbkRUID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA0ICYgMztcbiAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFcgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDYgJiAzO1xuICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnRESCA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gOCAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERYID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiAxMCAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERZID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiAxMiAmIDM7XG4gICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudFNpemVTZWxlY3RvciA9ICEhKHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAweDQwMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCAmJiAhdGV4dFJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUpIHtcbiAgICAgICAgICBhdCA9IFtdO1xuXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRBdCA9IGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dFJlZ2lvbi5udW1iZXJPZlN5bWJvbEluc3RhbmNlcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICAgIGFyZ3MgPSBbdGV4dFJlZ2lvbiwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxNjpcbiAgICAgICAgY29uc3QgcGF0dGVybkRpY3Rpb25hcnkgPSB7fTtcbiAgICAgICAgY29uc3QgcGF0dGVybkRpY3Rpb25hcnlGbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5Lm1tciA9ICEhKHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgJiAxKTtcbiAgICAgICAgcGF0dGVybkRpY3Rpb25hcnkudGVtcGxhdGUgPSBwYXR0ZXJuRGljdGlvbmFyeUZsYWdzID4+IDEgJiAzO1xuICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS5wYXR0ZXJuV2lkdGggPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS5wYXR0ZXJuSGVpZ2h0ID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgcGF0dGVybkRpY3Rpb25hcnkubWF4UGF0dGVybkluZGV4ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgYXJncyA9IFtwYXR0ZXJuRGljdGlvbmFyeSwgaGVhZGVyLm51bWJlciwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDIyOlxuICAgICAgY2FzZSAyMzpcbiAgICAgICAgY29uc3QgaGFsZnRvbmVSZWdpb24gPSB7fTtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgY29uc3QgaGFsZnRvbmVSZWdpb25GbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24udGVtcGxhdGUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDEgJiAzO1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5lbmFibGVTa2lwID0gISEoaGFsZnRvbmVSZWdpb25GbGFncyAmIDgpO1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNztcbiAgICAgICAgaGFsZnRvbmVSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDcgJiAxO1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkV2lkdGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkSGVpZ2h0ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhmZmZmZmZmZjtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFkgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhmZmZmZmZmZjtcbiAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZFZlY3RvclggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIGFyZ3MgPSBbaGFsZnRvbmVSZWdpb24sIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzg6XG4gICAgICBjYXNlIDM5OlxuICAgICAgICB2YXIgZ2VuZXJpY1JlZ2lvbiA9IHt9O1xuICAgICAgICBnZW5lcmljUmVnaW9uLmluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICAgIHZhciBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgZ2VuZXJpY1JlZ2lvbi5tbXIgPSAhIShnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICAgIGdlbmVyaWNSZWdpb24udGVtcGxhdGUgPSBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID4+IDEgJiAzO1xuICAgICAgICBnZW5lcmljUmVnaW9uLnByZWRpY3Rpb24gPSAhIShnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzICYgOCk7XG5cbiAgICAgICAgaWYgKCFnZW5lcmljUmVnaW9uLm1tcikge1xuICAgICAgICAgIGF0TGVuZ3RoID0gZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9PT0gMCA/IDQgOiAxO1xuICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZW5lcmljUmVnaW9uLmF0ID0gYXQ7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzID0gW2dlbmVyaWNSZWdpb24sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0ODpcbiAgICAgICAgdmFyIHBhZ2VJbmZvID0ge1xuICAgICAgICAgIHdpZHRoOiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgIGhlaWdodDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCksXG4gICAgICAgICAgcmVzb2x1dGlvblg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDgpLFxuICAgICAgICAgIHJlc29sdXRpb25ZOiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMilcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGFnZUluZm8uaGVpZ2h0ID09PSAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgZGVsZXRlIHBhZ2VJbmZvLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYWdlU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbiArIDE2XTtcbiAgICAgICAgKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uICsgMTcpO1xuICAgICAgICBwYWdlSW5mby5sb3NzbGVzcyA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgcGFnZUluZm8ucmVmaW5lbWVudCA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAyKTtcbiAgICAgICAgcGFnZUluZm8uZGVmYXVsdFBpeGVsVmFsdWUgPSBwYWdlU2VnbWVudEZsYWdzID4+IDIgJiAxO1xuICAgICAgICBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yID0gcGFnZVNlZ21lbnRGbGFncyA+PiAzICYgMztcbiAgICAgICAgcGFnZUluZm8ucmVxdWlyZXNCdWZmZXIgPSAhIShwYWdlU2VnbWVudEZsYWdzICYgMzIpO1xuICAgICAgICBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGUgPSAhIShwYWdlU2VnbWVudEZsYWdzICYgNjQpO1xuICAgICAgICBhcmdzID0gW3BhZ2VJbmZvXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDk6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDUwOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA1MTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNTM6XG4gICAgICAgIGFyZ3MgPSBbaGVhZGVyLm51bWJlciwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDYyOlxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYHNlZ21lbnQgdHlwZSAke2hlYWRlci50eXBlTmFtZX0oJHtoZWFkZXIudHlwZX0pYCArIFwiIGlzIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2tOYW1lID0gXCJvblwiICsgaGVhZGVyLnR5cGVOYW1lO1xuXG4gICAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7XG4gICAgICB2aXNpdG9yW2NhbGxiYWNrTmFtZV0uYXBwbHkodmlzaXRvciwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgcHJvY2Vzc1NlZ21lbnQoc2VnbWVudHNbaV0sIHZpc2l0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKSB7XG4gICAgdmFyIHZpc2l0b3IgPSBuZXcgU2ltcGxlU2VnbWVudFZpc2l0b3IoKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgY2h1bmsgPSBjaHVua3NbaV07XG4gICAgICB2YXIgc2VnbWVudHMgPSByZWFkU2VnbWVudHMoe30sIGNodW5rLmRhdGEsIGNodW5rLnN0YXJ0LCBjaHVuay5lbmQpO1xuICAgICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlzaXRvci5idWZmZXI7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUpiaWcyKGRhdGEpIHtcbiAgICBjb25zdCBlbmQgPSBkYXRhLmxlbmd0aDtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuXG4gICAgaWYgKGRhdGFbcG9zaXRpb25dICE9PSAweDk3IHx8IGRhdGFbcG9zaXRpb24gKyAxXSAhPT0gMHg0YSB8fCBkYXRhW3Bvc2l0aW9uICsgMl0gIT09IDB4NDIgfHwgZGF0YVtwb3NpdGlvbiArIDNdICE9PSAweDMyIHx8IGRhdGFbcG9zaXRpb24gKyA0XSAhPT0gMHgwZCB8fCBkYXRhW3Bvc2l0aW9uICsgNV0gIT09IDB4MGEgfHwgZGF0YVtwb3NpdGlvbiArIDZdICE9PSAweDFhIHx8IGRhdGFbcG9zaXRpb24gKyA3XSAhPT0gMHgwYSkge1xuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJwYXJzZUpiaWcyIC0gaW52YWxpZCBoZWFkZXIuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcG9zaXRpb24gKz0gODtcbiAgICBjb25zdCBmbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgaGVhZGVyLnJhbmRvbUFjY2VzcyA9ICEoZmxhZ3MgJiAxKTtcblxuICAgIGlmICghKGZsYWdzICYgMikpIHtcbiAgICAgIGhlYWRlci5udW1iZXJPZlBhZ2VzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudHMgPSByZWFkU2VnbWVudHMoaGVhZGVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kKTtcbiAgICBjb25zdCB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7XG4gICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSB2aXNpdG9yLmN1cnJlbnRQYWdlSW5mbztcbiAgICBjb25zdCBiaXRQYWNrZWQgPSB2aXNpdG9yLmJ1ZmZlcjtcbiAgICBjb25zdCBpbWdEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHdpZHRoICogaGVpZ2h0KTtcbiAgICBsZXQgcSA9IDAsXG4gICAgICAgIGsgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgbGV0IG1hc2sgPSAwLFxuICAgICAgICAgIGJ1ZmZlcjtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgIGlmICghbWFzaykge1xuICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgYnVmZmVyID0gYml0UGFja2VkW2srK107XG4gICAgICAgIH1cblxuICAgICAgICBpbWdEYXRhW3ErK10gPSBidWZmZXIgJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW1nRGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yKCkge31cblxuICBTaW1wbGVTZWdtZW50VmlzaXRvci5wcm90b3R5cGUgPSB7XG4gICAgb25QYWdlSW5mb3JtYXRpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uUGFnZUluZm9ybWF0aW9uKGluZm8pIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmZvID0gaW5mbztcbiAgICAgIHZhciByb3dTaXplID0gaW5mby53aWR0aCArIDcgPj4gMztcbiAgICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkocm93U2l6ZSAqIGluZm8uaGVpZ2h0KTtcblxuICAgICAgaWYgKGluZm8uZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBidWZmZXJbaV0gPSAweGZmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIH0sXG4gICAgZHJhd0JpdG1hcDogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3JfZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApIHtcbiAgICAgIHZhciBwYWdlSW5mbyA9IHRoaXMuY3VycmVudFBhZ2VJbmZvO1xuICAgICAgdmFyIHdpZHRoID0gcmVnaW9uSW5mby53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSByZWdpb25JbmZvLmhlaWdodDtcbiAgICAgIHZhciByb3dTaXplID0gcGFnZUluZm8ud2lkdGggKyA3ID4+IDM7XG4gICAgICB2YXIgY29tYmluYXRpb25PcGVyYXRvciA9IHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZSA/IHJlZ2lvbkluZm8uY29tYmluYXRpb25PcGVyYXRvciA6IHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3I7XG4gICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICB2YXIgbWFzazAgPSAxMjggPj4gKHJlZ2lvbkluZm8ueCAmIDcpO1xuICAgICAgdmFyIG9mZnNldDAgPSByZWdpb25JbmZvLnkgKiByb3dTaXplICsgKHJlZ2lvbkluZm8ueCA+PiAzKTtcbiAgICAgIHZhciBpLCBqLCBtYXNrLCBvZmZzZXQ7XG5cbiAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICBtYXNrID0gbWFzazA7XG4gICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQwO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldF0gfD0gbWFzaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG1hc2sgPj49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQwICs9IHJvd1NpemU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0MDtcblxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgaWYgKGJpdG1hcFtpXVtqXSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXRdIF49IG1hc2s7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBtYXNrID4+PSAxO1xuXG4gICAgICAgICAgICAgIGlmICghbWFzaykge1xuICAgICAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0MCArPSByb3dTaXplO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Y29tYmluYXRpb25PcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25JbW1lZGlhdGVHZW5lcmljUmVnaW9uOiBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcl9vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24ocmVnaW9uLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICB2YXIgYml0bWFwID0gZGVjb2RlQml0bWFwKHJlZ2lvbi5tbXIsIHJlZ2lvbkluZm8ud2lkdGgsIHJlZ2lvbkluZm8uaGVpZ2h0LCByZWdpb24udGVtcGxhdGUsIHJlZ2lvbi5wcmVkaWN0aW9uLCBudWxsLCByZWdpb24uYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICB9LFxuICAgIG9uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uOiBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcl9vbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpIHtcbiAgICAgIHRoaXMub25JbW1lZGlhdGVHZW5lcmljUmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBvblN5bWJvbERpY3Rpb25hcnk6IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uU3ltYm9sRGljdGlvbmFyeShkaWN0aW9uYXJ5LCBjdXJyZW50U2VnbWVudCwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcblxuICAgICAgaWYgKGRpY3Rpb25hcnkuaHVmZm1hbikge1xuICAgICAgICBodWZmbWFuVGFibGVzID0gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZGljdGlvbmFyeSwgcmVmZXJyZWRTZWdtZW50cywgdGhpcy5jdXN0b21UYWJsZXMpO1xuICAgICAgICBodWZmbWFuSW5wdXQgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcblxuICAgICAgaWYgKCFzeW1ib2xzKSB7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IHN5bWJvbHMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlucHV0U3ltYm9scyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVmZXJyZWRTeW1ib2xzID0gc3ltYm9sc1tyZWZlcnJlZFNlZ21lbnRzW2ldXTtcblxuICAgICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgc3ltYm9sc1tjdXJyZW50U2VnbWVudF0gPSBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGRpY3Rpb25hcnkuaHVmZm1hbiwgZGljdGlvbmFyeS5yZWZpbmVtZW50LCBpbnB1dFN5bWJvbHMsIGRpY3Rpb25hcnkubnVtYmVyT2ZOZXdTeW1ib2xzLCBkaWN0aW9uYXJ5Lm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLCBodWZmbWFuVGFibGVzLCBkaWN0aW9uYXJ5LnRlbXBsYXRlLCBkaWN0aW9uYXJ5LmF0LCBkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSwgZGljdGlvbmFyeS5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgaHVmZm1hbklucHV0KTtcbiAgICB9LFxuICAgIG9uSW1tZWRpYXRlVGV4dFJlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVUZXh0UmVnaW9uKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIHJlZ2lvbkluZm8gPSByZWdpb24uaW5mbztcbiAgICAgIGxldCBodWZmbWFuVGFibGVzLCBodWZmbWFuSW5wdXQ7XG4gICAgICB2YXIgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcbiAgICAgIHZhciBpbnB1dFN5bWJvbHMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVmZXJyZWRTZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50c1tpXV07XG5cbiAgICAgICAgaWYgKHJlZmVycmVkU3ltYm9scykge1xuICAgICAgICAgIGlucHV0U3ltYm9scyA9IGlucHV0U3ltYm9scy5jb25jYXQocmVmZXJyZWRTeW1ib2xzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3ltYm9sQ29kZUxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5sb2cyKShpbnB1dFN5bWJvbHMubGVuZ3RoKTtcblxuICAgICAgaWYgKHJlZ2lvbi5odWZmbWFuKSB7XG4gICAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRUZXh0UmVnaW9uSHVmZm1hblRhYmxlcyhyZWdpb24sIHJlZmVycmVkU2VnbWVudHMsIHRoaXMuY3VzdG9tVGFibGVzLCBpbnB1dFN5bWJvbHMubGVuZ3RoLCBodWZmbWFuSW5wdXQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVUZXh0UmVnaW9uKHJlZ2lvbi5odWZmbWFuLCByZWdpb24ucmVmaW5lbWVudCwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLCByZWdpb24uc3RyaXBTaXplLCBpbnB1dFN5bWJvbHMsIHN5bWJvbENvZGVMZW5ndGgsIHJlZ2lvbi50cmFuc3Bvc2VkLCByZWdpb24uZHNPZmZzZXQsIHJlZ2lvbi5yZWZlcmVuY2VDb3JuZXIsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCBodWZmbWFuVGFibGVzLCByZWdpb24ucmVmaW5lbWVudFRlbXBsYXRlLCByZWdpb24ucmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIHJlZ2lvbi5sb2dTdHJpcFNpemUsIGh1ZmZtYW5JbnB1dCk7XG4gICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICB9LFxuICAgIG9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uOiBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcl9vbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbigpIHtcbiAgICAgIHRoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSxcblxuICAgIG9uUGF0dGVybkRpY3Rpb25hcnkoZGljdGlvbmFyeSwgY3VycmVudFNlZ21lbnQsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGxldCBwYXR0ZXJucyA9IHRoaXMucGF0dGVybnM7XG5cbiAgICAgIGlmICghcGF0dGVybnMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICBwYXR0ZXJuc1tjdXJyZW50U2VnbWVudF0gPSBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShkaWN0aW9uYXJ5Lm1tciwgZGljdGlvbmFyeS5wYXR0ZXJuV2lkdGgsIGRpY3Rpb25hcnkucGF0dGVybkhlaWdodCwgZGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXgsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgfSxcblxuICAgIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMucGF0dGVybnNbcmVmZXJyZWRTZWdtZW50c1swXV07XG4gICAgICBjb25zdCByZWdpb25JbmZvID0gcmVnaW9uLmluZm87XG4gICAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgY29uc3QgYml0bWFwID0gZGVjb2RlSGFsZnRvbmVSZWdpb24ocmVnaW9uLm1tciwgcGF0dGVybnMsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLmVuYWJsZVNraXAsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCByZWdpb24uZ3JpZFdpZHRoLCByZWdpb24uZ3JpZEhlaWdodCwgcmVnaW9uLmdyaWRPZmZzZXRYLCByZWdpb24uZ3JpZE9mZnNldFksIHJlZ2lvbi5ncmlkVmVjdG9yWCwgcmVnaW9uLmdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7XG4gICAgfSxcblxuICAgIG9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbigpIHtcbiAgICAgIHRoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG5cbiAgICBvblRhYmxlcyhjdXJyZW50U2VnbWVudCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IGN1c3RvbVRhYmxlcyA9IHRoaXMuY3VzdG9tVGFibGVzO1xuXG4gICAgICBpZiAoIWN1c3RvbVRhYmxlcykge1xuICAgICAgICB0aGlzLmN1c3RvbVRhYmxlcyA9IGN1c3RvbVRhYmxlcyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBjdXN0b21UYWJsZXNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgfTtcblxuICBmdW5jdGlvbiBIdWZmbWFuTGluZShsaW5lRGF0YSkge1xuICAgIGlmIChsaW5lRGF0YS5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuaXNPT0IgPSB0cnVlO1xuICAgICAgdGhpcy5yYW5nZUxvdyA9IDA7XG4gICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzBdO1xuICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IDA7XG4gICAgICB0aGlzLnByZWZpeENvZGUgPSBsaW5lRGF0YVsxXTtcbiAgICAgIHRoaXMuaXNMb3dlclJhbmdlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNPT0IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lRGF0YVswXTtcbiAgICAgIHRoaXMucHJlZml4TGVuZ3RoID0gbGluZURhdGFbMV07XG4gICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gbGluZURhdGFbMl07XG4gICAgICB0aGlzLnByZWZpeENvZGUgPSBsaW5lRGF0YVszXTtcbiAgICAgIHRoaXMuaXNMb3dlclJhbmdlID0gbGluZURhdGFbNF0gPT09IFwibG93ZXJcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBIdWZmbWFuVHJlZU5vZGUobGluZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuICAgIGlmIChsaW5lKSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IHRydWU7XG4gICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gbGluZS5yYW5nZUxlbmd0aDtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lLnJhbmdlTG93O1xuICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTtcbiAgICAgIHRoaXMuaXNPT0IgPSBsaW5lLmlzT09CO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEh1ZmZtYW5UcmVlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYnVpbGRUcmVlKGxpbmUsIHNoaWZ0KSB7XG4gICAgICBjb25zdCBiaXQgPSBsaW5lLnByZWZpeENvZGUgPj4gc2hpZnQgJiAxO1xuXG4gICAgICBpZiAoc2hpZnQgPD0gMCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2JpdF0gPSBuZXcgSHVmZm1hblRyZWVOb2RlKGxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmNoaWxkcmVuW2JpdF07XG5cbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgdGhpcy5jaGlsZHJlbltiaXRdID0gbm9kZSA9IG5ldyBIdWZmbWFuVHJlZU5vZGUobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLmJ1aWxkVHJlZShsaW5lLCBzaGlmdCAtIDEpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWNvZGVOb2RlKHJlYWRlcikge1xuICAgICAgaWYgKHRoaXMuaXNMZWFmKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT09CKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodE9mZnNldCA9IHJlYWRlci5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMb3cgKyAodGhpcy5pc0xvd2VyUmFuZ2UgPyAtaHRPZmZzZXQgOiBodE9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNoaWxkcmVuW3JlYWRlci5yZWFkQml0KCldO1xuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gZGF0YVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vZGUuZGVjb2RlTm9kZShyZWFkZXIpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIEh1ZmZtYW5UYWJsZShsaW5lcywgcHJlZml4Q29kZXNEb25lKSB7XG4gICAgaWYgKCFwcmVmaXhDb2Rlc0RvbmUpIHtcbiAgICAgIHRoaXMuYXNzaWduUHJlZml4Q29kZXMobGluZXMpO1xuICAgIH1cblxuICAgIHRoaXMucm9vdE5vZGUgPSBuZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuXG4gICAgICBpZiAobGluZS5wcmVmaXhMZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKGxpbmUsIGxpbmUucHJlZml4TGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgSHVmZm1hblRhYmxlLnByb3RvdHlwZSA9IHtcbiAgICBkZWNvZGUocmVhZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gICAgfSxcblxuICAgIGFzc2lnblByZWZpeENvZGVzKGxpbmVzKSB7XG4gICAgICBjb25zdCBsaW5lc0xlbmd0aCA9IGxpbmVzLmxlbmd0aDtcbiAgICAgIGxldCBwcmVmaXhMZW5ndGhNYXggPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJlZml4TGVuZ3RoTWF4ID0gTWF0aC5tYXgocHJlZml4TGVuZ3RoTWF4LCBsaW5lc1tpXS5wcmVmaXhMZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b2dyYW0gPSBuZXcgVWludDMyQXJyYXkocHJlZml4TGVuZ3RoTWF4ICsgMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNMZW5ndGg7IGkrKykge1xuICAgICAgICBoaXN0b2dyYW1bbGluZXNbaV0ucHJlZml4TGVuZ3RoXSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgY3VycmVudExlbmd0aCA9IDEsXG4gICAgICAgICAgZmlyc3RDb2RlID0gMCxcbiAgICAgICAgICBjdXJyZW50Q29kZSxcbiAgICAgICAgICBjdXJyZW50VGVtcCxcbiAgICAgICAgICBsaW5lO1xuICAgICAgaGlzdG9ncmFtWzBdID0gMDtcblxuICAgICAgd2hpbGUgKGN1cnJlbnRMZW5ndGggPD0gcHJlZml4TGVuZ3RoTWF4KSB7XG4gICAgICAgIGZpcnN0Q29kZSA9IGZpcnN0Q29kZSArIGhpc3RvZ3JhbVtjdXJyZW50TGVuZ3RoIC0gMV0gPDwgMTtcbiAgICAgICAgY3VycmVudENvZGUgPSBmaXJzdENvZGU7XG4gICAgICAgIGN1cnJlbnRUZW1wID0gMDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudFRlbXAgPCBsaW5lc0xlbmd0aCkge1xuICAgICAgICAgIGxpbmUgPSBsaW5lc1tjdXJyZW50VGVtcF07XG5cbiAgICAgICAgICBpZiAobGluZS5wcmVmaXhMZW5ndGggPT09IGN1cnJlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIGxpbmUucHJlZml4Q29kZSA9IGN1cnJlbnRDb2RlO1xuICAgICAgICAgICAgY3VycmVudENvZGUrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VGVtcCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudExlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZVRhYmxlc1NlZ21lbnQoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGZsYWdzID0gZGF0YVtzdGFydF07XG4gICAgY29uc3QgbG93ZXN0VmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyAxKSAmIDB4ZmZmZmZmZmY7XG4gICAgY29uc3QgaGlnaGVzdFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgNSkgJiAweGZmZmZmZmZmO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQgKyA5LCBlbmQpO1xuICAgIGNvbnN0IHByZWZpeFNpemVCaXRzID0gKGZsYWdzID4+IDEgJiA3KSArIDE7XG4gICAgY29uc3QgcmFuZ2VTaXplQml0cyA9IChmbGFncyA+PiA0ICYgNykgKyAxO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgbGV0IHByZWZpeExlbmd0aCxcbiAgICAgICAgcmFuZ2VMZW5ndGgsXG4gICAgICAgIGN1cnJlbnRSYW5nZUxvdyA9IGxvd2VzdFZhbHVlO1xuXG4gICAgZG8ge1xuICAgICAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTtcbiAgICAgIHJhbmdlTGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHJhbmdlU2l6ZUJpdHMpO1xuICAgICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2N1cnJlbnRSYW5nZUxvdywgcHJlZml4TGVuZ3RoLCByYW5nZUxlbmd0aCwgMF0pKTtcbiAgICAgIGN1cnJlbnRSYW5nZUxvdyArPSAxIDw8IHJhbmdlTGVuZ3RoO1xuICAgIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7XG5cbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtsb3dlc3RWYWx1ZSAtIDEsIHByZWZpeExlbmd0aCwgMzIsIDAsIFwibG93ZXJcIl0pKTtcbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtoaWdoZXN0VmFsdWUsIHByZWZpeExlbmd0aCwgMzIsIDBdKSk7XG5cbiAgICBpZiAoZmxhZ3MgJiAxKSB7XG4gICAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW3ByZWZpeExlbmd0aCwgMF0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShsaW5lcywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3Qgc3RhbmRhcmRUYWJsZXNDYWNoZSA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7XG4gICAgbGV0IHRhYmxlID0gc3RhbmRhcmRUYWJsZXNDYWNoZVtudW1iZXJdO1xuXG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgbGV0IGxpbmVzO1xuXG4gICAgc3dpdGNoIChudW1iZXIpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgbGluZXMgPSBbWzAsIDEsIDQsIDB4MF0sIFsxNiwgMiwgOCwgMHgyXSwgWzI3MiwgMywgMTYsIDB4Nl0sIFs2NTgwOCwgMywgMzIsIDB4N11dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBsaW5lcyA9IFtbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhlXSwgWzExLCA1LCA2LCAweDFlXSwgWzc1LCA2LCAzMiwgMHgzZV0sIFs2LCAweDNmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGxpbmVzID0gW1stMjU2LCA4LCA4LCAweGZlXSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAyLCAwLCAweDJdLCBbMiwgMywgMCwgMHg2XSwgWzMsIDQsIDMsIDB4ZV0sIFsxMSwgNSwgNiwgMHgxZV0sIFstMjU3LCA4LCAzMiwgMHhmZiwgXCJsb3dlclwiXSwgWzc1LCA3LCAzMiwgMHg3ZV0sIFs2LCAweDNlXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMCwgMHgyXSwgWzMsIDMsIDAsIDB4Nl0sIFs0LCA0LCAzLCAweGVdLCBbMTIsIDUsIDYsIDB4MWVdLCBbNzYsIDUsIDMyLCAweDFmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDU6XG4gICAgICAgIGxpbmVzID0gW1stMjU1LCA3LCA4LCAweDdlXSwgWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMCwgMHg2XSwgWzQsIDQsIDMsIDB4ZV0sIFsxMiwgNSwgNiwgMHgxZV0sIFstMjU2LCA3LCAzMiwgMHg3ZiwgXCJsb3dlclwiXSwgWzc2LCA2LCAzMiwgMHgzZV1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA2OlxuICAgICAgICBsaW5lcyA9IFtbLTIwNDgsIDUsIDEwLCAweDFjXSwgWy0xMDI0LCA0LCA5LCAweDhdLCBbLTUxMiwgNCwgOCwgMHg5XSwgWy0yNTYsIDQsIDcsIDB4YV0sIFstMTI4LCA1LCA2LCAweDFkXSwgWy02NCwgNSwgNSwgMHgxZV0sIFstMzIsIDQsIDUsIDB4Yl0sIFswLCAyLCA3LCAweDBdLCBbMTI4LCAzLCA3LCAweDJdLCBbMjU2LCAzLCA4LCAweDNdLCBbNTEyLCA0LCA5LCAweGNdLCBbMTAyNCwgNCwgMTAsIDB4ZF0sIFstMjA0OSwgNiwgMzIsIDB4M2UsIFwibG93ZXJcIl0sIFsyMDQ4LCA2LCAzMiwgMHgzZl1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA3OlxuICAgICAgICBsaW5lcyA9IFtbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCAzLCA4LCAweDBdLCBbLTI1NiwgNCwgNywgMHg5XSwgWy0xMjgsIDUsIDYsIDB4MWFdLCBbLTY0LCA1LCA1LCAweDFiXSwgWy0zMiwgNCwgNSwgMHhhXSwgWzAsIDQsIDUsIDB4Yl0sIFszMiwgNSwgNSwgMHgxY10sIFs2NCwgNSwgNiwgMHgxZF0sIFsxMjgsIDQsIDcsIDB4Y10sIFsyNTYsIDMsIDgsIDB4MV0sIFs1MTIsIDMsIDksIDB4Ml0sIFsxMDI0LCAzLCAxMCwgMHgzXSwgWy0xMDI1LCA1LCAzMiwgMHgxZSwgXCJsb3dlclwiXSwgWzIwNDgsIDUsIDMyLCAweDFmXV07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDg6XG4gICAgICAgIGxpbmVzID0gW1stMTUsIDgsIDMsIDB4ZmNdLCBbLTcsIDksIDEsIDB4MWZjXSwgWy01LCA4LCAxLCAweGZkXSwgWy0zLCA5LCAwLCAweDFmZF0sIFstMiwgNywgMCwgMHg3Y10sIFstMSwgNCwgMCwgMHhhXSwgWzAsIDIsIDEsIDB4MF0sIFsyLCA1LCAwLCAweDFhXSwgWzMsIDYsIDAsIDB4M2FdLCBbNCwgMywgNCwgMHg0XSwgWzIwLCA2LCAxLCAweDNiXSwgWzIyLCA0LCA0LCAweGJdLCBbMzgsIDQsIDUsIDB4Y10sIFs3MCwgNSwgNiwgMHgxYl0sIFsxMzQsIDUsIDcsIDB4MWNdLCBbMjYyLCA2LCA3LCAweDNjXSwgWzM5MCwgNywgOCwgMHg3ZF0sIFs2NDYsIDYsIDEwLCAweDNkXSwgWy0xNiwgOSwgMzIsIDB4MWZlLCBcImxvd2VyXCJdLCBbMTY3MCwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MV1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA5OlxuICAgICAgICBsaW5lcyA9IFtbLTMxLCA4LCA0LCAweGZjXSwgWy0xNSwgOSwgMiwgMHgxZmNdLCBbLTExLCA4LCAyLCAweGZkXSwgWy03LCA5LCAxLCAweDFmZF0sIFstNSwgNywgMSwgMHg3Y10sIFstMywgNCwgMSwgMHhhXSwgWy0xLCAzLCAxLCAweDJdLCBbMSwgMywgMSwgMHgzXSwgWzMsIDUsIDEsIDB4MWFdLCBbNSwgNiwgMSwgMHgzYV0sIFs3LCAzLCA1LCAweDRdLCBbMzksIDYsIDIsIDB4M2JdLCBbNDMsIDQsIDUsIDB4Yl0sIFs3NSwgNCwgNiwgMHhjXSwgWzEzOSwgNSwgNywgMHgxYl0sIFsyNjcsIDUsIDgsIDB4MWNdLCBbNTIzLCA2LCA4LCAweDNjXSwgWzc3OSwgNywgOSwgMHg3ZF0sIFsxMjkxLCA2LCAxMSwgMHgzZF0sIFstMzIsIDksIDMyLCAweDFmZSwgXCJsb3dlclwiXSwgWzMzMzksIDksIDMyLCAweDFmZl0sIFsyLCAweDBdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIGxpbmVzID0gW1stMjEsIDcsIDQsIDB4N2FdLCBbLTUsIDgsIDAsIDB4ZmNdLCBbLTQsIDcsIDAsIDB4N2JdLCBbLTMsIDUsIDAsIDB4MThdLCBbLTIsIDIsIDIsIDB4MF0sIFsyLCA1LCAwLCAweDE5XSwgWzMsIDYsIDAsIDB4MzZdLCBbNCwgNywgMCwgMHg3Y10sIFs1LCA4LCAwLCAweGZkXSwgWzYsIDIsIDYsIDB4MV0sIFs3MCwgNSwgNSwgMHgxYV0sIFsxMDIsIDYsIDUsIDB4MzddLCBbMTM0LCA2LCA2LCAweDM4XSwgWzE5OCwgNiwgNywgMHgzOV0sIFszMjYsIDYsIDgsIDB4M2FdLCBbNTgyLCA2LCA5LCAweDNiXSwgWzEwOTQsIDYsIDEwLCAweDNjXSwgWzIxMTgsIDcsIDExLCAweDdkXSwgWy0yMiwgOCwgMzIsIDB4ZmUsIFwibG93ZXJcIl0sIFs0MTY2LCA4LCAzMiwgMHhmZl0sIFsyLCAweDJdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTE6XG4gICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMSwgMHgyXSwgWzQsIDQsIDAsIDB4Y10sIFs1LCA0LCAxLCAweGRdLCBbNywgNSwgMSwgMHgxY10sIFs5LCA1LCAyLCAweDFkXSwgWzEzLCA2LCAyLCAweDNjXSwgWzE3LCA3LCAyLCAweDdhXSwgWzIxLCA3LCAzLCAweDdiXSwgWzI5LCA3LCA0LCAweDdjXSwgWzQ1LCA3LCA1LCAweDdkXSwgWzc3LCA3LCA2LCAweDdlXSwgWzE0MSwgNywgMzIsIDB4N2ZdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTI6XG4gICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMCwgMHgyXSwgWzMsIDMsIDEsIDB4Nl0sIFs1LCA1LCAwLCAweDFjXSwgWzYsIDUsIDEsIDB4MWRdLCBbOCwgNiwgMSwgMHgzY10sIFsxMCwgNywgMCwgMHg3YV0sIFsxMSwgNywgMSwgMHg3Yl0sIFsxMywgNywgMiwgMHg3Y10sIFsxNywgNywgMywgMHg3ZF0sIFsyNSwgNywgNCwgMHg3ZV0sIFs0MSwgOCwgNSwgMHhmZV0sIFs3MywgOCwgMzIsIDB4ZmZdXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMywgMCwgMHg0XSwgWzMsIDQsIDAsIDB4Y10sIFs0LCA1LCAwLCAweDFjXSwgWzUsIDQsIDEsIDB4ZF0sIFs3LCAzLCAzLCAweDVdLCBbMTUsIDYsIDEsIDB4M2FdLCBbMTcsIDYsIDIsIDB4M2JdLCBbMjEsIDYsIDMsIDB4M2NdLCBbMjksIDYsIDQsIDB4M2RdLCBbNDUsIDYsIDUsIDB4M2VdLCBbNzcsIDcsIDYsIDB4N2VdLCBbMTQxLCA3LCAzMiwgMHg3Zl1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxNDpcbiAgICAgICAgbGluZXMgPSBbWy0yLCAzLCAwLCAweDRdLCBbLTEsIDMsIDAsIDB4NV0sIFswLCAxLCAwLCAweDBdLCBbMSwgMywgMCwgMHg2XSwgWzIsIDMsIDAsIDB4N11dO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxNTpcbiAgICAgICAgbGluZXMgPSBbWy0yNCwgNywgNCwgMHg3Y10sIFstOCwgNiwgMiwgMHgzY10sIFstNCwgNSwgMSwgMHgxY10sIFstMiwgNCwgMCwgMHhjXSwgWy0xLCAzLCAwLCAweDRdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDMsIDAsIDB4NV0sIFsyLCA0LCAwLCAweGRdLCBbMywgNSwgMSwgMHgxZF0sIFs1LCA2LCAyLCAweDNkXSwgWzksIDcsIDQsIDB4N2RdLCBbLTI1LCA3LCAzMiwgMHg3ZSwgXCJsb3dlclwiXSwgWzI1LCA3LCAzMiwgMHg3Zl1dO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYHN0YW5kYXJkIHRhYmxlIEIuJHtudW1iZXJ9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgbGluZXNbaV0gPSBuZXcgSHVmZm1hbkxpbmUobGluZXNbaV0pO1xuICAgIH1cblxuICAgIHRhYmxlID0gbmV3IEh1ZmZtYW5UYWJsZShsaW5lcywgdHJ1ZSk7XG4gICAgc3RhbmRhcmRUYWJsZXNDYWNoZVtudW1iZXJdID0gdGFibGU7XG4gICAgcmV0dXJuIHRhYmxlO1xuICB9XG5cbiAgZnVuY3Rpb24gUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB0aGlzLnBvc2l0aW9uID0gc3RhcnQ7XG4gICAgdGhpcy5zaGlmdCA9IC0xO1xuICAgIHRoaXMuY3VycmVudEJ5dGUgPSAwO1xuICB9XG5cbiAgUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICByZWFkQml0KCkge1xuICAgICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7XG4gICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJlbmQgb2YgZGF0YSB3aGlsZSByZWFkaW5nIGJpdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudEJ5dGUgPSB0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTtcbiAgICAgICAgdGhpcy5zaGlmdCA9IDc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpdCA9IHRoaXMuY3VycmVudEJ5dGUgPj4gdGhpcy5zaGlmdCAmIDE7XG4gICAgICB0aGlzLnNoaWZ0LS07XG4gICAgICByZXR1cm4gYml0O1xuICAgIH0sXG5cbiAgICByZWFkQml0cyhudW1CaXRzKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gMCxcbiAgICAgICAgICBpO1xuXG4gICAgICBmb3IgKGkgPSBudW1CaXRzIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgcmVzdWx0IHw9IHRoaXMucmVhZEJpdCgpIDw8IGk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIGJ5dGVBbGlnbigpIHtcbiAgICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICB9LFxuXG4gICAgbmV4dCgpIHtcbiAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEN1c3RvbUh1ZmZtYW5UYWJsZShpbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKSB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFRvLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gY3VzdG9tVGFibGVzW3JlZmVycmVkVG9baV1dO1xuXG4gICAgICBpZiAodGFibGUpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50SW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImNhbid0IGZpbmQgY3VzdG9tIEh1ZmZtYW4gdGFibGVcIik7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUZXh0UmVnaW9uSHVmZm1hblRhYmxlcyh0ZXh0UmVnaW9uLCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMsIG51bWJlck9mU3ltYm9scywgcmVhZGVyKSB7XG4gICAgY29uc3QgY29kZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDM0OyBpKyspIHtcbiAgICAgIGNvbnN0IGNvZGVMZW5ndGggPSByZWFkZXIucmVhZEJpdHMoNCk7XG4gICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5Db2Rlc1RhYmxlID0gbmV3IEh1ZmZtYW5UYWJsZShjb2RlcywgZmFsc2UpO1xuICAgIGNvZGVzLmxlbmd0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mU3ltYm9sczspIHtcbiAgICAgIGNvbnN0IGNvZGVMZW5ndGggPSBydW5Db2Rlc1RhYmxlLmRlY29kZShyZWFkZXIpO1xuXG4gICAgICBpZiAoY29kZUxlbmd0aCA+PSAzMikge1xuICAgICAgICBsZXQgcmVwZWF0ZWRMZW5ndGgsIG51bWJlck9mUmVwZWF0cywgajtcblxuICAgICAgICBzd2l0Y2ggKGNvZGVMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGVcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHJlYWRlci5yZWFkQml0cygyKSArIDM7XG4gICAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IGNvZGVzW2kgLSAxXS5wcmVmaXhMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMykgKyAzO1xuICAgICAgICAgICAgcmVwZWF0ZWRMZW5ndGggPSAwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgbnVtYmVyT2ZSZXBlYXRzID0gcmVhZGVyLnJlYWRCaXRzKDcpICsgMTE7XG4gICAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IDA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUmVwZWF0czsgaisrKSB7XG4gICAgICAgICAgY29kZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ksIHJlcGVhdGVkTGVuZ3RoLCAwLCAwXSkpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ksIGNvZGVMZW5ndGgsIDAsIDBdKSk7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgY29uc3Qgc3ltYm9sSURUYWJsZSA9IG5ldyBIdWZmbWFuVGFibGUoY29kZXMsIGZhbHNlKTtcbiAgICBsZXQgY3VzdG9tSW5kZXggPSAwLFxuICAgICAgICB0YWJsZUZpcnN0UyxcbiAgICAgICAgdGFibGVEZWx0YVMsXG4gICAgICAgIHRhYmxlRGVsdGFUO1xuXG4gICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5GUykge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgICB0YWJsZUZpcnN0UyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRlMgKyA2KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGFibGVGaXJzdFMgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBGUyBzZWxlY3RvclwiKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkRTKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRhYmxlRGVsdGFTID0gZ2V0U3RhbmRhcmRUYWJsZSh0ZXh0UmVnaW9uLmh1ZmZtYW5EUyArIDgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0YWJsZURlbHRhUyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERTIHNlbGVjdG9yXCIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRFQpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGFibGVEZWx0YVQgPSBnZXRTdGFuZGFyZFRhYmxlKHRleHRSZWdpb24uaHVmZm1hbkRUICsgMTEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0YWJsZURlbHRhVCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yXCIpO1xuICAgIH1cblxuICAgIGlmICh0ZXh0UmVnaW9uLnJlZmluZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sSURUYWJsZSxcbiAgICAgIHRhYmxlRmlyc3RTLFxuICAgICAgdGFibGVEZWx0YVMsXG4gICAgICB0YWJsZURlbHRhVFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICBsZXQgY3VzdG9tSW5kZXggPSAwLFxuICAgICAgICB0YWJsZURlbHRhSGVpZ2h0LFxuICAgICAgICB0YWJsZURlbHRhV2lkdGg7XG5cbiAgICBzd2l0Y2ggKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGFibGVEZWx0YUhlaWdodCA9IGdldFN0YW5kYXJkVGFibGUoZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3RvciArIDQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0YWJsZURlbHRhSGVpZ2h0ID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3JcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRhYmxlRGVsdGFXaWR0aCA9IGdldFN0YW5kYXJkVGFibGUoZGljdGlvbmFyeS5odWZmbWFuRFdTZWxlY3RvciArIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvclwiKTtcbiAgICB9XG5cbiAgICBsZXQgdGFibGVCaXRtYXBTaXplLCB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcztcblxuICAgIGlmIChkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3Rvcikge1xuICAgICAgdGFibGVCaXRtYXBTaXplID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVCaXRtYXBTaXplID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgICB9XG5cbiAgICBpZiAoZGljdGlvbmFyeS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yKSB7XG4gICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXMgPSBnZXRTdGFuZGFyZFRhYmxlKDEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0YWJsZURlbHRhSGVpZ2h0LFxuICAgICAgdGFibGVEZWx0YVdpZHRoLFxuICAgICAgdGFibGVCaXRtYXBTaXplLFxuICAgICAgdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXNcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChyZWFkZXIsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBiaXRtYXAgPSBbXTtcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICByb3dbeF0gPSByZWFkZXIucmVhZEJpdCgpO1xuICAgICAgfVxuXG4gICAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpdG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZU1NUkJpdG1hcChpbnB1dCwgd2lkdGgsIGhlaWdodCwgZW5kT2ZCbG9jaykge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIEs6IC0xLFxuICAgICAgQ29sdW1uczogd2lkdGgsXG4gICAgICBSb3dzOiBoZWlnaHQsXG4gICAgICBCbGFja0lzMTogdHJ1ZSxcbiAgICAgIEVuZE9mQmxvY2s6IGVuZE9mQmxvY2tcbiAgICB9O1xuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgX2NjaXR0LkNDSVRURmF4RGVjb2RlcihpbnB1dCwgcGFyYW1zKTtcbiAgICBjb25zdCBiaXRtYXAgPSBbXTtcbiAgICBsZXQgY3VycmVudEJ5dGUsXG4gICAgICAgIGVvZiA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICAgIGxldCBzaGlmdCA9IC0xO1xuXG4gICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgaWYgKHNoaWZ0IDwgMCkge1xuICAgICAgICAgIGN1cnJlbnRCeXRlID0gZGVjb2Rlci5yZWFkTmV4dENoYXIoKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gMDtcbiAgICAgICAgICAgIGVvZiA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2hpZnQgPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgcm93W3hdID0gY3VycmVudEJ5dGUgPj4gc2hpZnQgJiAxO1xuICAgICAgICBzaGlmdC0tO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmRPZkJsb2NrICYmICFlb2YpIHtcbiAgICAgIGNvbnN0IGxvb2tGb3JFT0ZMaW1pdCA9IDU7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9va0ZvckVPRkxpbWl0OyBpKyspIHtcbiAgICAgICAgaWYgKGRlY29kZXIucmVhZE5leHRDaGFyKCkgPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYml0bWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gSmJpZzJJbWFnZSgpIHt9XG5cbiAgSmJpZzJJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgcGFyc2VDaHVua3MoY2h1bmtzKSB7XG4gICAgICByZXR1cm4gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpO1xuICAgIH0sXG5cbiAgICBwYXJzZShkYXRhKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGltZ0RhdGEsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSBwYXJzZUpiaWcyKGRhdGEpO1xuICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEpiaWcySW1hZ2U7XG59KCk7XG5cbmV4cG9ydHMuSmJpZzJJbWFnZSA9IEpiaWcySW1hZ2U7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJpdGhtZXRpY0RlY29kZXIgPSB2b2lkIDA7XG5jb25zdCBRZVRhYmxlID0gW3tcbiAgcWU6IDB4NTYwMSxcbiAgbm1wczogMSxcbiAgbmxwczogMSxcbiAgc3dpdGNoRmxhZzogMVxufSwge1xuICBxZTogMHgzNDAxLFxuICBubXBzOiAyLFxuICBubHBzOiA2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE4MDEsXG4gIG5tcHM6IDMsXG4gIG5scHM6IDksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MGFjMSxcbiAgbm1wczogNCxcbiAgbmxwczogMTIsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDUyMSxcbiAgbm1wczogNSxcbiAgbmxwczogMjksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDIyMSxcbiAgbm1wczogMzgsXG4gIG5scHM6IDMzLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDU2MDEsXG4gIG5tcHM6IDcsXG4gIG5scHM6IDYsXG4gIHN3aXRjaEZsYWc6IDFcbn0sIHtcbiAgcWU6IDB4NTQwMSxcbiAgbm1wczogOCxcbiAgbmxwczogMTQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NDgwMSxcbiAgbm1wczogOSxcbiAgbmxwczogMTQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzgwMSxcbiAgbm1wczogMTAsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDMwMDEsXG4gIG5tcHM6IDExLFxuICBubHBzOiAxNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgyNDAxLFxuICBubXBzOiAxMixcbiAgbmxwczogMTgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MWMwMSxcbiAgbm1wczogMTMsXG4gIG5scHM6IDIwLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE2MDEsXG4gIG5tcHM6IDI5LFxuICBubHBzOiAyMSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1NjAxLFxuICBubXBzOiAxNSxcbiAgbmxwczogMTQsXG4gIHN3aXRjaEZsYWc6IDFcbn0sIHtcbiAgcWU6IDB4NTQwMSxcbiAgbm1wczogMTYsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDUxMDEsXG4gIG5tcHM6IDE3LFxuICBubHBzOiAxNSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg0ODAxLFxuICBubXBzOiAxOCxcbiAgbmxwczogMTYsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzgwMSxcbiAgbm1wczogMTksXG4gIG5scHM6IDE3LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDM0MDEsXG4gIG5tcHM6IDIwLFxuICBubHBzOiAxOCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzMDAxLFxuICBubXBzOiAyMSxcbiAgbmxwczogMTksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjgwMSxcbiAgbm1wczogMjIsXG4gIG5scHM6IDE5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDI0MDEsXG4gIG5tcHM6IDIzLFxuICBubHBzOiAyMCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgyMjAxLFxuICBubXBzOiAyNCxcbiAgbmxwczogMjEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MWMwMSxcbiAgbm1wczogMjUsXG4gIG5scHM6IDIyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE4MDEsXG4gIG5tcHM6IDI2LFxuICBubHBzOiAyMyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxNjAxLFxuICBubXBzOiAyNyxcbiAgbmxwczogMjQsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTQwMSxcbiAgbm1wczogMjgsXG4gIG5scHM6IDI1LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDEyMDEsXG4gIG5tcHM6IDI5LFxuICBubHBzOiAyNixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxMTAxLFxuICBubXBzOiAzMCxcbiAgbmxwczogMjcsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MGFjMSxcbiAgbm1wczogMzEsXG4gIG5scHM6IDI4LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA5YzEsXG4gIG5tcHM6IDMyLFxuICBubHBzOiAyOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwOGExLFxuICBubXBzOiAzMyxcbiAgbmxwczogMzAsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDUyMSxcbiAgbm1wczogMzQsXG4gIG5scHM6IDMxLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA0NDEsXG4gIG5tcHM6IDM1LFxuICBubHBzOiAzMixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMmExLFxuICBubXBzOiAzNixcbiAgbmxwczogMzMsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDIyMSxcbiAgbm1wczogMzcsXG4gIG5scHM6IDM0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAxNDEsXG4gIG5tcHM6IDM4LFxuICBubHBzOiAzNSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMTExLFxuICBubXBzOiAzOSxcbiAgbmxwczogMzYsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDA4NSxcbiAgbm1wczogNDAsXG4gIG5scHM6IDM3LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwNDksXG4gIG5tcHM6IDQxLFxuICBubHBzOiAzOCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDI1LFxuICBubXBzOiA0MixcbiAgbmxwczogMzksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAxNSxcbiAgbm1wczogNDMsXG4gIG5scHM6IDQwLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMDksXG4gIG5tcHM6IDQ0LFxuICBubHBzOiA0MSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDA1LFxuICBubXBzOiA0NSxcbiAgbmxwczogNDIsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAwMSxcbiAgbm1wczogNDUsXG4gIG5scHM6IDQzLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDU2MDEsXG4gIG5tcHM6IDQ2LFxuICBubHBzOiA0NixcbiAgc3dpdGNoRmxhZzogMFxufV07XG5cbmNsYXNzIEFyaXRobWV0aWNEZWNvZGVyIHtcbiAgY29uc3RydWN0b3IoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5icCA9IHN0YXJ0O1xuICAgIHRoaXMuZGF0YUVuZCA9IGVuZDtcbiAgICB0aGlzLmNoaWdoID0gZGF0YVtzdGFydF07XG4gICAgdGhpcy5jbG93ID0gMDtcbiAgICB0aGlzLmJ5dGVJbigpO1xuICAgIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDcgJiAweGZmZmYgfCB0aGlzLmNsb3cgPj4gOSAmIDB4N2Y7XG4gICAgdGhpcy5jbG93ID0gdGhpcy5jbG93IDw8IDcgJiAweGZmZmY7XG4gICAgdGhpcy5jdCAtPSA3O1xuICAgIHRoaXMuYSA9IDB4ODAwMDtcbiAgfVxuXG4gIGJ5dGVJbigpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGxldCBicCA9IHRoaXMuYnA7XG5cbiAgICBpZiAoZGF0YVticF0gPT09IDB4ZmYpIHtcbiAgICAgIGlmIChkYXRhW2JwICsgMV0gPiAweDhmKSB7XG4gICAgICAgIHRoaXMuY2xvdyArPSAweGZmMDA7XG4gICAgICAgIHRoaXMuY3QgPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnArKztcbiAgICAgICAgdGhpcy5jbG93ICs9IGRhdGFbYnBdIDw8IDk7XG4gICAgICAgIHRoaXMuY3QgPSA3O1xuICAgICAgICB0aGlzLmJwID0gYnA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJwKys7XG4gICAgICB0aGlzLmNsb3cgKz0gYnAgPCB0aGlzLmRhdGFFbmQgPyBkYXRhW2JwXSA8PCA4IDogMHhmZjAwO1xuICAgICAgdGhpcy5jdCA9IDg7XG4gICAgICB0aGlzLmJwID0gYnA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvdyA+IDB4ZmZmZikge1xuICAgICAgdGhpcy5jaGlnaCArPSB0aGlzLmNsb3cgPj4gMTY7XG4gICAgICB0aGlzLmNsb3cgJj0gMHhmZmZmO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRCaXQoY29udGV4dHMsIHBvcykge1xuICAgIGxldCBjeF9pbmRleCA9IGNvbnRleHRzW3Bvc10gPj4gMSxcbiAgICAgICAgY3hfbXBzID0gY29udGV4dHNbcG9zXSAmIDE7XG4gICAgY29uc3QgcWVUYWJsZUljeCA9IFFlVGFibGVbY3hfaW5kZXhdO1xuICAgIGNvbnN0IHFlSWN4ID0gcWVUYWJsZUljeC5xZTtcbiAgICBsZXQgZDtcbiAgICBsZXQgYSA9IHRoaXMuYSAtIHFlSWN4O1xuXG4gICAgaWYgKHRoaXMuY2hpZ2ggPCBxZUljeCkge1xuICAgICAgaWYgKGEgPCBxZUljeCkge1xuICAgICAgICBhID0gcWVJY3g7XG4gICAgICAgIGQgPSBjeF9tcHM7XG4gICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubXBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYSA9IHFlSWN4O1xuICAgICAgICBkID0gMSBeIGN4X21wcztcblxuICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgY3hfbXBzID0gZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubHBzO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoaWdoIC09IHFlSWN4O1xuXG4gICAgICBpZiAoKGEgJiAweDgwMDApICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgIHJldHVybiBjeF9tcHM7XG4gICAgICB9XG5cbiAgICAgIGlmIChhIDwgcWVJY3gpIHtcbiAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgaWYgKHFlVGFibGVJY3guc3dpdGNoRmxhZyA9PT0gMSkge1xuICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubmxwcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSBjeF9tcHM7XG4gICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubXBzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIGlmICh0aGlzLmN0ID09PSAwKSB7XG4gICAgICAgIHRoaXMuYnl0ZUluKCk7XG4gICAgICB9XG5cbiAgICAgIGEgPDw9IDE7XG4gICAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCAxICYgMHhmZmZmIHwgdGhpcy5jbG93ID4+IDE1ICYgMTtcbiAgICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCAxICYgMHhmZmZmO1xuICAgICAgdGhpcy5jdC0tO1xuICAgIH0gd2hpbGUgKChhICYgMHg4MDAwKSA9PT0gMCk7XG5cbiAgICB0aGlzLmEgPSBhO1xuICAgIGNvbnRleHRzW3Bvc10gPSBjeF9pbmRleCA8PCAxIHwgY3hfbXBzO1xuICAgIHJldHVybiBkO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IEFyaXRobWV0aWNEZWNvZGVyO1xuXG4vKioqLyB9KSxcbi8qIDE4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkpwZWdTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfanBnID0gX193X3BkZmpzX3JlcXVpcmVfXygxOSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IEpwZWdTdHJlYW0gPSBmdW5jdGlvbiBKcGVnU3RyZWFtQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gSnBlZ1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBkaWN0LCBwYXJhbXMpIHtcbiAgICBsZXQgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoY2ggPT09IDB4ZmYpIHtcbiAgICAgICAgc3RyZWFtLnNraXAoLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcblxuICAgIF9zdHJlYW0uRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICB9XG5cbiAgSnBlZ1N0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKcGVnU3RyZWFtLnByb3RvdHlwZSwgXCJieXRlc1wiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBKcGVnU3RyZWFtX2J5dGVzKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYnl0ZXNcIiwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIEpwZWdTdHJlYW0ucHJvdG90eXBlLmVuc3VyZUJ1ZmZlciA9IGZ1bmN0aW9uIChyZXF1ZXN0ZWQpIHt9O1xuXG4gIEpwZWdTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqcGVnT3B0aW9ucyA9IHtcbiAgICAgIGRlY29kZVRyYW5zZm9ybTogdW5kZWZpbmVkLFxuICAgICAgY29sb3JUcmFuc2Zvcm06IHVuZGVmaW5lZFxuICAgIH07XG4gICAgY29uc3QgZGVjb2RlQXJyID0gdGhpcy5kaWN0LmdldEFycmF5KFwiRGVjb2RlXCIsIFwiRFwiKTtcblxuICAgIGlmICh0aGlzLmZvcmNlUkdCICYmIEFycmF5LmlzQXJyYXkoZGVjb2RlQXJyKSkge1xuICAgICAgY29uc3QgYml0c1BlckNvbXBvbmVudCA9IHRoaXMuZGljdC5nZXQoXCJCaXRzUGVyQ29tcG9uZW50XCIpIHx8IDg7XG4gICAgICBjb25zdCBkZWNvZGVBcnJMZW5ndGggPSBkZWNvZGVBcnIubGVuZ3RoO1xuICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoZGVjb2RlQXJyTGVuZ3RoKTtcbiAgICAgIGxldCB0cmFuc2Zvcm1OZWVkZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG1heFZhbHVlID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZUFyckxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHRyYW5zZm9ybVtpXSA9IChkZWNvZGVBcnJbaSArIDFdIC0gZGVjb2RlQXJyW2ldKSAqIDI1NiB8IDA7XG4gICAgICAgIHRyYW5zZm9ybVtpICsgMV0gPSBkZWNvZGVBcnJbaV0gKiBtYXhWYWx1ZSB8IDA7XG5cbiAgICAgICAgaWYgKHRyYW5zZm9ybVtpXSAhPT0gMjU2IHx8IHRyYW5zZm9ybVtpICsgMV0gIT09IDApIHtcbiAgICAgICAgICB0cmFuc2Zvcm1OZWVkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFuc2Zvcm1OZWVkZWQpIHtcbiAgICAgICAganBlZ09wdGlvbnMuZGVjb2RlVHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmFtcykpIHtcbiAgICAgIGNvbnN0IGNvbG9yVHJhbnNmb3JtID0gdGhpcy5wYXJhbXMuZ2V0KFwiQ29sb3JUcmFuc2Zvcm1cIik7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvbG9yVHJhbnNmb3JtKSkge1xuICAgICAgICBqcGVnT3B0aW9ucy5jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGpwZWdJbWFnZSA9IG5ldyBfanBnLkpwZWdJbWFnZShqcGVnT3B0aW9ucyk7XG4gICAganBlZ0ltYWdlLnBhcnNlKHRoaXMuYnl0ZXMpO1xuICAgIGNvbnN0IGRhdGEgPSBqcGVnSW1hZ2UuZ2V0RGF0YSh7XG4gICAgICB3aWR0aDogdGhpcy5kcmF3V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuZHJhd0hlaWdodCxcbiAgICAgIGZvcmNlUkdCOiB0aGlzLmZvcmNlUkdCLFxuICAgICAgaXNTb3VyY2VQREY6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLmVvZiA9IHRydWU7XG4gIH07XG5cbiAgcmV0dXJuIEpwZWdTdHJlYW07XG59KCk7XG5cbmV4cG9ydHMuSnBlZ1N0cmVhbSA9IEpwZWdTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSnBlZ0ltYWdlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG5jbGFzcyBKcGVnRXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIoYEpQRUcgZXJyb3I6ICR7bXNnfWApO1xuICB9XG5cbn1cblxuY2xhc3MgRE5MTWFya2VyRXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc2NhbkxpbmVzKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5zY2FuTGluZXMgPSBzY2FuTGluZXM7XG4gIH1cblxufVxuXG5jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge31cblxudmFyIEpwZWdJbWFnZSA9IGZ1bmN0aW9uIEpwZWdJbWFnZUNsb3N1cmUoKSB7XG4gIHZhciBkY3RaaWdaYWcgPSBuZXcgVWludDhBcnJheShbMCwgMSwgOCwgMTYsIDksIDIsIDMsIDEwLCAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCA0LCA1LCAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsIDI3LCAyMCwgMTMsIDYsIDcsIDE0LCAyMSwgMjgsIDM1LCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSwgMjMsIDMwLCAzNywgNDQsIDUxLCA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsIDUzLCA2MCwgNjEsIDU0LCA0NywgNTUsIDYyLCA2M10pO1xuICB2YXIgZGN0Q29zMSA9IDQwMTc7XG4gIHZhciBkY3RTaW4xID0gNzk5O1xuICB2YXIgZGN0Q29zMyA9IDM0MDY7XG4gIHZhciBkY3RTaW4zID0gMjI3NjtcbiAgdmFyIGRjdENvczYgPSAxNTY3O1xuICB2YXIgZGN0U2luNiA9IDM3ODQ7XG4gIHZhciBkY3RTcXJ0MiA9IDU3OTM7XG4gIHZhciBkY3RTcXJ0MWQyID0gMjg5NjtcblxuICBmdW5jdGlvbiBKcGVnSW1hZ2Uoe1xuICAgIGRlY29kZVRyYW5zZm9ybSA9IG51bGwsXG4gICAgY29sb3JUcmFuc2Zvcm0gPSAtMVxuICB9ID0ge30pIHtcbiAgICB0aGlzLl9kZWNvZGVUcmFuc2Zvcm0gPSBkZWNvZGVUcmFuc2Zvcm07XG4gICAgdGhpcy5fY29sb3JUcmFuc2Zvcm0gPSBjb2xvclRyYW5zZm9ybTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLCB2YWx1ZXMpIHtcbiAgICB2YXIgayA9IDAsXG4gICAgICAgIGNvZGUgPSBbXSxcbiAgICAgICAgaSxcbiAgICAgICAgaixcbiAgICAgICAgbGVuZ3RoID0gMTY7XG5cbiAgICB3aGlsZSAobGVuZ3RoID4gMCAmJiAhY29kZUxlbmd0aHNbbGVuZ3RoIC0gMV0pIHtcbiAgICAgIGxlbmd0aC0tO1xuICAgIH1cblxuICAgIGNvZGUucHVzaCh7XG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgICBpbmRleDogMFxuICAgIH0pO1xuICAgIHZhciBwID0gY29kZVswXSxcbiAgICAgICAgcTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGVMZW5ndGhzW2ldOyBqKyspIHtcbiAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSB2YWx1ZXNba107XG5cbiAgICAgICAgd2hpbGUgKHAuaW5kZXggPiAwKSB7XG4gICAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLmluZGV4Kys7XG4gICAgICAgIGNvZGUucHVzaChwKTtcblxuICAgICAgICB3aGlsZSAoY29kZS5sZW5ndGggPD0gaSkge1xuICAgICAgICAgIGNvZGUucHVzaChxID0ge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gcS5jaGlsZHJlbjtcbiAgICAgICAgICBwID0gcTtcbiAgICAgICAgfVxuXG4gICAgICAgIGsrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGkgKyAxIDwgbGVuZ3RoKSB7XG4gICAgICAgIGNvZGUucHVzaChxID0ge1xuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICBpbmRleDogMFxuICAgICAgICB9KTtcbiAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW47XG4gICAgICAgIHAgPSBxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlWzBdLmNoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCByb3csIGNvbCkge1xuICAgIHJldHVybiA2NCAqICgoY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgKyAxKSAqIHJvdyArIGNvbCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlUHJldiwgc3VjY2Vzc2l2ZSwgcGFyc2VETkxNYXJrZXIgPSBmYWxzZSkge1xuICAgIHZhciBtY3VzUGVyTGluZSA9IGZyYW1lLm1jdXNQZXJMaW5lO1xuICAgIHZhciBwcm9ncmVzc2l2ZSA9IGZyYW1lLnByb2dyZXNzaXZlO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgIGxldCBiaXRzRGF0YSA9IDAsXG4gICAgICAgIGJpdHNDb3VudCA9IDA7XG5cbiAgICBmdW5jdGlvbiByZWFkQml0KCkge1xuICAgICAgaWYgKGJpdHNDb3VudCA+IDApIHtcbiAgICAgICAgYml0c0NvdW50LS07XG4gICAgICAgIHJldHVybiBiaXRzRGF0YSA+PiBiaXRzQ291bnQgJiAxO1xuICAgICAgfVxuXG4gICAgICBiaXRzRGF0YSA9IGRhdGFbb2Zmc2V0KytdO1xuXG4gICAgICBpZiAoYml0c0RhdGEgPT09IDB4ZmYpIHtcbiAgICAgICAgdmFyIG5leHRCeXRlID0gZGF0YVtvZmZzZXQrK107XG5cbiAgICAgICAgaWYgKG5leHRCeXRlKSB7XG4gICAgICAgICAgaWYgKG5leHRCeXRlID09PSAweGRjICYmIHBhcnNlRE5MTWFya2VyKSB7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGNvbnN0IHNjYW5MaW5lcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgICAgICAgIGlmIChzY2FuTGluZXMgPiAwICYmIHNjYW5MaW5lcyAhPT0gZnJhbWUuc2NhbkxpbmVzKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEROTCBtYXJrZXIgKDB4RkZEQykgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGFcIiwgc2NhbkxpbmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRCeXRlID09PSAweGQ5KSB7XG4gICAgICAgICAgICBpZiAocGFyc2VETkxNYXJrZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF5YmVTY2FuTGluZXMgPSBibG9ja1JvdyAqIChmcmFtZS5wcmVjaXNpb24gPT09IDggPyA4IDogMCk7XG5cbiAgICAgICAgICAgICAgaWYgKG1heWJlU2NhbkxpbmVzID4gMCAmJiBNYXRoLnJvdW5kKGZyYW1lLnNjYW5MaW5lcyAvIG1heWJlU2NhbkxpbmVzKSA+PSAxMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIFwiICsgXCJwb3NzaWJseSBjYXVzZWQgYnkgaW5jb3JyZWN0IGBzY2FuTGluZXNgIHBhcmFtZXRlclwiLCBtYXliZVNjYW5MaW5lcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVPSU1hcmtlckVycm9yKFwiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKGB1bmV4cGVjdGVkIG1hcmtlciAkeyhiaXRzRGF0YSA8PCA4IHwgbmV4dEJ5dGUpLnRvU3RyaW5nKDE2KX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBiaXRzQ291bnQgPSA3O1xuICAgICAgcmV0dXJuIGJpdHNEYXRhID4+PiA3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4odHJlZSkge1xuICAgICAgdmFyIG5vZGUgPSB0cmVlO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBub2RlID0gbm9kZVtyZWFkQml0KCldO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIG5vZGUpIHtcbiAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkge1xuICAgICAgdmFyIG4gPSAwO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoID4gMCkge1xuICAgICAgICBuID0gbiA8PCAxIHwgcmVhZEJpdCgpO1xuICAgICAgICBsZW5ndGgtLTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChsZW5ndGgpIHtcbiAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCaXQoKSA9PT0gMSA/IDEgOiAtMTtcbiAgICAgIH1cblxuICAgICAgdmFyIG4gPSByZWNlaXZlKGxlbmd0aCk7XG5cbiAgICAgIGlmIChuID49IDEgPDwgbGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG4gKyAoLTEgPDwgbGVuZ3RoKSArIDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgICAgdmFyIHQgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyk7XG4gICAgICB2YXIgZGlmZiA9IHQgPT09IDAgPyAwIDogcmVjZWl2ZUFuZEV4dGVuZCh0KTtcbiAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICAgIHZhciBrID0gMTtcblxuICAgICAgd2hpbGUgKGsgPCA2NCkge1xuICAgICAgICB2YXIgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7XG4gICAgICAgIHZhciBzID0gcnMgJiAxNSxcbiAgICAgICAgICAgIHIgPSBycyA+PiA0O1xuXG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayArPSAxNjtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGsgKz0gcjtcbiAgICAgICAgdmFyIHogPSBkY3RaaWdaYWdba107XG4gICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXQgKyB6XSA9IHJlY2VpdmVBbmRFeHRlbmQocyk7XG4gICAgICAgIGsrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVEQ0ZpcnN0KGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICAgIHZhciB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgICAgdmFyIGRpZmYgPSB0ID09PSAwID8gMCA6IHJlY2VpdmVBbmRFeHRlbmQodCkgPDwgc3VjY2Vzc2l2ZTtcbiAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldF0gfD0gcmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmU7XG4gICAgfVxuXG4gICAgdmFyIGVvYnJ1biA9IDA7XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICAgIGlmIChlb2JydW4gPiAwKSB7XG4gICAgICAgIGVvYnJ1bi0tO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBrID0gc3BlY3RyYWxTdGFydCxcbiAgICAgICAgICBlID0gc3BlY3RyYWxFbmQ7XG5cbiAgICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgICAgdmFyIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICB2YXIgcyA9IHJzICYgMTUsXG4gICAgICAgICAgICByID0gcnMgPj4gNDtcblxuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICAgIGVvYnJ1biA9IHJlY2VpdmUocikgKyAoMSA8PCByKSAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBrICs9IDE2O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgayArPSByO1xuICAgICAgICB2YXIgeiA9IGRjdFppZ1phZ1trXTtcbiAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKSAqICgxIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMCxcbiAgICAgICAgc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlO1xuXG4gICAgZnVuY3Rpb24gZGVjb2RlQUNTdWNjZXNzaXZlKGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICAgIHZhciBrID0gc3BlY3RyYWxTdGFydDtcbiAgICAgIHZhciBlID0gc3BlY3RyYWxFbmQ7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICB2YXIgcztcbiAgICAgIHZhciBycztcblxuICAgICAgd2hpbGUgKGsgPD0gZSkge1xuICAgICAgICBjb25zdCBvZmZzZXRaID0gYmxvY2tPZmZzZXQgKyBkY3RaaWdaYWdba107XG4gICAgICAgIGNvbnN0IHNpZ24gPSBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdIDwgMCA/IC0xIDogMTtcblxuICAgICAgICBzd2l0Y2ggKHN1Y2Nlc3NpdmVBQ1N0YXRlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7XG4gICAgICAgICAgICBzID0gcnMgJiAxNTtcbiAgICAgICAgICAgIHIgPSBycyA+PiA0O1xuXG4gICAgICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgICBpZiAociA8IDE1KSB7XG4gICAgICAgICAgICAgICAgZW9icnVuID0gcmVjZWl2ZShyKSArICgxIDw8IHIpO1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByID0gMTY7XG4gICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocyAhPT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJpbnZhbGlkIEFDbiBlbmNvZGluZ1wiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA9IHJlY2VpdmVBbmRFeHRlbmQocyk7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gciA/IDIgOiAzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgci0tO1xuXG4gICAgICAgICAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSBzdWNjZXNzaXZlQUNTdGF0ZSA9PT0gMiA/IDMgOiAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0pIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSArPSBzaWduICogKHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gPSBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPDwgc3VjY2Vzc2l2ZTtcbiAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaysrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3VjY2Vzc2l2ZUFDU3RhdGUgPT09IDQpIHtcbiAgICAgICAgZW9icnVuLS07XG5cbiAgICAgICAgaWYgKGVvYnJ1biA9PT0gMCkge1xuICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBibG9ja1JvdyA9IDA7XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGUsIG1jdSwgcm93LCBjb2wpIHtcbiAgICAgIHZhciBtY3VSb3cgPSBtY3UgLyBtY3VzUGVyTGluZSB8IDA7XG4gICAgICB2YXIgbWN1Q29sID0gbWN1ICUgbWN1c1BlckxpbmU7XG4gICAgICBibG9ja1JvdyA9IG1jdVJvdyAqIGNvbXBvbmVudC52ICsgcm93O1xuICAgICAgdmFyIGJsb2NrQ29sID0gbWN1Q29sICogY29tcG9uZW50LmggKyBjb2w7XG4gICAgICBjb25zdCBibG9ja09mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTtcbiAgICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZSwgbWN1KSB7XG4gICAgICBibG9ja1JvdyA9IG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lIHwgMDtcbiAgICAgIHZhciBibG9ja0NvbCA9IG1jdSAlIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lO1xuICAgICAgY29uc3QgYmxvY2tPZmZzZXQgPSBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIGJsb2NrUm93LCBibG9ja0NvbCk7XG4gICAgICBkZWNvZGUoY29tcG9uZW50LCBibG9ja09mZnNldCk7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudHNMZW5ndGggPSBjb21wb25lbnRzLmxlbmd0aDtcbiAgICB2YXIgY29tcG9uZW50LCBpLCBqLCBrLCBuO1xuICAgIHZhciBkZWNvZGVGbjtcblxuICAgIGlmIChwcm9ncmVzc2l2ZSkge1xuICAgICAgaWYgKHNwZWN0cmFsU3RhcnQgPT09IDApIHtcbiAgICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZURDRmlyc3QgOiBkZWNvZGVEQ1N1Y2Nlc3NpdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlQUNGaXJzdCA6IGRlY29kZUFDU3VjY2Vzc2l2ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb2RlRm4gPSBkZWNvZGVCYXNlbGluZTtcbiAgICB9XG5cbiAgICB2YXIgbWN1ID0gMCxcbiAgICAgICAgZmlsZU1hcmtlcjtcbiAgICB2YXIgbWN1RXhwZWN0ZWQ7XG5cbiAgICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgbWN1RXhwZWN0ZWQgPSBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckxpbmUgKiBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckNvbHVtbjtcbiAgICB9IGVsc2Uge1xuICAgICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XG4gICAgfVxuXG4gICAgdmFyIGgsIHY7XG5cbiAgICB3aGlsZSAobWN1IDw9IG1jdUV4cGVjdGVkKSB7XG4gICAgICB2YXIgbWN1VG9SZWFkID0gcmVzZXRJbnRlcnZhbCA/IE1hdGgubWluKG1jdUV4cGVjdGVkIC0gbWN1LCByZXNldEludGVydmFsKSA6IG1jdUV4cGVjdGVkO1xuXG4gICAgICBpZiAobWN1VG9SZWFkID4gMCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29tcG9uZW50c1tpXS5wcmVkID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVvYnJ1biA9IDA7XG5cbiAgICAgICAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzWzBdO1xuXG4gICAgICAgICAgZm9yIChuID0gMDsgbiA8IG1jdVRvUmVhZDsgbisrKSB7XG4gICAgICAgICAgICBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZUZuLCBtY3UpO1xuICAgICAgICAgICAgbWN1Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBtY3VUb1JlYWQ7IG4rKykge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgICBoID0gY29tcG9uZW50Lmg7XG4gICAgICAgICAgICAgIHYgPSBjb21wb25lbnQudjtcblxuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdjsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgZGVjb2RlTWN1KGNvbXBvbmVudCwgZGVjb2RlRm4sIG1jdSwgaiwgayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1jdSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBiaXRzQ291bnQgPSAwO1xuICAgICAgZmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQpO1xuXG4gICAgICBpZiAoIWZpbGVNYXJrZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgY29uc3QgcGFydGlhbE1zZyA9IG1jdVRvUmVhZCA+IDAgPyBcInVuZXhwZWN0ZWRcIiA6IFwiZXhjZXNzaXZlXCI7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgZGVjb2RlU2NhbiAtICR7cGFydGlhbE1zZ30gTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAke2ZpbGVNYXJrZXIuaW52YWxpZH1gKTtcbiAgICAgICAgb2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlTWFya2VyLm1hcmtlciA+PSAweGZmZDAgJiYgZmlsZU1hcmtlci5tYXJrZXIgPD0gMHhmZmQ3KSB7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0T2Zmc2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgYmxvY2tCdWZmZXJPZmZzZXQsIHApIHtcbiAgICB2YXIgcXQgPSBjb21wb25lbnQucXVhbnRpemF0aW9uVGFibGUsXG4gICAgICAgIGJsb2NrRGF0YSA9IGNvbXBvbmVudC5ibG9ja0RhdGE7XG4gICAgdmFyIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NztcbiAgICB2YXIgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3O1xuICAgIHZhciB0O1xuXG4gICAgaWYgKCFxdCkge1xuICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIm1pc3NpbmcgcmVxdWlyZWQgUXVhbnRpemF0aW9uIFRhYmxlLlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCA2NDsgcm93ICs9IDgpIHtcbiAgICAgIHAwID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93XTtcbiAgICAgIHAxID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMV07XG4gICAgICBwMiA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDJdO1xuICAgICAgcDMgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAzXTtcbiAgICAgIHA0ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNF07XG4gICAgICBwNSA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDVdO1xuICAgICAgcDYgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA2XTtcbiAgICAgIHA3ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgN107XG4gICAgICBwMCAqPSBxdFtyb3ddO1xuXG4gICAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgICB0ID0gZGN0U3FydDIgKiBwMCArIDUxMiA+PiAxMDtcbiAgICAgICAgcFtyb3ddID0gdDtcbiAgICAgICAgcFtyb3cgKyAxXSA9IHQ7XG4gICAgICAgIHBbcm93ICsgMl0gPSB0O1xuICAgICAgICBwW3JvdyArIDNdID0gdDtcbiAgICAgICAgcFtyb3cgKyA0XSA9IHQ7XG4gICAgICAgIHBbcm93ICsgNV0gPSB0O1xuICAgICAgICBwW3JvdyArIDZdID0gdDtcbiAgICAgICAgcFtyb3cgKyA3XSA9IHQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwMSAqPSBxdFtyb3cgKyAxXTtcbiAgICAgIHAyICo9IHF0W3JvdyArIDJdO1xuICAgICAgcDMgKj0gcXRbcm93ICsgM107XG4gICAgICBwNCAqPSBxdFtyb3cgKyA0XTtcbiAgICAgIHA1ICo9IHF0W3JvdyArIDVdO1xuICAgICAgcDYgKj0gcXRbcm93ICsgNl07XG4gICAgICBwNyAqPSBxdFtyb3cgKyA3XTtcbiAgICAgIHYwID0gZGN0U3FydDIgKiBwMCArIDEyOCA+PiA4O1xuICAgICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMTI4ID4+IDg7XG4gICAgICB2MiA9IHAyO1xuICAgICAgdjMgPSBwNjtcbiAgICAgIHY0ID0gZGN0U3FydDFkMiAqIChwMSAtIHA3KSArIDEyOCA+PiA4O1xuICAgICAgdjcgPSBkY3RTcXJ0MWQyICogKHAxICsgcDcpICsgMTI4ID4+IDg7XG4gICAgICB2NSA9IHAzIDw8IDQ7XG4gICAgICB2NiA9IHA1IDw8IDQ7XG4gICAgICB2MCA9IHYwICsgdjEgKyAxID4+IDE7XG4gICAgICB2MSA9IHYwIC0gdjE7XG4gICAgICB0ID0gdjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMTI4ID4+IDg7XG4gICAgICB2MiA9IHYyICogZGN0Q29zNiAtIHYzICogZGN0U2luNiArIDEyOCA+PiA4O1xuICAgICAgdjMgPSB0O1xuICAgICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgICAgdjYgPSB2NCAtIHY2O1xuICAgICAgdjcgPSB2NyArIHY1ICsgMSA+PiAxO1xuICAgICAgdjUgPSB2NyAtIHY1O1xuICAgICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgICAgdjMgPSB2MCAtIHYzO1xuICAgICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgICAgdjIgPSB2MSAtIHYyO1xuICAgICAgdCA9IHY0ICogZGN0U2luMyArIHY3ICogZGN0Q29zMyArIDIwNDggPj4gMTI7XG4gICAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgICB2NyA9IHQ7XG4gICAgICB0ID0gdjUgKiBkY3RTaW4xICsgdjYgKiBkY3RDb3MxICsgMjA0OCA+PiAxMjtcbiAgICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICAgIHY2ID0gdDtcbiAgICAgIHBbcm93XSA9IHYwICsgdjc7XG4gICAgICBwW3JvdyArIDddID0gdjAgLSB2NztcbiAgICAgIHBbcm93ICsgMV0gPSB2MSArIHY2O1xuICAgICAgcFtyb3cgKyA2XSA9IHYxIC0gdjY7XG4gICAgICBwW3JvdyArIDJdID0gdjIgKyB2NTtcbiAgICAgIHBbcm93ICsgNV0gPSB2MiAtIHY1O1xuICAgICAgcFtyb3cgKyAzXSA9IHYzICsgdjQ7XG4gICAgICBwW3JvdyArIDRdID0gdjMgLSB2NDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCA4OyArK2NvbCkge1xuICAgICAgcDAgPSBwW2NvbF07XG4gICAgICBwMSA9IHBbY29sICsgOF07XG4gICAgICBwMiA9IHBbY29sICsgMTZdO1xuICAgICAgcDMgPSBwW2NvbCArIDI0XTtcbiAgICAgIHA0ID0gcFtjb2wgKyAzMl07XG4gICAgICBwNSA9IHBbY29sICsgNDBdO1xuICAgICAgcDYgPSBwW2NvbCArIDQ4XTtcbiAgICAgIHA3ID0gcFtjb2wgKyA1Nl07XG5cbiAgICAgIGlmICgocDEgfCBwMiB8IHAzIHwgcDQgfCBwNSB8IHA2IHwgcDcpID09PSAwKSB7XG4gICAgICAgIHQgPSBkY3RTcXJ0MiAqIHAwICsgODE5MiA+PiAxNDtcblxuICAgICAgICBpZiAodCA8IC0yMDQwKSB7XG4gICAgICAgICAgdCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodCA+PSAyMDI0KSB7XG4gICAgICAgICAgdCA9IDI1NTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ID0gdCArIDIwNTYgPj4gNDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbF0gPSB0O1xuICAgICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA4XSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDE2XSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDI0XSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDMyXSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDQwXSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDQ4XSA9IHQ7XG4gICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDU2XSA9IHQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMjA0OCA+PiAxMjtcbiAgICAgIHYyID0gcDI7XG4gICAgICB2MyA9IHA2O1xuICAgICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMjA0OCA+PiAxMjtcbiAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDIwNDggPj4gMTI7XG4gICAgICB2NSA9IHAzO1xuICAgICAgdjYgPSBwNTtcbiAgICAgIHYwID0gKHYwICsgdjEgKyAxID4+IDEpICsgNDExMjtcbiAgICAgIHYxID0gdjAgLSB2MTtcbiAgICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAyMDQ4ID4+IDEyO1xuICAgICAgdjMgPSB0O1xuICAgICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgICAgdjYgPSB2NCAtIHY2O1xuICAgICAgdjcgPSB2NyArIHY1ICsgMSA+PiAxO1xuICAgICAgdjUgPSB2NyAtIHY1O1xuICAgICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgICAgdjMgPSB2MCAtIHYzO1xuICAgICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgICAgdjIgPSB2MSAtIHYyO1xuICAgICAgdCA9IHY0ICogZGN0U2luMyArIHY3ICogZGN0Q29zMyArIDIwNDggPj4gMTI7XG4gICAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgICB2NyA9IHQ7XG4gICAgICB0ID0gdjUgKiBkY3RTaW4xICsgdjYgKiBkY3RDb3MxICsgMjA0OCA+PiAxMjtcbiAgICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICAgIHY2ID0gdDtcbiAgICAgIHAwID0gdjAgKyB2NztcbiAgICAgIHA3ID0gdjAgLSB2NztcbiAgICAgIHAxID0gdjEgKyB2NjtcbiAgICAgIHA2ID0gdjEgLSB2NjtcbiAgICAgIHAyID0gdjIgKyB2NTtcbiAgICAgIHA1ID0gdjIgLSB2NTtcbiAgICAgIHAzID0gdjMgKyB2NDtcbiAgICAgIHA0ID0gdjMgLSB2NDtcblxuICAgICAgaWYgKHAwIDwgMTYpIHtcbiAgICAgICAgcDAgPSAwO1xuICAgICAgfSBlbHNlIGlmIChwMCA+PSA0MDgwKSB7XG4gICAgICAgIHAwID0gMjU1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcDAgPj49IDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwMSA8IDE2KSB7XG4gICAgICAgIHAxID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDEgPj0gNDA4MCkge1xuICAgICAgICBwMSA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAxID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBpZiAocDIgPCAxNikge1xuICAgICAgICBwMiA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHAyID49IDQwODApIHtcbiAgICAgICAgcDIgPSAyNTU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwMiA+Pj0gNDtcbiAgICAgIH1cblxuICAgICAgaWYgKHAzIDwgMTYpIHtcbiAgICAgICAgcDMgPSAwO1xuICAgICAgfSBlbHNlIGlmIChwMyA+PSA0MDgwKSB7XG4gICAgICAgIHAzID0gMjU1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcDMgPj49IDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwNCA8IDE2KSB7XG4gICAgICAgIHA0ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDQgPj0gNDA4MCkge1xuICAgICAgICBwNCA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHA0ID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBpZiAocDUgPCAxNikge1xuICAgICAgICBwNSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHA1ID49IDQwODApIHtcbiAgICAgICAgcDUgPSAyNTU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwNSA+Pj0gNDtcbiAgICAgIH1cblxuICAgICAgaWYgKHA2IDwgMTYpIHtcbiAgICAgICAgcDYgPSAwO1xuICAgICAgfSBlbHNlIGlmIChwNiA+PSA0MDgwKSB7XG4gICAgICAgIHA2ID0gMjU1O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcDYgPj49IDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwNyA8IDE2KSB7XG4gICAgICAgIHA3ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocDcgPj0gNDA4MCkge1xuICAgICAgICBwNyA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHA3ID4+PSA0O1xuICAgICAgfVxuXG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gcDA7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA4XSA9IHAxO1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gcDI7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSBwMztcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDMyXSA9IHA0O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gcDU7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSBwNjtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDU2XSA9IHA3O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50RGF0YShmcmFtZSwgY29tcG9uZW50KSB7XG4gICAgdmFyIGJsb2Nrc1BlckxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICB2YXIgYmxvY2tzUGVyQ29sdW1uID0gY29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbjtcbiAgICB2YXIgY29tcHV0YXRpb25CdWZmZXIgPSBuZXcgSW50MTZBcnJheSg2NCk7XG5cbiAgICBmb3IgKHZhciBibG9ja1JvdyA9IDA7IGJsb2NrUm93IDwgYmxvY2tzUGVyQ29sdW1uOyBibG9ja1JvdysrKSB7XG4gICAgICBmb3IgKHZhciBibG9ja0NvbCA9IDA7IGJsb2NrQ29sIDwgYmxvY2tzUGVyTGluZTsgYmxvY2tDb2wrKykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgICBxdWFudGl6ZUFuZEludmVyc2UoY29tcG9uZW50LCBvZmZzZXQsIGNvbXB1dGF0aW9uQnVmZmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50LmJsb2NrRGF0YTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zLCBzdGFydFBvcyA9IGN1cnJlbnRQb3MpIHtcbiAgICBjb25zdCBtYXhQb3MgPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1BvcyA9IHN0YXJ0UG9zIDwgY3VycmVudFBvcyA/IHN0YXJ0UG9zIDogY3VycmVudFBvcztcblxuICAgIGlmIChjdXJyZW50UG9zID49IG1heFBvcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnRNYXJrZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgY3VycmVudFBvcyk7XG5cbiAgICBpZiAoY3VycmVudE1hcmtlciA+PSAweGZmYzAgJiYgY3VycmVudE1hcmtlciA8PSAweGZmZmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludmFsaWQ6IG51bGwsXG4gICAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlcixcbiAgICAgICAgb2Zmc2V0OiBjdXJyZW50UG9zXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBuZXdNYXJrZXIgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgbmV3UG9zKTtcblxuICAgIHdoaWxlICghKG5ld01hcmtlciA+PSAweGZmYzAgJiYgbmV3TWFya2VyIDw9IDB4ZmZmZSkpIHtcbiAgICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5ld01hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBuZXdQb3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnZhbGlkOiBjdXJyZW50TWFya2VyLnRvU3RyaW5nKDE2KSxcbiAgICAgIG1hcmtlcjogbmV3TWFya2VyLFxuICAgICAgb2Zmc2V0OiBuZXdQb3NcbiAgICB9O1xuICB9XG5cbiAgSnBlZ0ltYWdlLnByb3RvdHlwZSA9IHtcbiAgICBwYXJzZShkYXRhLCB7XG4gICAgICBkbmxTY2FuTGluZXMgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBmdW5jdGlvbiByZWFkRGF0YUJsb2NrKCkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgIGxldCBlbmRPZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGggLSAyO1xuICAgICAgICB2YXIgZmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBlbmRPZmZzZXQsIG9mZnNldCk7XG5cbiAgICAgICAgaWYgKGZpbGVNYXJrZXIgJiYgZmlsZU1hcmtlci5pbnZhbGlkKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiBcIiArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgICAgZW5kT2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXJyYXkgPSBkYXRhLnN1YmFycmF5KG9mZnNldCwgZW5kT2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSkge1xuICAgICAgICB2YXIgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7XG4gICAgICAgIHZhciBtY3VzUGVyQ29sdW1uID0gTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDggLyBmcmFtZS5tYXhWKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2ldO1xuICAgICAgICAgIHZhciBibG9ja3NQZXJMaW5lID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zYW1wbGVzUGVyTGluZSAvIDgpICogY29tcG9uZW50LmggLyBmcmFtZS5tYXhIKTtcbiAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4KSAqIGNvbXBvbmVudC52IC8gZnJhbWUubWF4Vik7XG4gICAgICAgICAgdmFyIGJsb2Nrc1BlckxpbmVGb3JNY3UgPSBtY3VzUGVyTGluZSAqIGNvbXBvbmVudC5oO1xuICAgICAgICAgIHZhciBibG9ja3NQZXJDb2x1bW5Gb3JNY3UgPSBtY3VzUGVyQ29sdW1uICogY29tcG9uZW50LnY7XG4gICAgICAgICAgdmFyIGJsb2Nrc0J1ZmZlclNpemUgPSA2NCAqIGJsb2Nrc1BlckNvbHVtbkZvck1jdSAqIChibG9ja3NQZXJMaW5lRm9yTWN1ICsgMSk7XG4gICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YSA9IG5ldyBJbnQxNkFycmF5KGJsb2Nrc0J1ZmZlclNpemUpO1xuICAgICAgICAgIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lID0gYmxvY2tzUGVyTGluZTtcbiAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uID0gYmxvY2tzUGVyQ29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJhbWUubWN1c1BlckxpbmUgPSBtY3VzUGVyTGluZTtcbiAgICAgICAgZnJhbWUubWN1c1BlckNvbHVtbiA9IG1jdXNQZXJDb2x1bW47XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgdmFyIGpmaWYgPSBudWxsO1xuICAgICAgdmFyIGFkb2JlID0gbnVsbDtcbiAgICAgIHZhciBmcmFtZSwgcmVzZXRJbnRlcnZhbDtcbiAgICAgIGxldCBudW1TT1NNYXJrZXJzID0gMDtcbiAgICAgIHZhciBxdWFudGl6YXRpb25UYWJsZXMgPSBbXTtcbiAgICAgIHZhciBodWZmbWFuVGFibGVzQUMgPSBbXSxcbiAgICAgICAgICBodWZmbWFuVGFibGVzREMgPSBbXTtcbiAgICAgIGxldCBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgaWYgKGZpbGVNYXJrZXIgIT09IDB4ZmZkOCkge1xuICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiU09JIG5vdCBmb3VuZFwiKTtcbiAgICAgIH1cblxuICAgICAgZmlsZU1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgIG1hcmtlckxvb3A6IHdoaWxlIChmaWxlTWFya2VyICE9PSAweGZmZDkpIHtcbiAgICAgICAgdmFyIGksIGosIGw7XG5cbiAgICAgICAgc3dpdGNoIChmaWxlTWFya2VyKSB7XG4gICAgICAgICAgY2FzZSAweGZmZTA6XG4gICAgICAgICAgY2FzZSAweGZmZTE6XG4gICAgICAgICAgY2FzZSAweGZmZTI6XG4gICAgICAgICAgY2FzZSAweGZmZTM6XG4gICAgICAgICAgY2FzZSAweGZmZTQ6XG4gICAgICAgICAgY2FzZSAweGZmZTU6XG4gICAgICAgICAgY2FzZSAweGZmZTY6XG4gICAgICAgICAgY2FzZSAweGZmZTc6XG4gICAgICAgICAgY2FzZSAweGZmZTg6XG4gICAgICAgICAgY2FzZSAweGZmZTk6XG4gICAgICAgICAgY2FzZSAweGZmZWE6XG4gICAgICAgICAgY2FzZSAweGZmZWI6XG4gICAgICAgICAgY2FzZSAweGZmZWM6XG4gICAgICAgICAgY2FzZSAweGZmZWQ6XG4gICAgICAgICAgY2FzZSAweGZmZWU6XG4gICAgICAgICAgY2FzZSAweGZmZWY6XG4gICAgICAgICAgY2FzZSAweGZmZmU6XG4gICAgICAgICAgICB2YXIgYXBwRGF0YSA9IHJlYWREYXRhQmxvY2soKTtcblxuICAgICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlMCkge1xuICAgICAgICAgICAgICBpZiAoYXBwRGF0YVswXSA9PT0gMHg0YSAmJiBhcHBEYXRhWzFdID09PSAweDQ2ICYmIGFwcERhdGFbMl0gPT09IDB4NDkgJiYgYXBwRGF0YVszXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzRdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgamZpZiA9IHtcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgICAgbWFqb3I6IGFwcERhdGFbNV0sXG4gICAgICAgICAgICAgICAgICAgIG1pbm9yOiBhcHBEYXRhWzZdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZGVuc2l0eVVuaXRzOiBhcHBEYXRhWzddLFxuICAgICAgICAgICAgICAgICAgeERlbnNpdHk6IGFwcERhdGFbOF0gPDwgOCB8IGFwcERhdGFbOV0sXG4gICAgICAgICAgICAgICAgICB5RGVuc2l0eTogYXBwRGF0YVsxMF0gPDwgOCB8IGFwcERhdGFbMTFdLFxuICAgICAgICAgICAgICAgICAgdGh1bWJXaWR0aDogYXBwRGF0YVsxMl0sXG4gICAgICAgICAgICAgICAgICB0aHVtYkhlaWdodDogYXBwRGF0YVsxM10sXG4gICAgICAgICAgICAgICAgICB0aHVtYkRhdGE6IGFwcERhdGEuc3ViYXJyYXkoMTQsIDE0ICsgMyAqIGFwcERhdGFbMTJdICogYXBwRGF0YVsxM10pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhmZmVlKSB7XG4gICAgICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDQxICYmIGFwcERhdGFbMV0gPT09IDB4NjQgJiYgYXBwRGF0YVsyXSA9PT0gMHg2ZiAmJiBhcHBEYXRhWzNdID09PSAweDYyICYmIGFwcERhdGFbNF0gPT09IDB4NjUpIHtcbiAgICAgICAgICAgICAgICBhZG9iZSA9IHtcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IGFwcERhdGFbNV0gPDwgOCB8IGFwcERhdGFbNl0sXG4gICAgICAgICAgICAgICAgICBmbGFnczA6IGFwcERhdGFbN10gPDwgOCB8IGFwcERhdGFbOF0sXG4gICAgICAgICAgICAgICAgICBmbGFnczE6IGFwcERhdGFbOV0gPDwgOCB8IGFwcERhdGFbMTBdLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtQ29kZTogYXBwRGF0YVsxMV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZGI6XG4gICAgICAgICAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZXNMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlc0VuZCA9IHF1YW50aXphdGlvblRhYmxlc0xlbmd0aCArIG9mZnNldCAtIDI7XG4gICAgICAgICAgICB2YXIgejtcblxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHF1YW50aXphdGlvblRhYmxlc0VuZCkge1xuICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVTcGVjID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgIHZhciB0YWJsZURhdGEgPSBuZXcgVWludDE2QXJyYXkoNjQpO1xuXG4gICAgICAgICAgICAgIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICB6ID0gZGN0WmlnWmFnW2pdO1xuICAgICAgICAgICAgICAgICAgdGFibGVEYXRhW3pdID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHF1YW50aXphdGlvblRhYmxlU3BlYyA+PiA0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIHogPSBkY3RaaWdaYWdbal07XG4gICAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiRFFUIC0gaW52YWxpZCB0YWJsZSBzcGVjXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcXVhbnRpemF0aW9uVGFibGVzW3F1YW50aXphdGlvblRhYmxlU3BlYyAmIDE1XSA9IHRhYmxlRGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmZjMDpcbiAgICAgICAgICBjYXNlIDB4ZmZjMTpcbiAgICAgICAgICBjYXNlIDB4ZmZjMjpcbiAgICAgICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiT25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGZyYW1lID0ge307XG4gICAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMTtcbiAgICAgICAgICAgIGZyYW1lLnByb2dyZXNzaXZlID0gZmlsZU1hcmtlciA9PT0gMHhmZmMyO1xuICAgICAgICAgICAgZnJhbWUucHJlY2lzaW9uID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICBjb25zdCBzb2ZTY2FuTGluZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgZnJhbWUuc2NhbkxpbmVzID0gZG5sU2NhbkxpbmVzIHx8IHNvZlNjYW5MaW5lcztcbiAgICAgICAgICAgIGZyYW1lLnNhbXBsZXNQZXJMaW5lID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkcyA9IHt9O1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IGRhdGFbb2Zmc2V0KytdLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudElkO1xuICAgICAgICAgICAgdmFyIG1heEggPSAwLFxuICAgICAgICAgICAgICAgIG1heFYgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50SWQgPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgIHZhciBoID0gZGF0YVtvZmZzZXQgKyAxXSA+PiA0O1xuICAgICAgICAgICAgICB2YXIgdiA9IGRhdGFbb2Zmc2V0ICsgMV0gJiAxNTtcblxuICAgICAgICAgICAgICBpZiAobWF4SCA8IGgpIHtcbiAgICAgICAgICAgICAgICBtYXhIID0gaDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChtYXhWIDwgdikge1xuICAgICAgICAgICAgICAgIG1heFYgPSB2O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIHFJZCA9IGRhdGFbb2Zmc2V0ICsgMl07XG4gICAgICAgICAgICAgIGwgPSBmcmFtZS5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGgsXG4gICAgICAgICAgICAgICAgdixcbiAgICAgICAgICAgICAgICBxdWFudGl6YXRpb25JZDogcUlkLFxuICAgICAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBmcmFtZS5jb21wb25lbnRJZHNbY29tcG9uZW50SWRdID0gbCAtIDE7XG4gICAgICAgICAgICAgIG9mZnNldCArPSAzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmcmFtZS5tYXhIID0gbWF4SDtcbiAgICAgICAgICAgIGZyYW1lLm1heFYgPSBtYXhWO1xuICAgICAgICAgICAgcHJlcGFyZUNvbXBvbmVudHMoZnJhbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmZjNDpcbiAgICAgICAgICAgIGNvbnN0IGh1ZmZtYW5MZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgaHVmZm1hbkxlbmd0aDspIHtcbiAgICAgICAgICAgICAgdmFyIGh1ZmZtYW5UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgdmFyIGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICB2YXIgY29kZUxlbmd0aFN1bSA9IDA7XG5cbiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyssIG9mZnNldCsrKSB7XG4gICAgICAgICAgICAgICAgY29kZUxlbmd0aFN1bSArPSBjb2RlTGVuZ3Roc1tqXSA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBodWZmbWFuVmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbmd0aFN1bSk7XG5cbiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGVMZW5ndGhTdW07IGorKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgICBodWZmbWFuVmFsdWVzW2pdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaSArPSAxNyArIGNvZGVMZW5ndGhTdW07XG4gICAgICAgICAgICAgIChodWZmbWFuVGFibGVTcGVjID4+IDQgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUMpW2h1ZmZtYW5UYWJsZVNwZWMgJiAxNV0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZGQ6XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIHJlc2V0SW50ZXJ2YWwgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmZkYTpcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlRE5MTWFya2VyID0gKytudW1TT1NNYXJrZXJzID09PSAxICYmICFkbmxTY2FuTGluZXM7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvcnNDb3VudCA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbXSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWxlY3RvcnNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgIHZhciBjb21wb25lbnRJbmRleCA9IGZyYW1lLmNvbXBvbmVudElkc1tpbmRleF07XG4gICAgICAgICAgICAgIGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbY29tcG9uZW50SW5kZXhdO1xuICAgICAgICAgICAgICBjb21wb25lbnQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgdmFyIHRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlREMgPSBodWZmbWFuVGFibGVzRENbdGFibGVTcGVjID4+IDRdO1xuICAgICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlQUMgPSBodWZmbWFuVGFibGVzQUNbdGFibGVTcGVjICYgMTVdO1xuICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNwZWN0cmFsU3RhcnQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIHZhciBzcGVjdHJhbEVuZCA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgdmFyIHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uID0gZGF0YVtvZmZzZXQrK107XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7XG4gICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLmApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgIGRubFNjYW5MaW5lczogZXguc2NhbkxpbmVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXggaW5zdGFuY2VvZiBFT0lNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5gKTtcbiAgICAgICAgICAgICAgICBicmVhayBtYXJrZXJMb29wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZGM6XG4gICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZmY6XG4gICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXRdICE9PSAweGZmKSB7XG4gICAgICAgICAgICAgIG9mZnNldC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBuZXh0RmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQgLSAyLCBvZmZzZXQgLSAzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRGaWxlTWFya2VyICYmIG5leHRGaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSnBlZ0ltYWdlLnBhcnNlIC0gdW5leHBlY3RlZCBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogXCIgKyBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBkYXRhLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSnBlZ0ltYWdlLnBhcnNlIC0gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSBkYXRhIFwiICsgXCJ3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS5cIik7XG4gICAgICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJKcGVnSW1hZ2UucGFyc2UgLSB1bmtub3duIG1hcmtlcjogXCIgKyBmaWxlTWFya2VyLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLndpZHRoID0gZnJhbWUuc2FtcGxlc1BlckxpbmU7XG4gICAgICB0aGlzLmhlaWdodCA9IGZyYW1lLnNjYW5MaW5lcztcbiAgICAgIHRoaXMuamZpZiA9IGpmaWY7XG4gICAgICB0aGlzLmFkb2JlID0gYWRvYmU7XG4gICAgICB0aGlzLmNvbXBvbmVudHMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tpXTtcbiAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlID0gcXVhbnRpemF0aW9uVGFibGVzW2NvbXBvbmVudC5xdWFudGl6YXRpb25JZF07XG5cbiAgICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlKSB7XG4gICAgICAgICAgY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlID0gcXVhbnRpemF0aW9uVGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IGNvbXBvbmVudC5pbmRleCxcbiAgICAgICAgICBvdXRwdXQ6IGJ1aWxkQ29tcG9uZW50RGF0YShmcmFtZSwgY29tcG9uZW50KSxcbiAgICAgICAgICBzY2FsZVg6IGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCxcbiAgICAgICAgICBzY2FsZVk6IGNvbXBvbmVudC52IC8gZnJhbWUubWF4VixcbiAgICAgICAgICBibG9ja3NQZXJMaW5lOiBjb21wb25lbnQuYmxvY2tzUGVyTGluZSxcbiAgICAgICAgICBibG9ja3NQZXJDb2x1bW46IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW5cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubnVtQ29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBfZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh3aWR0aCwgaGVpZ2h0LCBpc1NvdXJjZVBERiA9IGZhbHNlKSB7XG4gICAgICB2YXIgc2NhbGVYID0gdGhpcy53aWR0aCAvIHdpZHRoLFxuICAgICAgICAgIHNjYWxlWSA9IHRoaXMuaGVpZ2h0IC8gaGVpZ2h0O1xuICAgICAgdmFyIGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lO1xuICAgICAgdmFyIHgsIHksIGksIGosIGs7XG4gICAgICB2YXIgaW5kZXg7XG4gICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgIHZhciBvdXRwdXQ7XG4gICAgICB2YXIgbnVtQ29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7XG4gICAgICB2YXIgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcG9uZW50cztcbiAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFMZW5ndGgpO1xuICAgICAgdmFyIHhTY2FsZUJsb2NrT2Zmc2V0ID0gbmV3IFVpbnQzMkFycmF5KHdpZHRoKTtcbiAgICAgIHZhciBtYXNrM0xTQiA9IDB4ZmZmZmZmZjg7XG4gICAgICBsZXQgbGFzdENvbXBvbmVudFNjYWxlWDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bUNvbXBvbmVudHM7IGkrKykge1xuICAgICAgICBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudHNbaV07XG4gICAgICAgIGNvbXBvbmVudFNjYWxlWCA9IGNvbXBvbmVudC5zY2FsZVggKiBzY2FsZVg7XG4gICAgICAgIGNvbXBvbmVudFNjYWxlWSA9IGNvbXBvbmVudC5zY2FsZVkgKiBzY2FsZVk7XG4gICAgICAgIG9mZnNldCA9IGk7XG4gICAgICAgIG91dHB1dCA9IGNvbXBvbmVudC5vdXRwdXQ7XG4gICAgICAgIGJsb2Nrc1BlclNjYW5saW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgKyAxIDw8IDM7XG5cbiAgICAgICAgaWYgKGNvbXBvbmVudFNjYWxlWCAhPT0gbGFzdENvbXBvbmVudFNjYWxlWCkge1xuICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBqID0gMCB8IHggKiBjb21wb25lbnRTY2FsZVg7XG4gICAgICAgICAgICB4U2NhbGVCbG9ja09mZnNldFt4XSA9IChqICYgbWFzazNMU0IpIDw8IDMgfCBqICYgNztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0Q29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50U2NhbGVYO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgaiA9IDAgfCB5ICogY29tcG9uZW50U2NhbGVZO1xuICAgICAgICAgIGluZGV4ID0gYmxvY2tzUGVyU2NhbmxpbmUgKiAoaiAmIG1hc2szTFNCKSB8IChqICYgNykgPDwgMztcblxuICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07XG4gICAgICAgICAgICBvZmZzZXQgKz0gbnVtQ29tcG9uZW50cztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHRyYW5zZm9ybSA9IHRoaXMuX2RlY29kZVRyYW5zZm9ybTtcblxuICAgICAgaWYgKCFpc1NvdXJjZVBERiAmJiBudW1Db21wb25lbnRzID09PSA0ICYmICF0cmFuc2Zvcm0pIHtcbiAgICAgICAgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoWy0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTUsIC0yNTYsIDI1NV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOykge1xuICAgICAgICAgIGZvciAoaiA9IDAsIGsgPSAwOyBqIDwgbnVtQ29tcG9uZW50czsgaisrLCBpKyssIGsgKz0gMikge1xuICAgICAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldICogdHJhbnNmb3JtW2tdID4+IDgpICsgdHJhbnNmb3JtW2sgKyAxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcblxuICAgIGdldCBfaXNDb2xvckNvbnZlcnNpb25OZWVkZWQoKSB7XG4gICAgICBpZiAodGhpcy5hZG9iZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50c1swXS5pbmRleCA9PT0gMHg1MiAmJiB0aGlzLmNvbXBvbmVudHNbMV0uaW5kZXggPT09IDB4NDcgJiYgdGhpcy5jb21wb25lbnRzWzJdLmluZGV4ID09PSAweDQyKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBfY29udmVydFljY1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0WWNjVG9SZ2IoZGF0YSkge1xuICAgICAgdmFyIFksIENiLCBDcjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgWSA9IGRhdGFbaV07XG4gICAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICAgIGRhdGFbaV0gPSBZIC0gMTc5LjQ1NiArIDEuNDAyICogQ3I7XG4gICAgICAgIGRhdGFbaSArIDFdID0gWSArIDEzNS40NTkgLSAwLjM0NCAqIENiIC0gMC43MTQgKiBDcjtcbiAgICAgICAgZGF0YVtpICsgMl0gPSBZIC0gMjI2LjgxNiArIDEuNzcyICogQ2I7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG4gICAgX2NvbnZlcnRZY2NrVG9SZ2I6IGZ1bmN0aW9uIGNvbnZlcnRZY2NrVG9SZ2IoZGF0YSkge1xuICAgICAgdmFyIFksIENiLCBDciwgaztcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZGF0YS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICBZID0gZGF0YVtpXTtcbiAgICAgICAgQ2IgPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgQ3IgPSBkYXRhW2kgKyAyXTtcbiAgICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgICBkYXRhW29mZnNldCsrXSA9IC0xMjIuNjcxOTU0MDY4OTQgKyBDYiAqICgtNi42MDYzNTY2OTQyMDM2NGUtNSAqIENiICsgMC4wMDA0MzcxMzA0NzU5MjYyMzIgKiBDciAtIDUuNDA4MDYxMDA2NDU5OWUtNSAqIFkgKyAwLjAwMDQ4NDQ5Nzk3MTIwMjgxICogayAtIDAuMTU0MzYyMTUxODcxMTI2KSArIENyICogKC0wLjAwMDk1Nzk2NDM3ODQ0NTc3MyAqIENyICsgMC4wMDA4MTcwNzY5MTEzNDY2MjUgKiBZIC0gMC4wMDQ3NzI3MTQwNTQwODc0NyAqIGsgKyAxLjUzMzgwMjUzMjIxNzM0KSArIFkgKiAoMC4wMDA5NjEyNTAxODQxMzA2ODggKiBZIC0gMC4wMDI2NjI1NzMzMjI4MzkzMyAqIGsgKyAwLjQ4MzU3MDg4NDUxMjY1KSArIGsgKiAoLTAuMDAwMzM2MTk3MTc3NjE4Mzk0ICogayArIDAuNDg0NzkxNTYxNDkwNzc2KTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAxMDcuMjY4MDM5Mzk3NzI0ICsgQ2IgKiAoMi4xOTkyNzEwNDUyNTc0MWUtNSAqIENiIC0gMC4wMDA2NDA5OTIwMTgyOTc5NDUgKiBDciArIDAuMDAwNjU5Mzk3MDAxMjQ1NTc3ICogWSArIDAuMDAwNDI2MTA1NjUyOTM4ODM3ICogayAtIDAuMTc2NDkxNzkyNDYyODc1KSArIENyICogKC0wLjAwMDc3ODI2OTk0MTUxMzY4MyAqIENyICsgMC4wMDEzMDg3MjI2MTQwODI3NSAqIFkgKyAwLjAwMDc3MDQ4MjYzMTgwMTEzMiAqIGsgLSAwLjE1MTA1MTQ5Mjc3NTU2MikgKyBZICogKDAuMDAxMjY5MzUzNjgxMTQ4NDMgKiBZIC0gMC4wMDI2NTA5MDE4OTAxMDg5OCAqIGsgKyAwLjI1ODAyOTEwMjA2ODQ1KSArIGsgKiAoLTAuMDAwMzE4OTEzMTE3NTg4MzI4ICogayAtIDAuMjEzNzQyNDAwMzIzNjY1KTtcbiAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMjAuODEwMDEyNTQ2OTQ3ICsgQ2IgKiAoLTAuMDAwNTcwMTE1MTk2OTczNjc3ICogQ2IgLSAyLjYzNDA5MDUxMDA0NTg5ZS01ICogQ3IgKyAwLjAwMjA3NDEwODgxMTUwMTIgKiBZIC0gMC4wMDI4ODI2MDIzNjg1MzQ0MiAqIGsgKyAwLjgxNDI3Mjk2ODM1OTI5NSkgKyBDciAqICgtMS41MzQ5NjA1NzQ0MDk3NWUtNSAqIENyIC0gMC4wMDAxMzI2ODkwNDM5NjE0NDYgKiBZICsgMC4wMDA1NjA4MzM2OTEyNDI4MTIgKiBrIC0gMC4xOTUxNTIwMjc1MzQwNDkpICsgWSAqICgwLjAwMTc0NDE4MTMyOTI3NTgyICogWSAtIDAuMDAyNTUyNDMzMjE0MzkzNDcgKiBrICsgMC4xMTY5MzUwMjA0NjUxNDUpICsgayAqICgtMC4wMDAzNDM1MzE5OTY1MTA1NTUgKiBrICsgMC4yNDE2NTI2MDIzMjQwNyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gICAgfSxcbiAgICBfY29udmVydFljY2tUb0NteWs6IGZ1bmN0aW9uIGNvbnZlcnRZY2NrVG9DbXlrKGRhdGEpIHtcbiAgICAgIHZhciBZLCBDYiwgQ3I7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICBkYXRhW2ldID0gNDM0LjQ1NiAtIFkgLSAxLjQwMiAqIENyO1xuICAgICAgICBkYXRhW2kgKyAxXSA9IDExOS41NDEgLSBZICsgMC4zNDQgKiBDYiArIDAuNzE0ICogQ3I7XG4gICAgICAgIGRhdGFbaSArIDJdID0gNDgxLjgxNiAtIFkgLSAxLjc3MiAqIENiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIF9jb252ZXJ0Q215a1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0Q215a1RvUmdiKGRhdGEpIHtcbiAgICAgIHZhciBjLCBtLCB5LCBrO1xuICAgICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIGMgPSBkYXRhW2ldO1xuICAgICAgICBtID0gZGF0YVtpICsgMV07XG4gICAgICAgIHkgPSBkYXRhW2kgKyAyXTtcbiAgICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSArIGMgKiAoLTAuMDAwMDY3NDcxNDcwNzM2MDI0NDEgKiBjICsgMC4wMDA4Mzc5MjYyMTIxMDEzNzI3ICogbSArIDAuMDAwMjg5NDcxODE4ODY0MzI5NCAqIHkgKyAwLjAwMzI2NDIzMTA1NzUzNzgwNiAqIGsgLSAxLjExODU2MTE4NjcyMDM5MzcpICsgbSAqICgwLjAwMDAyNjM3NDEwNzYxNjA4OTQwNSAqIG0gLSAwLjAwMDA4NjI2OTQ5MTU4NjM4NTcyICogeSAtIDAuMDAwMjc0ODc2OTA2NzQ5OTQ5MSAqIGsgLSAwLjAyMTU1Njg4Nzk0OTc4OTY3KSArIHkgKiAoLTAuMDAwMDM4NzgwOTkyMTI4NjkzNjMgKiB5IC0gMC4wMDAzMjY3ODA4Mjc5NDg1Mjg2ICogayArIDAuMDY4Njc0MjIzODU5NTM0NSkgLSBrICogKDAuMDAwMzM2MTk3MTc3NjE4MzkzNyAqIGsgKyAwLjc0MzA2NTkxNTEzNDIyNTQpO1xuICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSArIGMgKiAoMC4wMDAxMzU5NjM3MjgxMzU4ODg0OCAqIGMgKyAwLjAwMDkyNDUzNzEzMjU3MzU4NSAqIG0gKyAwLjAwMDEwNTY3MzU5NjE4NjgzNTkzICogeSArIDAuMDAwNDc5MTg2NDY4NzQzNjUxMiAqIGsgLSAwLjMxMDk2ODk1ODc1MTU4NzUpICsgbSAqICgtMC4wMDAyMzU0NTM0NjEwODM3MDM0NCAqIG0gKyAwLjAwMDI3MDI4NDUyNTM1MzQ3MTQgKiB5ICsgMC4wMDIwMjAwMzA4OTc3MzA3MTU2ICogayAtIDAuNzQ4ODA1MjE2NzAxNTQ5NCkgKyB5ICogKDAuMDAwMDY4MzQ4MTU5OTgyMzU2NjIgKiB5ICsgMC4wMDAxNTE2ODQ1MjM2MzQ2MDk3MyAqIGsgLSAwLjA5NzUxOTI3Nzc0NzI4OTMzKSAtIGsgKiAoMC4wMDAzMTg5MTMxMTc1ODgzMjgxNCAqIGsgKyAwLjczNjQ4ODM4MDc3MzMxNjgpO1xuICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSArIGMgKiAoMC4wMDAwMTM1OTg2NTA0MTEzODUzMDcgKiBjICsgMC4wMDAxMjQyMzk1NjE3NTQ5MDg1MSAqIG0gKyAwLjAwMDQ3NTE5ODUwOTc1ODM1ODkgKiB5IC0gMC4wMDAwMDM2NzI5MzE3NDc2NjMwNDIyICogayAtIDAuMDU1NjIxODY5ODAyNjQwMzQpICsgbSAqICgwLjAwMDE2MTQxMzgwNTk4NzI0Njc2ICogbSArIDAuMDAwOTY5MjIzOTEzMDcyNTE4NiAqIHkgKyAwLjAwMDc3ODI2OTI0NTAwMzYyNTMgKiBrIC0gMC40NDAxNTIzMjM2NzUyNjQ2MykgKyB5ICogKDUuMDY4ODgyOTE0MDY4NzY5ZS03ICogeSArIDAuMDAxNzc3ODM2OTAxMTM3NTA3MSAqIGsgLSAwLjc1OTE0NTQ2NDk3NDk2MDkpIC0gayAqICgwLjAwMDM0MzUzMTk5NjUxMDU1NTMgKiBrICsgMC43MDYzNzcwMTg2MTYwMTQ0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEuc3ViYXJyYXkoMCwgb2Zmc2V0KTtcbiAgICB9LFxuXG4gICAgZ2V0RGF0YSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIGZvcmNlUkdCID0gZmFsc2UsXG4gICAgICBpc1NvdXJjZVBERiA9IGZhbHNlXG4gICAgfSkge1xuICAgICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA+IDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGVcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRhID0gdGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh3aWR0aCwgaGVpZ2h0LCBpc1NvdXJjZVBERik7XG5cbiAgICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDEgJiYgZm9yY2VSR0IpIHtcbiAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIHJnYkRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoZGF0YUxlbmd0aCAqIDMpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBncmF5Q29sb3IgPSBkYXRhW2ldO1xuICAgICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJnYkRhdGE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gMyAmJiB0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiKGRhdGEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKSB7XG4gICAgICAgICAgaWYgKGZvcmNlUkdCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb1JnYihkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb0NteWsoZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEpwZWdJbWFnZTtcbn0oKTtcblxuZXhwb3J0cy5KcGVnSW1hZ2UgPSBKcGVnSW1hZ2U7XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSnB4U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgX2pweCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjEpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBKcHhTdHJlYW0gPSBmdW5jdGlvbiBKcHhTdHJlYW1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBKcHhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZGljdCwgcGFyYW1zKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgfVxuXG4gIEpweFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKcHhTdHJlYW0ucHJvdG90eXBlLCBcImJ5dGVzXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIEpweFN0cmVhbV9ieXRlcygpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcblxuICBKcHhTdHJlYW0ucHJvdG90eXBlLmVuc3VyZUJ1ZmZlciA9IGZ1bmN0aW9uIChyZXF1ZXN0ZWQpIHt9O1xuXG4gIEpweFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICBqcHhJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICBjb25zdCB3aWR0aCA9IGpweEltYWdlLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGpweEltYWdlLmhlaWdodDtcbiAgICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgY29uc3QgdGlsZUNvdW50ID0ganB4SW1hZ2UudGlsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHRpbGVDb3VudCA9PT0gMSkge1xuICAgICAgdGhpcy5idWZmZXIgPSBqcHhJbWFnZS50aWxlc1swXS5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCAqIGNvbXBvbmVudHNDb3VudCk7XG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGlsZUNvdW50OyBrKyspIHtcbiAgICAgICAgY29uc3QgdGlsZUNvbXBvbmVudHMgPSBqcHhJbWFnZS50aWxlc1trXTtcbiAgICAgICAgY29uc3QgdGlsZVdpZHRoID0gdGlsZUNvbXBvbmVudHMud2lkdGg7XG4gICAgICAgIGNvbnN0IHRpbGVIZWlnaHQgPSB0aWxlQ29tcG9uZW50cy5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRpbGVMZWZ0ID0gdGlsZUNvbXBvbmVudHMubGVmdDtcbiAgICAgICAgY29uc3QgdGlsZVRvcCA9IHRpbGVDb21wb25lbnRzLnRvcDtcbiAgICAgICAgY29uc3Qgc3JjID0gdGlsZUNvbXBvbmVudHMuaXRlbXM7XG4gICAgICAgIGxldCBzcmNQb3NpdGlvbiA9IDA7XG4gICAgICAgIGxldCBkYXRhUG9zaXRpb24gPSAod2lkdGggKiB0aWxlVG9wICsgdGlsZUxlZnQpICogY29tcG9uZW50c0NvdW50O1xuICAgICAgICBjb25zdCBpbWdSb3dTaXplID0gd2lkdGggKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgIGNvbnN0IHRpbGVSb3dTaXplID0gdGlsZVdpZHRoICogY29tcG9uZW50c0NvdW50O1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGlsZUhlaWdodDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBzcmMuc3ViYXJyYXkoc3JjUG9zaXRpb24sIHNyY1Bvc2l0aW9uICsgdGlsZVJvd1NpemUpO1xuICAgICAgICAgIGRhdGEuc2V0KHJvd0J5dGVzLCBkYXRhUG9zaXRpb24pO1xuICAgICAgICAgIHNyY1Bvc2l0aW9uICs9IHRpbGVSb3dTaXplO1xuICAgICAgICAgIGRhdGFQb3NpdGlvbiArPSBpbWdSb3dTaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLmVvZiA9IHRydWU7XG4gIH07XG5cbiAgcmV0dXJuIEpweFN0cmVhbTtcbn0oKTtcblxuZXhwb3J0cy5KcHhTdHJlYW0gPSBKcHhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSnB4SW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfYXJpdGhtZXRpY19kZWNvZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxNyk7XG5cbmNsYXNzIEpweEVycm9yIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKGBKUFggZXJyb3I6ICR7bXNnfWApO1xuICB9XG5cbn1cblxudmFyIEpweEltYWdlID0gZnVuY3Rpb24gSnB4SW1hZ2VDbG9zdXJlKCkge1xuICB2YXIgU3ViYmFuZHNHYWluTG9nMiA9IHtcbiAgICBMTDogMCxcbiAgICBMSDogMSxcbiAgICBITDogMSxcbiAgICBISDogMlxuICB9O1xuXG4gIGZ1bmN0aW9uIEpweEltYWdlKCkge1xuICAgIHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIEpweEltYWdlLnByb3RvdHlwZSA9IHtcbiAgICBwYXJzZTogZnVuY3Rpb24gSnB4SW1hZ2VfcGFyc2UoZGF0YSkge1xuICAgICAgdmFyIGhlYWQgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgMCk7XG5cbiAgICAgIGlmIChoZWFkID09PSAweGZmNGYpIHtcbiAgICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZGF0YSwgMCwgZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3NpdGlvbiA9IDAsXG4gICAgICAgICAgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgaGVhZGVyU2l6ZSA9IDg7XG4gICAgICAgIHZhciBsYm94ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgdmFyIHRib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgcG9zaXRpb24gKz0gaGVhZGVyU2l6ZTtcblxuICAgICAgICBpZiAobGJveCA9PT0gMSkge1xuICAgICAgICAgIGxib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICogNDI5NDk2NzI5NiArICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICAgIHBvc2l0aW9uICs9IDg7XG4gICAgICAgICAgaGVhZGVyU2l6ZSArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxib3ggPT09IDApIHtcbiAgICAgICAgICBsYm94ID0gbGVuZ3RoIC0gcG9zaXRpb24gKyBoZWFkZXJTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxib3ggPCBoZWFkZXJTaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiSW52YWxpZCBib3ggZmllbGQgc2l6ZVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhTGVuZ3RoID0gbGJveCAtIGhlYWRlclNpemU7XG4gICAgICAgIHZhciBqdW1wRGF0YUxlbmd0aCA9IHRydWU7XG5cbiAgICAgICAgc3dpdGNoICh0Ym94KSB7XG4gICAgICAgICAgY2FzZSAweDZhNzAzMjY4OlxuICAgICAgICAgICAganVtcERhdGFMZW5ndGggPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDYzNmY2YzcyOlxuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGRhdGFbcG9zaXRpb25dO1xuXG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSAxKSB7XG4gICAgICAgICAgICAgIHZhciBjb2xvcnNwYWNlID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMyk7XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChjb2xvcnNwYWNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbmtub3duIGNvbG9yc3BhY2UgXCIgKyBjb2xvcnNwYWNlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gMikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHg2YTcwMzI2MzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGRhdGEsIHBvc2l0aW9uLCBwb3NpdGlvbiArIGRhdGFMZW5ndGgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4NmE1MDIwMjA6XG4gICAgICAgICAgICBpZiAoKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKSAhPT0gMHgwZDBhODcwYSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIEpQMiBzaWduYXR1cmVcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDZhNTAxYTFhOlxuICAgICAgICAgIGNhc2UgMHg2Njc0Nzk3MDpcbiAgICAgICAgICBjYXNlIDB4NzI3MjY1NzE6XG4gICAgICAgICAgY2FzZSAweDcyNjU3MzIwOlxuICAgICAgICAgIGNhc2UgMHg2OTY4NjQ3MjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciBoZWFkZXJUeXBlID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0Ym94ID4+IDI0ICYgMHhmZiwgdGJveCA+PiAxNiAmIDB4ZmYsIHRib3ggPj4gOCAmIDB4ZmYsIHRib3ggJiAweGZmKTtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIGhlYWRlciB0eXBlIFwiICsgdGJveCArIFwiIChcIiArIGhlYWRlclR5cGUgKyBcIilcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqdW1wRGF0YUxlbmd0aCkge1xuICAgICAgICAgIHBvc2l0aW9uICs9IGRhdGFMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlSW1hZ2VQcm9wZXJ0aWVzOiBmdW5jdGlvbiBKcHhJbWFnZV9wYXJzZUltYWdlUHJvcGVydGllcyhzdHJlYW0pIHtcbiAgICAgIHZhciBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgICAgd2hpbGUgKG5ld0J5dGUgPj0gMCkge1xuICAgICAgICB2YXIgb2xkQnl0ZSA9IG5ld0J5dGU7XG4gICAgICAgIG5ld0J5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICB2YXIgY29kZSA9IG9sZEJ5dGUgPDwgOCB8IG5ld0J5dGU7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4ZmY1MSkge1xuICAgICAgICAgIHN0cmVhbS5za2lwKDQpO1xuICAgICAgICAgIHZhciBYc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgdmFyIFlzaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICB2YXIgWE9zaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICB2YXIgWU9zaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICBzdHJlYW0uc2tpcCgxNik7XG4gICAgICAgICAgdmFyIENzaXogPSBzdHJlYW0uZ2V0VWludDE2KCk7XG4gICAgICAgICAgdGhpcy53aWR0aCA9IFhzaXogLSBYT3NpejtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IFlzaXogLSBZT3NpejtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudHNDb3VudCA9IENzaXo7XG4gICAgICAgICAgdGhpcy5iaXRzUGVyQ29tcG9uZW50ID0gODtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbVwiKTtcbiAgICB9LFxuICAgIHBhcnNlQ29kZXN0cmVhbTogZnVuY3Rpb24gSnB4SW1hZ2VfcGFyc2VDb2Rlc3RyZWFtKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICB2YXIgZG9Ob3RSZWNvdmVyID0gZmFsc2U7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXJ0O1xuXG4gICAgICAgIHdoaWxlIChwb3NpdGlvbiArIDEgPCBlbmQpIHtcbiAgICAgICAgICB2YXIgY29kZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gMCxcbiAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgc3FjZCxcbiAgICAgICAgICAgICAgc3BxY2RzLFxuICAgICAgICAgICAgICBzcHFjZFNpemUsXG4gICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCxcbiAgICAgICAgICAgICAgdGlsZTtcblxuICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgY2FzZSAweGZmNGY6XG4gICAgICAgICAgICAgIGNvbnRleHQubWFpbkhlYWRlciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmZkOTpcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjUxOlxuICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICB2YXIgc2l6ID0ge307XG4gICAgICAgICAgICAgIHNpei5Yc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgIHNpei5Zc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgOCk7XG4gICAgICAgICAgICAgIHNpei5YT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDEyKTtcbiAgICAgICAgICAgICAgc2l6LllPc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMTYpO1xuICAgICAgICAgICAgICBzaXouWFRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyMCk7XG4gICAgICAgICAgICAgIHNpei5ZVHNpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDI0KTtcbiAgICAgICAgICAgICAgc2l6LlhUT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDI4KTtcbiAgICAgICAgICAgICAgc2l6LllUT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMyKTtcbiAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDM2KTtcbiAgICAgICAgICAgICAgc2l6LkNzaXogPSBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gW107XG4gICAgICAgICAgICAgIGogPSBwb3NpdGlvbiArIDM4O1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAoZGF0YVtqXSAmIDB4N2YpICsgMSxcbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkOiAhIShkYXRhW2pdICYgMHg4MCksXG4gICAgICAgICAgICAgICAgICBYUnNpejogZGF0YVtqICsgMV0sXG4gICAgICAgICAgICAgICAgICBZUnNpejogZGF0YVtqICsgMl1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVDb21wb25lbnREaW1lbnNpb25zKGNvbXBvbmVudCwgc2l6KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRleHQuU0laID0gc2l6O1xuICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICAgICAgICBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgIGNvbnRleHQuUUNDID0gW107XG4gICAgICAgICAgICAgIGNvbnRleHQuQ09DID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4ZmY1YzpcbiAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgdmFyIHFjZCA9IHt9O1xuICAgICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgICBzcWNkID0gZGF0YVtqKytdO1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAoc3FjZCAmIDB4MWYpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSA4O1xuICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTUWNkIHZhbHVlIFwiICsgc3FjZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBxY2Qubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICAgIHFjZC5zY2FsYXJFeHBvdW5kZWQgPSBzY2FsYXJFeHBvdW5kZWQ7XG4gICAgICAgICAgICAgIHFjZC5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChqIDwgbGVuZ3RoICsgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3BxY2QgPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2orK10gPj4gMztcbiAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3BxY2QuZXBzaWxvbiA9IGRhdGFbal0gPj4gMztcbiAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gKGRhdGFbal0gJiAweDcpIDw8IDggfCBkYXRhW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzcHFjZHMucHVzaChzcHFjZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBxY2QuU1BxY2RzID0gc3BxY2RzO1xuXG4gICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1haW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LlFDRCA9IHFjZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDRCA9IHFjZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQyA9IFtdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjVkOlxuICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICB2YXIgcWNjID0ge307XG4gICAgICAgICAgICAgIGogPSBwb3NpdGlvbiArIDI7XG4gICAgICAgICAgICAgIHZhciBjcWNjO1xuXG4gICAgICAgICAgICAgIGlmIChjb250ZXh0LlNJWi5Dc2l6IDwgMjU3KSB7XG4gICAgICAgICAgICAgICAgY3FjYyA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjcWNjID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIGopO1xuICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNxY2QgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChzcWNkICYgMHgxZikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNRY2QgdmFsdWUgXCIgKyBzcWNkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHFjYy5ub1F1YW50aXphdGlvbiA9IHNwcWNkU2l6ZSA9PT0gODtcbiAgICAgICAgICAgICAgcWNjLnNjYWxhckV4cG91bmRlZCA9IHNjYWxhckV4cG91bmRlZDtcbiAgICAgICAgICAgICAgcWNjLmd1YXJkQml0cyA9IHNxY2QgPj4gNTtcbiAgICAgICAgICAgICAgc3BxY2RzID0gW107XG5cbiAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoc3BxY2RTaXplID09PSA4KSB7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2pdID4+IDM7XG4gICAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IChkYXRhW2pdICYgMHg3KSA8PCA4IHwgZGF0YVtqICsgMV07XG4gICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3BxY2RzLnB1c2goc3BxY2QpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcWNjLlNQcWNkcyA9IHNwcWNkcztcblxuICAgICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5RQ0NbY3FjY10gPSBxY2M7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5RQ0NbY3FjY10gPSBxY2M7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweGZmNTI6XG4gICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgIHZhciBjb2QgPSB7fTtcbiAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgdmFyIHNjb2QgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgIGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzID0gISEoc2NvZCAmIDEpO1xuICAgICAgICAgICAgICBjb2Quc29wTWFya2VyVXNlZCA9ICEhKHNjb2QgJiAyKTtcbiAgICAgICAgICAgICAgY29kLmVwaE1hcmtlclVzZWQgPSAhIShzY29kICYgNCk7XG4gICAgICAgICAgICAgIGNvZC5wcm9ncmVzc2lvbk9yZGVyID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICBjb2QubGF5ZXJzQ291bnQgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgaik7XG4gICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgY29kLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICBjb2QuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICBjb2QueGNiID0gKGRhdGFbaisrXSAmIDB4ZikgKyAyO1xuICAgICAgICAgICAgICBjb2QueWNiID0gKGRhdGFbaisrXSAmIDB4ZikgKyAyO1xuICAgICAgICAgICAgICB2YXIgYmxvY2tTdHlsZSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgY29kLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MgPSAhIShibG9ja1N0eWxlICYgMSk7XG4gICAgICAgICAgICAgIGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzID0gISEoYmxvY2tTdHlsZSAmIDIpO1xuICAgICAgICAgICAgICBjb2QudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzID0gISEoYmxvY2tTdHlsZSAmIDQpO1xuICAgICAgICAgICAgICBjb2QudmVydGljYWxseVN0cmlwZSA9ICEhKGJsb2NrU3R5bGUgJiA4KTtcbiAgICAgICAgICAgICAgY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24gPSAhIShibG9ja1N0eWxlICYgMTYpO1xuICAgICAgICAgICAgICBjb2Quc2VnbWVudGF0aW9uU3ltYm9sVXNlZCA9ICEhKGJsb2NrU3R5bGUgJiAzMik7XG4gICAgICAgICAgICAgIGNvZC5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24gPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgaWYgKGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0c1NpemVzID0gW107XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGxlbmd0aCArIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzU2l6ZSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgICAgIHByZWNpbmN0c1NpemVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBQUHg6IHByZWNpbmN0c1NpemUgJiAweGYsXG4gICAgICAgICAgICAgICAgICAgIFBQeTogcHJlY2luY3RzU2l6ZSA+PiA0XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2QucHJlY2luY3RzU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciB1bnN1cHBvcnRlZCA9IFtdO1xuXG4gICAgICAgICAgICAgIGlmIChjb2Quc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcykge1xuICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJzZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaChcInJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXNcIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcykge1xuICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJ0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3NcIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29kLnZlcnRpY2FsbHlTdHJpcGUpIHtcbiAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwidmVydGljYWxseVN0cmlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb2QucHJlZGljdGFibGVUZXJtaW5hdGlvbikge1xuICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJwcmVkaWN0YWJsZVRlcm1pbmF0aW9uXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBkb05vdFJlY292ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIENPRCBvcHRpb25zIChcIiArIHVuc3VwcG9ydGVkLmpvaW4oXCIsIFwiKSArIFwiKVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1haW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LkNPRCA9IGNvZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRCA9IGNvZDtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQyA9IFtdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjkwOlxuICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICB0aWxlID0ge307XG4gICAgICAgICAgICAgIHRpbGUuaW5kZXggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAyKTtcbiAgICAgICAgICAgICAgdGlsZS5sZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgICAgdGlsZS5kYXRhRW5kID0gdGlsZS5sZW5ndGggKyBwb3NpdGlvbiAtIDI7XG4gICAgICAgICAgICAgIHRpbGUucGFydEluZGV4ID0gZGF0YVtwb3NpdGlvbiArIDhdO1xuICAgICAgICAgICAgICB0aWxlLnBhcnRzQ291bnQgPSBkYXRhW3Bvc2l0aW9uICsgOV07XG4gICAgICAgICAgICAgIGNvbnRleHQubWFpbkhlYWRlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIGlmICh0aWxlLnBhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRpbGUuQ09EID0gY29udGV4dC5DT0Q7XG4gICAgICAgICAgICAgICAgdGlsZS5DT0MgPSBjb250ZXh0LkNPQy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICB0aWxlLlFDRCA9IGNvbnRleHQuUUNEO1xuICAgICAgICAgICAgICAgIHRpbGUuUUNDID0gY29udGV4dC5RQ0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlID0gdGlsZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjkzOlxuICAgICAgICAgICAgICB0aWxlID0gY29udGV4dC5jdXJyZW50VGlsZTtcblxuICAgICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplVGlsZShjb250ZXh0LCB0aWxlLmluZGV4KTtcbiAgICAgICAgICAgICAgICBidWlsZFBhY2tldHMoY29udGV4dCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZW5ndGggPSB0aWxlLmRhdGFFbmQgLSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgcGFyc2VUaWxlUGFja2V0cyhjb250ZXh0LCBkYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHhmZjU1OlxuICAgICAgICAgICAgY2FzZSAweGZmNTc6XG4gICAgICAgICAgICBjYXNlIDB4ZmY1ODpcbiAgICAgICAgICAgIGNhc2UgMHhmZjY0OlxuICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweGZmNTM6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvZGVzdHJlYW0gY29kZSAweEZGNTMgKENPQykgaXMgbm90IGltcGxlbWVudGVkXCIpO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogXCIgKyBjb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb05vdFJlY292ZXIgfHwgdGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSkge1xuICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkpQWDogVHJ5aW5nIHRvIHJlY292ZXIgZnJvbTogXCIgKyBlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGlsZXMgPSB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpO1xuICAgICAgdGhpcy53aWR0aCA9IGNvbnRleHQuU0laLlhzaXogLSBjb250ZXh0LlNJWi5YT3NpejtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gY29udGV4dC5TSVouWXNpeiAtIGNvbnRleHQuU0laLllPc2l6O1xuICAgICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBjb250ZXh0LlNJWi5Dc2l6O1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBjYWxjdWxhdGVDb21wb25lbnREaW1lbnNpb25zKGNvbXBvbmVudCwgc2l6KSB7XG4gICAgY29tcG9uZW50LngwID0gTWF0aC5jZWlsKHNpei5YT3NpeiAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgY29tcG9uZW50LngxID0gTWF0aC5jZWlsKHNpei5Yc2l6IC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICBjb21wb25lbnQueTAgPSBNYXRoLmNlaWwoc2l6LllPc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgICBjb21wb25lbnQueTEgPSBNYXRoLmNlaWwoc2l6LllzaXogLyBjb21wb25lbnQuWVJzaXopO1xuICAgIGNvbXBvbmVudC53aWR0aCA9IGNvbXBvbmVudC54MSAtIGNvbXBvbmVudC54MDtcbiAgICBjb21wb25lbnQuaGVpZ2h0ID0gY29tcG9uZW50LnkxIC0gY29tcG9uZW50LnkwO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlVGlsZUdyaWRzKGNvbnRleHQsIGNvbXBvbmVudHMpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGUsXG4gICAgICAgIHRpbGVzID0gW107XG4gICAgdmFyIG51bVh0aWxlcyA9IE1hdGguY2VpbCgoc2l6LlhzaXogLSBzaXouWFRPc2l6KSAvIHNpei5YVHNpeik7XG4gICAgdmFyIG51bVl0aWxlcyA9IE1hdGguY2VpbCgoc2l6LllzaXogLSBzaXouWVRPc2l6KSAvIHNpei5ZVHNpeik7XG5cbiAgICBmb3IgKHZhciBxID0gMDsgcSA8IG51bVl0aWxlczsgcSsrKSB7XG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IG51bVh0aWxlczsgcCsrKSB7XG4gICAgICAgIHRpbGUgPSB7fTtcbiAgICAgICAgdGlsZS50eDAgPSBNYXRoLm1heChzaXouWFRPc2l6ICsgcCAqIHNpei5YVHNpeiwgc2l6LlhPc2l6KTtcbiAgICAgICAgdGlsZS50eTAgPSBNYXRoLm1heChzaXouWVRPc2l6ICsgcSAqIHNpei5ZVHNpeiwgc2l6LllPc2l6KTtcbiAgICAgICAgdGlsZS50eDEgPSBNYXRoLm1pbihzaXouWFRPc2l6ICsgKHAgKyAxKSAqIHNpei5YVHNpeiwgc2l6LlhzaXopO1xuICAgICAgICB0aWxlLnR5MSA9IE1hdGgubWluKHNpei5ZVE9zaXogKyAocSArIDEpICogc2l6LllUc2l6LCBzaXouWXNpeik7XG4gICAgICAgIHRpbGUud2lkdGggPSB0aWxlLnR4MSAtIHRpbGUudHgwO1xuICAgICAgICB0aWxlLmhlaWdodCA9IHRpbGUudHkxIC0gdGlsZS50eTA7XG4gICAgICAgIHRpbGUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHQudGlsZXMgPSB0aWxlcztcbiAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb21wb25lbnRzQ291bnQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gdGlsZXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICB2YXIgdGlsZUNvbXBvbmVudCA9IHt9O1xuICAgICAgICB0aWxlID0gdGlsZXNbal07XG4gICAgICAgIHRpbGVDb21wb25lbnQudGN4MCA9IE1hdGguY2VpbCh0aWxlLnR4MCAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgICAgIHRpbGVDb21wb25lbnQudGN5MCA9IE1hdGguY2VpbCh0aWxlLnR5MCAvIGNvbXBvbmVudC5ZUnNpeik7XG4gICAgICAgIHRpbGVDb21wb25lbnQudGN4MSA9IE1hdGguY2VpbCh0aWxlLnR4MSAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgICAgIHRpbGVDb21wb25lbnQudGN5MSA9IE1hdGguY2VpbCh0aWxlLnR5MSAvIGNvbXBvbmVudC5ZUnNpeik7XG4gICAgICAgIHRpbGVDb21wb25lbnQud2lkdGggPSB0aWxlQ29tcG9uZW50LnRjeDEgLSB0aWxlQ29tcG9uZW50LnRjeDA7XG4gICAgICAgIHRpbGVDb21wb25lbnQuaGVpZ2h0ID0gdGlsZUNvbXBvbmVudC50Y3kxIC0gdGlsZUNvbXBvbmVudC50Y3kwO1xuICAgICAgICB0aWxlLmNvbXBvbmVudHNbaV0gPSB0aWxlQ29tcG9uZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJsb2Nrc0RpbWVuc2lvbnMoY29udGV4dCwgY29tcG9uZW50LCByKSB7XG4gICAgdmFyIGNvZE9yQ29jID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycztcbiAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICBpZiAoIWNvZE9yQ29jLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpIHtcbiAgICAgIHJlc3VsdC5QUHggPSAxNTtcbiAgICAgIHJlc3VsdC5QUHkgPSAxNTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LlBQeCA9IGNvZE9yQ29jLnByZWNpbmN0c1NpemVzW3JdLlBQeDtcbiAgICAgIHJlc3VsdC5QUHkgPSBjb2RPckNvYy5wcmVjaW5jdHNTaXplc1tyXS5QUHk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnhjYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueGNiLCByZXN1bHQuUFB4KTtcbiAgICByZXN1bHQueWNiXyA9IHIgPiAwID8gTWF0aC5taW4oY29kT3JDb2MueWNiLCByZXN1bHQuUFB5IC0gMSkgOiBNYXRoLm1pbihjb2RPckNvYy55Y2IsIHJlc3VsdC5QUHkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFByZWNpbmN0cyhjb250ZXh0LCByZXNvbHV0aW9uLCBkaW1lbnNpb25zKSB7XG4gICAgdmFyIHByZWNpbmN0V2lkdGggPSAxIDw8IGRpbWVuc2lvbnMuUFB4O1xuICAgIHZhciBwcmVjaW5jdEhlaWdodCA9IDEgPDwgZGltZW5zaW9ucy5QUHk7XG4gICAgdmFyIGlzWmVyb1JlcyA9IHJlc29sdXRpb24ucmVzTGV2ZWwgPT09IDA7XG4gICAgdmFyIHByZWNpbmN0V2lkdGhJblN1YmJhbmQgPSAxIDw8IGRpbWVuc2lvbnMuUFB4ICsgKGlzWmVyb1JlcyA/IDAgOiAtMSk7XG4gICAgdmFyIHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kID0gMSA8PCBkaW1lbnNpb25zLlBQeSArIChpc1plcm9SZXMgPyAwIDogLTEpO1xuICAgIHZhciBudW1wcmVjaW5jdHN3aWRlID0gcmVzb2x1dGlvbi50cngxID4gcmVzb2x1dGlvbi50cngwID8gTWF0aC5jZWlsKHJlc29sdXRpb24udHJ4MSAvIHByZWNpbmN0V2lkdGgpIC0gTWF0aC5mbG9vcihyZXNvbHV0aW9uLnRyeDAgLyBwcmVjaW5jdFdpZHRoKSA6IDA7XG4gICAgdmFyIG51bXByZWNpbmN0c2hpZ2ggPSByZXNvbHV0aW9uLnRyeTEgPiByZXNvbHV0aW9uLnRyeTAgPyBNYXRoLmNlaWwocmVzb2x1dGlvbi50cnkxIC8gcHJlY2luY3RIZWlnaHQpIC0gTWF0aC5mbG9vcihyZXNvbHV0aW9uLnRyeTAgLyBwcmVjaW5jdEhlaWdodCkgOiAwO1xuICAgIHZhciBudW1wcmVjaW5jdHMgPSBudW1wcmVjaW5jdHN3aWRlICogbnVtcHJlY2luY3RzaGlnaDtcbiAgICByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycyA9IHtcbiAgICAgIHByZWNpbmN0V2lkdGgsXG4gICAgICBwcmVjaW5jdEhlaWdodCxcbiAgICAgIG51bXByZWNpbmN0c3dpZGUsXG4gICAgICBudW1wcmVjaW5jdHNoaWdoLFxuICAgICAgbnVtcHJlY2luY3RzLFxuICAgICAgcHJlY2luY3RXaWR0aEluU3ViYmFuZCxcbiAgICAgIHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBkaW1lbnNpb25zKSB7XG4gICAgdmFyIHhjYl8gPSBkaW1lbnNpb25zLnhjYl87XG4gICAgdmFyIHljYl8gPSBkaW1lbnNpb25zLnljYl87XG4gICAgdmFyIGNvZGVibG9ja1dpZHRoID0gMSA8PCB4Y2JfO1xuICAgIHZhciBjb2RlYmxvY2tIZWlnaHQgPSAxIDw8IHljYl87XG4gICAgdmFyIGNieDAgPSBzdWJiYW5kLnRieDAgPj4geGNiXztcbiAgICB2YXIgY2J5MCA9IHN1YmJhbmQudGJ5MCA+PiB5Y2JfO1xuICAgIHZhciBjYngxID0gc3ViYmFuZC50YngxICsgY29kZWJsb2NrV2lkdGggLSAxID4+IHhjYl87XG4gICAgdmFyIGNieTEgPSBzdWJiYW5kLnRieTEgKyBjb2RlYmxvY2tIZWlnaHQgLSAxID4+IHljYl87XG4gICAgdmFyIHByZWNpbmN0UGFyYW1ldGVycyA9IHN1YmJhbmQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnM7XG4gICAgdmFyIGNvZGVibG9ja3MgPSBbXTtcbiAgICB2YXIgcHJlY2luY3RzID0gW107XG4gICAgdmFyIGksIGosIGNvZGVibG9jaywgcHJlY2luY3ROdW1iZXI7XG5cbiAgICBmb3IgKGogPSBjYnkwOyBqIDwgY2J5MTsgaisrKSB7XG4gICAgICBmb3IgKGkgPSBjYngwOyBpIDwgY2J4MTsgaSsrKSB7XG4gICAgICAgIGNvZGVibG9jayA9IHtcbiAgICAgICAgICBjYng6IGksXG4gICAgICAgICAgY2J5OiBqLFxuICAgICAgICAgIHRieDA6IGNvZGVibG9ja1dpZHRoICogaSxcbiAgICAgICAgICB0YnkwOiBjb2RlYmxvY2tIZWlnaHQgKiBqLFxuICAgICAgICAgIHRieDE6IGNvZGVibG9ja1dpZHRoICogKGkgKyAxKSxcbiAgICAgICAgICB0YnkxOiBjb2RlYmxvY2tIZWlnaHQgKiAoaiArIDEpXG4gICAgICAgIH07XG4gICAgICAgIGNvZGVibG9jay50YngwXyA9IE1hdGgubWF4KHN1YmJhbmQudGJ4MCwgY29kZWJsb2NrLnRieDApO1xuICAgICAgICBjb2RlYmxvY2sudGJ5MF8gPSBNYXRoLm1heChzdWJiYW5kLnRieTAsIGNvZGVibG9jay50YnkwKTtcbiAgICAgICAgY29kZWJsb2NrLnRieDFfID0gTWF0aC5taW4oc3ViYmFuZC50YngxLCBjb2RlYmxvY2sudGJ4MSk7XG4gICAgICAgIGNvZGVibG9jay50YnkxXyA9IE1hdGgubWluKHN1YmJhbmQudGJ5MSwgY29kZWJsb2NrLnRieTEpO1xuICAgICAgICB2YXIgcGkgPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ4MF8gLSBzdWJiYW5kLnRieDApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpO1xuICAgICAgICB2YXIgcGogPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ5MF8gLSBzdWJiYW5kLnRieTApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKTtcbiAgICAgICAgcHJlY2luY3ROdW1iZXIgPSBwaSArIHBqICogcHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7XG4gICAgICAgIGNvZGVibG9jay5wcmVjaW5jdE51bWJlciA9IHByZWNpbmN0TnVtYmVyO1xuICAgICAgICBjb2RlYmxvY2suc3ViYmFuZFR5cGUgPSBzdWJiYW5kLnR5cGU7XG4gICAgICAgIGNvZGVibG9jay5MYmxvY2sgPSAzO1xuXG4gICAgICAgIGlmIChjb2RlYmxvY2sudGJ4MV8gPD0gY29kZWJsb2NrLnRieDBfIHx8IGNvZGVibG9jay50YnkxXyA8PSBjb2RlYmxvY2sudGJ5MF8pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGVibG9ja3MucHVzaChjb2RlYmxvY2spO1xuICAgICAgICB2YXIgcHJlY2luY3QgPSBwcmVjaW5jdHNbcHJlY2luY3ROdW1iZXJdO1xuXG4gICAgICAgIGlmIChwcmVjaW5jdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGkgPCBwcmVjaW5jdC5jYnhNaW4pIHtcbiAgICAgICAgICAgIHByZWNpbmN0LmNieE1pbiA9IGk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID4gcHJlY2luY3QuY2J4TWF4KSB7XG4gICAgICAgICAgICBwcmVjaW5jdC5jYnhNYXggPSBpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChqIDwgcHJlY2luY3QuY2J5TWluKSB7XG4gICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBqO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaiA+IHByZWNpbmN0LmNieU1heCkge1xuICAgICAgICAgICAgcHJlY2luY3QuY2J5TWF4ID0gajtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJlY2luY3RzW3ByZWNpbmN0TnVtYmVyXSA9IHByZWNpbmN0ID0ge1xuICAgICAgICAgICAgY2J4TWluOiBpLFxuICAgICAgICAgICAgY2J5TWluOiBqLFxuICAgICAgICAgICAgY2J4TWF4OiBpLFxuICAgICAgICAgICAgY2J5TWF4OiBqXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGVibG9jay5wcmVjaW5jdCA9IHByZWNpbmN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1YmJhbmQuY29kZWJsb2NrUGFyYW1ldGVycyA9IHtcbiAgICAgIGNvZGVibG9ja1dpZHRoOiB4Y2JfLFxuICAgICAgY29kZWJsb2NrSGVpZ2h0OiB5Y2JfLFxuICAgICAgbnVtY29kZWJsb2Nrd2lkZTogY2J4MSAtIGNieDAgKyAxLFxuICAgICAgbnVtY29kZWJsb2NraGlnaDogY2J5MSAtIGNieTAgKyAxXG4gICAgfTtcbiAgICBzdWJiYW5kLmNvZGVibG9ja3MgPSBjb2RlYmxvY2tzO1xuICAgIHN1YmJhbmQucHJlY2luY3RzID0gcHJlY2luY3RzO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHByZWNpbmN0TnVtYmVyLCBsYXllck51bWJlcikge1xuICAgIHZhciBwcmVjaW5jdENvZGVibG9ja3MgPSBbXTtcbiAgICB2YXIgc3ViYmFuZHMgPSByZXNvbHV0aW9uLnN1YmJhbmRzO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3ViYmFuZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHN1YmJhbmQgPSBzdWJiYW5kc1tpXTtcbiAgICAgIHZhciBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuXG4gICAgICBmb3IgKHZhciBqID0gMCwgamogPSBjb2RlYmxvY2tzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgdmFyIGNvZGVibG9jayA9IGNvZGVibG9ja3Nbal07XG5cbiAgICAgICAgaWYgKGNvZGVibG9jay5wcmVjaW5jdE51bWJlciAhPT0gcHJlY2luY3ROdW1iZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZWNpbmN0Q29kZWJsb2Nrcy5wdXNoKGNvZGVibG9jayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxheWVyTnVtYmVyLFxuICAgICAgY29kZWJsb2NrczogcHJlY2luY3RDb2RlYmxvY2tzXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICB2YXIgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgIHZhciBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSAwO1xuXG4gICAgZm9yICh2YXIgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gICAgfVxuXG4gICAgdmFyIGwgPSAwLFxuICAgICAgICByID0gMCxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGsgPSAwO1xuXG4gICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgIGZvciAoOyBsIDwgbGF5ZXJzQ291bnQ7IGwrKykge1xuICAgICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgZm9yICg7IGsgPCBudW1wcmVjaW5jdHM7KSB7XG4gICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICByID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICB2YXIgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgIHZhciBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSAwO1xuXG4gICAgZm9yICh2YXIgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gICAgfVxuXG4gICAgdmFyIHIgPSAwLFxuICAgICAgICBsID0gMCxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGsgPSAwO1xuXG4gICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgIGZvciAoOyBsIDwgbGF5ZXJzQ291bnQ7IGwrKykge1xuICAgICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgZm9yICg7IGsgPCBudW1wcmVjaW5jdHM7KSB7XG4gICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBsID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoY29udGV4dCkge1xuICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICB2YXIgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgIHZhciBsLCByLCBjLCBwO1xuICAgIHZhciBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSAwO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBNYXRoLm1heChtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsIGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTtcbiAgICB9XG5cbiAgICB2YXIgbWF4TnVtUHJlY2luY3RzSW5MZXZlbCA9IG5ldyBJbnQzMkFycmF5KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCArIDEpO1xuXG4gICAgZm9yIChyID0gMDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7ICsrcikge1xuICAgICAgdmFyIG1heE51bVByZWNpbmN0cyA9IDA7XG5cbiAgICAgIGZvciAoYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7ICsrYykge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbnMgPSB0aWxlLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnM7XG5cbiAgICAgICAgaWYgKHIgPCByZXNvbHV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBtYXhOdW1QcmVjaW5jdHMgPSBNYXRoLm1heChtYXhOdW1QcmVjaW5jdHMsIHJlc29sdXRpb25zW3JdLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1heE51bVByZWNpbmN0c0luTGV2ZWxbcl0gPSBtYXhOdW1QcmVjaW5jdHM7XG4gICAgfVxuXG4gICAgbCA9IDA7XG4gICAgciA9IDA7XG4gICAgYyA9IDA7XG4gICAgcCA9IDA7XG5cbiAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgZm9yICg7IHIgPD0gbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgZm9yICg7IHAgPCBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdOyBwKyspIHtcbiAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG5cbiAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgaWYgKHAgPj0gbnVtcHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHAsIGwpO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgcHJlY2luY3RzU2l6ZXMgPSBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHRpbGUpO1xuICAgIHZhciBwcmVjaW5jdHNJdGVyYXRpb25TaXplcyA9IHByZWNpbmN0c1NpemVzO1xuICAgIHZhciBsID0gMCxcbiAgICAgICAgciA9IDAsXG4gICAgICAgIGMgPSAwLFxuICAgICAgICBweCA9IDAsXG4gICAgICAgIHB5ID0gMDtcblxuICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICBmb3IgKDsgcHkgPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1IaWdoOyBweSsrKSB7XG4gICAgICAgIGZvciAoOyBweCA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bVdpZGU7IHB4KyspIHtcbiAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgdmFyIGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuXG4gICAgICAgICAgICBmb3IgKDsgciA8PSBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgdmFyIHNpemVJbkltYWdlU2NhbGUgPSBwcmVjaW5jdHNTaXplcy5jb21wb25lbnRzW2NdLnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgICB2YXIgayA9IGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4LCBweSwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pO1xuXG4gICAgICAgICAgICAgIGlmIChrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBweCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgcHJlY2luY3RzU2l6ZXMgPSBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHRpbGUpO1xuICAgIHZhciBsID0gMCxcbiAgICAgICAgciA9IDAsXG4gICAgICAgIGMgPSAwLFxuICAgICAgICBweCA9IDAsXG4gICAgICAgIHB5ID0gMDtcblxuICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgIHZhciBwcmVjaW5jdHNJdGVyYXRpb25TaXplcyA9IHByZWNpbmN0c1NpemVzLmNvbXBvbmVudHNbY107XG4gICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICBmb3IgKDsgcHkgPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1IaWdoOyBweSsrKSB7XG4gICAgICAgICAgZm9yICg7IHB4IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtV2lkZTsgcHgrKykge1xuICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgIHZhciBrID0gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHgsIHB5LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKGsgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoOyBsIDwgbGF5ZXJzQ291bnQ7KSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBrLCBsKTtcbiAgICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBweCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBweSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChweEluZGV4LCBweUluZGV4LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdEl0ZXJhdGlvblNpemVzLCByZXNvbHV0aW9uKSB7XG4gICAgdmFyIHBvc1ggPSBweEluZGV4ICogcHJlY2luY3RJdGVyYXRpb25TaXplcy5taW5XaWR0aDtcbiAgICB2YXIgcG9zWSA9IHB5SW5kZXggKiBwcmVjaW5jdEl0ZXJhdGlvblNpemVzLm1pbkhlaWdodDtcblxuICAgIGlmIChwb3NYICUgc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAhPT0gMCB8fCBwb3NZICUgc2l6ZUluSW1hZ2VTY2FsZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBzdGFydFByZWNpbmN0Um93SW5kZXggPSBwb3NZIC8gc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7XG4gICAgcmV0dXJuIHBvc1ggLyBzaXplSW5JbWFnZVNjYWxlLmhlaWdodCArIHN0YXJ0UHJlY2luY3RSb3dJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUodGlsZSkge1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSB0aWxlLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgIHZhciBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgdmFyIG1pbkhlaWdodCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgdmFyIG1heE51bVdpZGUgPSAwO1xuICAgIHZhciBtYXhOdW1IaWdoID0gMDtcbiAgICB2YXIgc2l6ZVBlckNvbXBvbmVudCA9IG5ldyBBcnJheShjb21wb25lbnRzQ291bnQpO1xuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICAgIHZhciBzaXplUGVyUmVzb2x1dGlvbiA9IG5ldyBBcnJheShkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgKyAxKTtcbiAgICAgIHZhciBtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgdmFyIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgdmFyIG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50ID0gMDtcbiAgICAgIHZhciBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgICB2YXIgc2NhbGUgPSAxO1xuXG4gICAgICBmb3IgKHZhciByID0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgdmFyIHdpZHRoQ3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0V2lkdGg7XG4gICAgICAgIHZhciBoZWlnaHRDdXJyZW50UmVzb2x1dGlvbiA9IHNjYWxlICogcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7XG4gICAgICAgIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWluKG1pbldpZHRoQ3VycmVudENvbXBvbmVudCwgd2lkdGhDdXJyZW50UmVzb2x1dGlvbik7XG4gICAgICAgIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50LCBoZWlnaHRDdXJyZW50UmVzb2x1dGlvbik7XG4gICAgICAgIG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5tYXgobWF4TnVtV2lkZUN1cnJlbnRDb21wb25lbnQsIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGUpO1xuICAgICAgICBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHNoaWdoKTtcbiAgICAgICAgc2l6ZVBlclJlc29sdXRpb25bcl0gPSB7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoQ3VycmVudFJlc29sdXRpb24sXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRDdXJyZW50UmVzb2x1dGlvblxuICAgICAgICB9O1xuICAgICAgICBzY2FsZSA8PD0gMTtcbiAgICAgIH1cblxuICAgICAgbWluV2lkdGggPSBNYXRoLm1pbihtaW5XaWR0aCwgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50KTtcbiAgICAgIG1pbkhlaWdodCA9IE1hdGgubWluKG1pbkhlaWdodCwgbWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCk7XG4gICAgICBtYXhOdW1XaWRlID0gTWF0aC5tYXgobWF4TnVtV2lkZSwgbWF4TnVtV2lkZUN1cnJlbnRDb21wb25lbnQpO1xuICAgICAgbWF4TnVtSGlnaCA9IE1hdGgubWF4KG1heE51bUhpZ2gsIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50KTtcbiAgICAgIHNpemVQZXJDb21wb25lbnRbY10gPSB7XG4gICAgICAgIHJlc29sdXRpb25zOiBzaXplUGVyUmVzb2x1dGlvbixcbiAgICAgICAgbWluV2lkdGg6IG1pbldpZHRoQ3VycmVudENvbXBvbmVudCxcbiAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50LFxuICAgICAgICBtYXhOdW1XaWRlOiBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCxcbiAgICAgICAgbWF4TnVtSGlnaDogbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBvbmVudHM6IHNpemVQZXJDb21wb25lbnQsXG4gICAgICBtaW5XaWR0aCxcbiAgICAgIG1pbkhlaWdodCxcbiAgICAgIG1heE51bVdpZGUsXG4gICAgICBtYXhOdW1IaWdoXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkUGFja2V0cyhjb250ZXh0KSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICB2YXIgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTtcbiAgICAgIHZhciBzdWJiYW5kcyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciByID0gMDsgciA8PSBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICB2YXIgYmxvY2tzRGltZW5zaW9ucyA9IGdldEJsb2Nrc0RpbWVuc2lvbnMoY29udGV4dCwgY29tcG9uZW50LCByKTtcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSB7fTtcbiAgICAgICAgdmFyIHNjYWxlID0gMSA8PCBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgLSByO1xuICAgICAgICByZXNvbHV0aW9uLnRyeDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBzY2FsZSk7XG4gICAgICAgIHJlc29sdXRpb24udHJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgICAgcmVzb2x1dGlvbi50cngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gc2NhbGUpO1xuICAgICAgICByZXNvbHV0aW9uLnRyeTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBzY2FsZSk7XG4gICAgICAgIHJlc29sdXRpb24ucmVzTGV2ZWwgPSByO1xuICAgICAgICBidWlsZFByZWNpbmN0cyhjb250ZXh0LCByZXNvbHV0aW9uLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgcmVzb2x1dGlvbnMucHVzaChyZXNvbHV0aW9uKTtcbiAgICAgICAgdmFyIHN1YmJhbmQ7XG5cbiAgICAgICAgaWYgKHIgPT09IDApIHtcbiAgICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgICAgc3ViYmFuZC50eXBlID0gXCJMTFwiO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gc2NhbGUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHJlc29sdXRpb24uc3ViYmFuZHMgPSBbc3ViYmFuZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGJzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gciArIDE7XG4gICAgICAgICAgdmFyIHJlc29sdXRpb25TdWJiYW5kcyA9IFtdO1xuICAgICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgICBzdWJiYW5kLnR5cGUgPSBcIkhMXCI7XG4gICAgICAgICAgc3ViYmFuZC50YngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gYnNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgICBzdWJiYW5kLnR5cGUgPSBcIkxIXCI7XG4gICAgICAgICAgc3ViYmFuZC50YngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gYnNjYWxlKTtcbiAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIGJzY2FsZSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgICBzdWJiYW5kLnR5cGUgPSBcIkhIXCI7XG4gICAgICAgICAgc3ViYmFuZC50YngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgc3ViYmFuZC50YnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgIHJlc29sdXRpb24uc3ViYmFuZHMgPSByZXNvbHV0aW9uU3ViYmFuZHM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29tcG9uZW50LnJlc29sdXRpb25zID0gcmVzb2x1dGlvbnM7XG4gICAgICBjb21wb25lbnQuc3ViYmFuZHMgPSBzdWJiYW5kcztcbiAgICB9XG5cbiAgICB2YXIgcHJvZ3Jlc3Npb25PcmRlciA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO1xuXG4gICAgc3dpdGNoIChwcm9ncmVzc2lvbk9yZGVyKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoYFVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICR7cHJvZ3Jlc3Npb25PcmRlcn1gKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIG9mZnNldCwgZGF0YUxlbmd0aCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICAgIHNraXBOZXh0Qml0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiByZWFkQml0cyhjb3VudCkge1xuICAgICAgd2hpbGUgKGJ1ZmZlclNpemUgPCBjb3VudCkge1xuICAgICAgICB2YXIgYiA9IGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dO1xuICAgICAgICBwb3NpdGlvbisrO1xuXG4gICAgICAgIGlmIChza2lwTmV4dEJpdCkge1xuICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCA3IHwgYjtcbiAgICAgICAgICBidWZmZXJTaXplICs9IDc7XG4gICAgICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgOCB8IGI7XG4gICAgICAgICAgYnVmZmVyU2l6ZSArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IDB4ZmYpIHtcbiAgICAgICAgICBza2lwTmV4dEJpdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnVmZmVyU2l6ZSAtPSBjb3VudDtcbiAgICAgIHJldHVybiBidWZmZXIgPj4+IGJ1ZmZlclNpemUgJiAoMSA8PCBjb3VudCkgLSAxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNraXBNYXJrZXJJZkVxdWFsKHZhbHVlKSB7XG4gICAgICBpZiAoZGF0YVtvZmZzZXQgKyBwb3NpdGlvbiAtIDFdID09PSAweGZmICYmIGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dID09PSB2YWx1ZSkge1xuICAgICAgICBza2lwQnl0ZXMoMSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gMHhmZiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uICsgMV0gPT09IHZhbHVlKSB7XG4gICAgICAgIHNraXBCeXRlcygyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBza2lwQnl0ZXMoY291bnQpIHtcbiAgICAgIHBvc2l0aW9uICs9IGNvdW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFsaWduVG9CeXRlKCkge1xuICAgICAgYnVmZmVyU2l6ZSA9IDA7XG5cbiAgICAgIGlmIChza2lwTmV4dEJpdCkge1xuICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRDb2RpbmdwYXNzZXMoKSB7XG4gICAgICBpZiAocmVhZEJpdHMoMSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWFkQml0cygxKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gcmVhZEJpdHMoMik7XG5cbiAgICAgIGlmICh2YWx1ZSA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICsgMztcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSByZWFkQml0cyg1KTtcblxuICAgICAgaWYgKHZhbHVlIDwgMzEpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICsgNjtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSByZWFkQml0cyg3KTtcbiAgICAgIHJldHVybiB2YWx1ZSArIDM3O1xuICAgIH1cblxuICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgIHZhciBzb3BNYXJrZXJVc2VkID0gY29udGV4dC5DT0Quc29wTWFya2VyVXNlZDtcbiAgICB2YXIgZXBoTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELmVwaE1hcmtlclVzZWQ7XG4gICAgdmFyIHBhY2tldHNJdGVyYXRvciA9IHRpbGUucGFja2V0c0l0ZXJhdG9yO1xuXG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgZGF0YUxlbmd0aCkge1xuICAgICAgYWxpZ25Ub0J5dGUoKTtcblxuICAgICAgaWYgKHNvcE1hcmtlclVzZWQgJiYgc2tpcE1hcmtlcklmRXF1YWwoMHg5MSkpIHtcbiAgICAgICAgc2tpcEJ5dGVzKDQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFja2V0ID0gcGFja2V0c0l0ZXJhdG9yLm5leHRQYWNrZXQoKTtcblxuICAgICAgaWYgKCFyZWFkQml0cygxKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxheWVyTnVtYmVyID0gcGFja2V0LmxheWVyTnVtYmVyO1xuICAgICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgICAgY29kZWJsb2NrO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYWNrZXQuY29kZWJsb2Nrcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvZGVibG9jayA9IHBhY2tldC5jb2RlYmxvY2tzW2ldO1xuICAgICAgICB2YXIgcHJlY2luY3QgPSBjb2RlYmxvY2sucHJlY2luY3Q7XG4gICAgICAgIHZhciBjb2RlYmxvY2tDb2x1bW4gPSBjb2RlYmxvY2suY2J4IC0gcHJlY2luY3QuY2J4TWluO1xuICAgICAgICB2YXIgY29kZWJsb2NrUm93ID0gY29kZWJsb2NrLmNieSAtIHByZWNpbmN0LmNieU1pbjtcbiAgICAgICAgdmFyIGNvZGVibG9ja0luY2x1ZGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBmaXJzdFRpbWVJbmNsdXNpb24gPSBmYWxzZTtcbiAgICAgICAgdmFyIHZhbHVlUmVhZHk7XG5cbiAgICAgICAgaWYgKGNvZGVibG9jay5pbmNsdWRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29kZWJsb2NrSW5jbHVkZWQgPSAhIXJlYWRCaXRzKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWNpbmN0ID0gY29kZWJsb2NrLnByZWNpbmN0O1xuICAgICAgICAgIHZhciBpbmNsdXNpb25UcmVlLCB6ZXJvQml0UGxhbmVzVHJlZTtcblxuICAgICAgICAgIGlmIChwcmVjaW5jdC5pbmNsdXNpb25UcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGluY2x1c2lvblRyZWUgPSBwcmVjaW5jdC5pbmNsdXNpb25UcmVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSBwcmVjaW5jdC5jYnhNYXggLSBwcmVjaW5jdC5jYnhNaW4gKyAxO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHByZWNpbmN0LmNieU1heCAtIHByZWNpbmN0LmNieU1pbiArIDE7XG4gICAgICAgICAgICBpbmNsdXNpb25UcmVlID0gbmV3IEluY2x1c2lvblRyZWUod2lkdGgsIGhlaWdodCwgbGF5ZXJOdW1iZXIpO1xuICAgICAgICAgICAgemVyb0JpdFBsYW5lc1RyZWUgPSBuZXcgVGFnVHJlZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIHByZWNpbmN0LmluY2x1c2lvblRyZWUgPSBpbmNsdXNpb25UcmVlO1xuICAgICAgICAgICAgcHJlY2luY3QuemVyb0JpdFBsYW5lc1RyZWUgPSB6ZXJvQml0UGxhbmVzVHJlZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5jbHVzaW9uVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1JvdywgbGF5ZXJOdW1iZXIpKSB7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVJlYWR5ID0gIWluY2x1c2lvblRyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLmluY2x1ZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gZmlyc3RUaW1lSW5jbHVzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmNsdXNpb25UcmVlLmluY3JlbWVudFZhbHVlKGxheWVyTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29kZWJsb2NrSW5jbHVkZWQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaXJzdFRpbWVJbmNsdXNpb24pIHtcbiAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZSA9IHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlO1xuICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlLnJlc2V0KGNvZGVibG9ja0NvbHVtbiwgY29kZWJsb2NrUm93KTtcblxuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVSZWFkeSA9ICF6ZXJvQml0UGxhbmVzVHJlZS5uZXh0TGV2ZWwoKTtcblxuICAgICAgICAgICAgICBpZiAodmFsdWVSZWFkeSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5pbmNyZW1lbnRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvZGVibG9jay56ZXJvQml0UGxhbmVzID0gemVyb0JpdFBsYW5lc1RyZWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY29kaW5ncGFzc2VzID0gcmVhZENvZGluZ3Bhc3NlcygpO1xuXG4gICAgICAgIHdoaWxlIChyZWFkQml0cygxKSkge1xuICAgICAgICAgIGNvZGVibG9jay5MYmxvY2srKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjb2RpbmdwYXNzZXNMb2cyID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKGNvZGluZ3Bhc3Nlcyk7XG4gICAgICAgIHZhciBiaXRzID0gKGNvZGluZ3Bhc3NlcyA8IDEgPDwgY29kaW5ncGFzc2VzTG9nMiA/IGNvZGluZ3Bhc3Nlc0xvZzIgLSAxIDogY29kaW5ncGFzc2VzTG9nMikgKyBjb2RlYmxvY2suTGJsb2NrO1xuICAgICAgICB2YXIgY29kZWREYXRhTGVuZ3RoID0gcmVhZEJpdHMoYml0cyk7XG4gICAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICAgIGNvZGVibG9jayxcbiAgICAgICAgICBjb2RpbmdwYXNzZXMsXG4gICAgICAgICAgZGF0YUxlbmd0aDogY29kZWREYXRhTGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhbGlnblRvQnl0ZSgpO1xuXG4gICAgICBpZiAoZXBoTWFya2VyVXNlZCkge1xuICAgICAgICBza2lwTWFya2VySWZFcXVhbCgweDkyKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHBhY2tldEl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICBjb2RlYmxvY2sgPSBwYWNrZXRJdGVtLmNvZGVibG9jaztcblxuICAgICAgICBpZiAoY29kZWJsb2NrLmRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvZGVibG9jay5kYXRhID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlYmxvY2suZGF0YS5wdXNoKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHN0YXJ0OiBvZmZzZXQgKyBwb3NpdGlvbixcbiAgICAgICAgICBlbmQ6IG9mZnNldCArIHBvc2l0aW9uICsgcGFja2V0SXRlbS5kYXRhTGVuZ3RoLFxuICAgICAgICAgIGNvZGluZ3Bhc3NlczogcGFja2V0SXRlbS5jb2RpbmdwYXNzZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHBvc2l0aW9uICs9IHBhY2tldEl0ZW0uZGF0YUxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5Q29lZmZpY2llbnRzKGNvZWZmaWNpZW50cywgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIHN1YmJhbmQsIGRlbHRhLCBtYiwgcmV2ZXJzaWJsZSwgc2VnbWVudGF0aW9uU3ltYm9sVXNlZCkge1xuICAgIHZhciB4MCA9IHN1YmJhbmQudGJ4MDtcbiAgICB2YXIgeTAgPSBzdWJiYW5kLnRieTA7XG4gICAgdmFyIHdpZHRoID0gc3ViYmFuZC50YngxIC0gc3ViYmFuZC50YngwO1xuICAgIHZhciBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuICAgIHZhciByaWdodCA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMCkgPT09IFwiSFwiID8gMSA6IDA7XG4gICAgdmFyIGJvdHRvbSA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMSkgPT09IFwiSFwiID8gbGV2ZWxXaWR0aCA6IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb2RlYmxvY2tzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHZhciBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2ldO1xuICAgICAgdmFyIGJsb2NrV2lkdGggPSBjb2RlYmxvY2sudGJ4MV8gLSBjb2RlYmxvY2sudGJ4MF87XG4gICAgICB2YXIgYmxvY2tIZWlnaHQgPSBjb2RlYmxvY2sudGJ5MV8gLSBjb2RlYmxvY2sudGJ5MF87XG5cbiAgICAgIGlmIChibG9ja1dpZHRoID09PSAwIHx8IGJsb2NrSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZWJsb2NrLmRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJpdE1vZGVsLCBjdXJyZW50Q29kaW5ncGFzc1R5cGU7XG4gICAgICBiaXRNb2RlbCA9IG5ldyBCaXRNb2RlbChibG9ja1dpZHRoLCBibG9ja0hlaWdodCwgY29kZWJsb2NrLnN1YmJhbmRUeXBlLCBjb2RlYmxvY2suemVyb0JpdFBsYW5lcywgbWIpO1xuICAgICAgY3VycmVudENvZGluZ3Bhc3NUeXBlID0gMjtcbiAgICAgIHZhciBkYXRhID0gY29kZWJsb2NrLmRhdGEsXG4gICAgICAgICAgdG90YWxMZW5ndGggPSAwLFxuICAgICAgICAgIGNvZGluZ3Bhc3NlcyA9IDA7XG4gICAgICB2YXIgaiwgamosIGRhdGFJdGVtO1xuXG4gICAgICBmb3IgKGogPSAwLCBqaiA9IGRhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBkYXRhSXRlbSA9IGRhdGFbal07XG4gICAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFJdGVtLmVuZCAtIGRhdGFJdGVtLnN0YXJ0O1xuICAgICAgICBjb2RpbmdwYXNzZXMgKz0gZGF0YUl0ZW0uY29kaW5ncGFzc2VzO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5jb2RlZERhdGEgPSBuZXcgVWludDhBcnJheSh0b3RhbExlbmd0aCk7XG4gICAgICB2YXIgcG9zaXRpb24gPSAwO1xuXG4gICAgICBmb3IgKGogPSAwLCBqaiA9IGRhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBkYXRhSXRlbSA9IGRhdGFbal07XG4gICAgICAgIHZhciBjaHVuayA9IGRhdGFJdGVtLmRhdGEuc3ViYXJyYXkoZGF0YUl0ZW0uc3RhcnQsIGRhdGFJdGVtLmVuZCk7XG4gICAgICAgIGVuY29kZWREYXRhLnNldChjaHVuaywgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSBjaHVuay5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvZGVyID0gbmV3IF9hcml0aG1ldGljX2RlY29kZXIuQXJpdGhtZXRpY0RlY29kZXIoZW5jb2RlZERhdGEsIDAsIHRvdGFsTGVuZ3RoKTtcbiAgICAgIGJpdE1vZGVsLnNldERlY29kZXIoZGVjb2Rlcik7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb2RpbmdwYXNzZXM7IGorKykge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRDb2RpbmdwYXNzVHlwZSkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGJpdE1vZGVsLnJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBiaXRNb2RlbC5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBiaXRNb2RlbC5ydW5DbGVhbnVwUGFzcygpO1xuXG4gICAgICAgICAgICBpZiAoc2VnbWVudGF0aW9uU3ltYm9sVXNlZCkge1xuICAgICAgICAgICAgICBiaXRNb2RlbC5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRDb2RpbmdwYXNzVHlwZSA9IChjdXJyZW50Q29kaW5ncGFzc1R5cGUgKyAxKSAlIDM7XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXQgPSBjb2RlYmxvY2sudGJ4MF8gLSB4MCArIChjb2RlYmxvY2sudGJ5MF8gLSB5MCkgKiB3aWR0aDtcbiAgICAgIHZhciBzaWduID0gYml0TW9kZWwuY29lZmZpY2VudHNTaWduO1xuICAgICAgdmFyIG1hZ25pdHVkZSA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgdmFyIGJpdHNEZWNvZGVkID0gYml0TW9kZWwuYml0c0RlY29kZWQ7XG4gICAgICB2YXIgbWFnbml0dWRlQ29ycmVjdGlvbiA9IHJldmVyc2libGUgPyAwIDogMC41O1xuICAgICAgdmFyIGssIG4sIG5iO1xuICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgdmFyIGludGVybGVhdmUgPSBzdWJiYW5kLnR5cGUgIT09IFwiTExcIjtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGJsb2NrSGVpZ2h0OyBqKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IG9mZnNldCAvIHdpZHRoIHwgMDtcbiAgICAgICAgdmFyIGxldmVsT2Zmc2V0ID0gMiAqIHJvdyAqIChsZXZlbFdpZHRoIC0gd2lkdGgpICsgcmlnaHQgKyBib3R0b207XG5cbiAgICAgICAgZm9yIChrID0gMDsgayA8IGJsb2NrV2lkdGg7IGsrKykge1xuICAgICAgICAgIG4gPSBtYWduaXR1ZGVbcG9zaXRpb25dO1xuXG4gICAgICAgICAgaWYgKG4gIT09IDApIHtcbiAgICAgICAgICAgIG4gPSAobiArIG1hZ25pdHVkZUNvcnJlY3Rpb24pICogZGVsdGE7XG5cbiAgICAgICAgICAgIGlmIChzaWduW3Bvc2l0aW9uXSAhPT0gMCkge1xuICAgICAgICAgICAgICBuID0gLW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5iID0gYml0c0RlY29kZWRbcG9zaXRpb25dO1xuICAgICAgICAgICAgdmFyIHBvcyA9IGludGVybGVhdmUgPyBsZXZlbE9mZnNldCArIChvZmZzZXQgPDwgMSkgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgIGlmIChyZXZlcnNpYmxlICYmIG5iID49IG1iKSB7XG4gICAgICAgICAgICAgIGNvZWZmaWNpZW50c1twb3NdID0gbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvZWZmaWNpZW50c1twb3NdID0gbiAqICgxIDw8IG1iIC0gbmIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgIHBvc2l0aW9uKys7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gd2lkdGggLSBibG9ja1dpZHRoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoY29udGV4dCwgdGlsZSwgYykge1xuICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgdmFyIGNvZGluZ1N0eWxlUGFyYW1ldGVycyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gICAgdmFyIHF1YW50aXphdGlvblBhcmFtZXRlcnMgPSBjb21wb25lbnQucXVhbnRpemF0aW9uUGFyYW1ldGVycztcbiAgICB2YXIgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICB2YXIgc3BxY2RzID0gcXVhbnRpemF0aW9uUGFyYW1ldGVycy5TUHFjZHM7XG4gICAgdmFyIHNjYWxhckV4cG91bmRlZCA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuc2NhbGFyRXhwb3VuZGVkO1xuICAgIHZhciBndWFyZEJpdHMgPSBxdWFudGl6YXRpb25QYXJhbWV0ZXJzLmd1YXJkQml0cztcbiAgICB2YXIgc2VnbWVudGF0aW9uU3ltYm9sVXNlZCA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5zZWdtZW50YXRpb25TeW1ib2xVc2VkO1xuICAgIHZhciBwcmVjaXNpb24gPSBjb250ZXh0LmNvbXBvbmVudHNbY10ucHJlY2lzaW9uO1xuICAgIHZhciByZXZlcnNpYmxlID0gY29kaW5nU3R5bGVQYXJhbWV0ZXJzLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbjtcbiAgICB2YXIgdHJhbnNmb3JtID0gcmV2ZXJzaWJsZSA/IG5ldyBSZXZlcnNpYmxlVHJhbnNmb3JtKCkgOiBuZXcgSXJyZXZlcnNpYmxlVHJhbnNmb3JtKCk7XG4gICAgdmFyIHN1YmJhbmRDb2VmZmljaWVudHMgPSBbXTtcbiAgICB2YXIgYiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IGkrKykge1xuICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbaV07XG4gICAgICB2YXIgd2lkdGggPSByZXNvbHV0aW9uLnRyeDEgLSByZXNvbHV0aW9uLnRyeDA7XG4gICAgICB2YXIgaGVpZ2h0ID0gcmVzb2x1dGlvbi50cnkxIC0gcmVzb2x1dGlvbi50cnkwO1xuICAgICAgdmFyIGNvZWZmaWNpZW50cyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZXNvbHV0aW9uLnN1YmJhbmRzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgdmFyIG11LCBlcHNpbG9uO1xuXG4gICAgICAgIGlmICghc2NhbGFyRXhwb3VuZGVkKSB7XG4gICAgICAgICAgbXUgPSBzcHFjZHNbMF0ubXU7XG4gICAgICAgICAgZXBzaWxvbiA9IHNwcWNkc1swXS5lcHNpbG9uICsgKGkgPiAwID8gMSAtIGkgOiAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtdSA9IHNwcWNkc1tiXS5tdTtcbiAgICAgICAgICBlcHNpbG9uID0gc3BxY2RzW2JdLmVwc2lsb247XG4gICAgICAgICAgYisrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN1YmJhbmQgPSByZXNvbHV0aW9uLnN1YmJhbmRzW2pdO1xuICAgICAgICB2YXIgZ2FpbkxvZzIgPSBTdWJiYW5kc0dhaW5Mb2cyW3N1YmJhbmQudHlwZV07XG4gICAgICAgIHZhciBkZWx0YSA9IHJldmVyc2libGUgPyAxIDogMiAqKiAocHJlY2lzaW9uICsgZ2FpbkxvZzIgLSBlcHNpbG9uKSAqICgxICsgbXUgLyAyMDQ4KTtcbiAgICAgICAgdmFyIG1iID0gZ3VhcmRCaXRzICsgZXBzaWxvbiAtIDE7XG4gICAgICAgIGNvcHlDb2VmZmljaWVudHMoY29lZmZpY2llbnRzLCB3aWR0aCwgaGVpZ2h0LCBzdWJiYW5kLCBkZWx0YSwgbWIsIHJldmVyc2libGUsIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQpO1xuICAgICAgfVxuXG4gICAgICBzdWJiYW5kQ29lZmZpY2llbnRzLnB1c2goe1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpdGVtczogY29lZmZpY2llbnRzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gdHJhbnNmb3JtLmNhbGN1bGF0ZShzdWJiYW5kQ29lZmZpY2llbnRzLCBjb21wb25lbnQudGN4MCwgY29tcG9uZW50LnRjeTApO1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBjb21wb25lbnQudGN4MCxcbiAgICAgIHRvcDogY29tcG9uZW50LnRjeTAsXG4gICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0LFxuICAgICAgaXRlbXM6IHJlc3VsdC5pdGVtc1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpIHtcbiAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgdmFyIGNvbXBvbmVudHMgPSBjb250ZXh0LmNvbXBvbmVudHM7XG4gICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgIHZhciByZXN1bHRJbWFnZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbnRleHQudGlsZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW2ldO1xuICAgICAgdmFyIHRyYW5zZm9ybWVkVGlsZXMgPSBbXTtcbiAgICAgIHZhciBjO1xuXG4gICAgICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgdHJhbnNmb3JtZWRUaWxlc1tjXSA9IHRyYW5zZm9ybVRpbGUoY29udGV4dCwgdGlsZSwgYyk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0aWxlMCA9IHRyYW5zZm9ybWVkVGlsZXNbMF07XG4gICAgICB2YXIgb3V0ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRpbGUwLml0ZW1zLmxlbmd0aCAqIGNvbXBvbmVudHNDb3VudCk7XG4gICAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBsZWZ0OiB0aWxlMC5sZWZ0LFxuICAgICAgICB0b3A6IHRpbGUwLnRvcCxcbiAgICAgICAgd2lkdGg6IHRpbGUwLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IHRpbGUwLmhlaWdodCxcbiAgICAgICAgaXRlbXM6IG91dFxuICAgICAgfTtcbiAgICAgIHZhciBzaGlmdCwgb2Zmc2V0O1xuICAgICAgdmFyIHBvcyA9IDAsXG4gICAgICAgICAgaixcbiAgICAgICAgICBqaixcbiAgICAgICAgICB5MCxcbiAgICAgICAgICB5MSxcbiAgICAgICAgICB5MjtcblxuICAgICAgaWYgKHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSkge1xuICAgICAgICB2YXIgZm91ckNvbXBvbmVudHMgPSBjb21wb25lbnRzQ291bnQgPT09IDQ7XG4gICAgICAgIHZhciB5MGl0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1swXS5pdGVtcztcbiAgICAgICAgdmFyIHkxaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzFdLml0ZW1zO1xuICAgICAgICB2YXIgeTJpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMl0uaXRlbXM7XG4gICAgICAgIHZhciB5M2l0ZW1zID0gZm91ckNvbXBvbmVudHMgPyB0cmFuc2Zvcm1lZFRpbGVzWzNdLml0ZW1zIDogbnVsbDtcbiAgICAgICAgc2hpZnQgPSBjb21wb25lbnRzWzBdLnByZWNpc2lvbiAtIDg7XG4gICAgICAgIG9mZnNldCA9ICgxMjggPDwgc2hpZnQpICsgMC41O1xuICAgICAgICB2YXIgY29tcG9uZW50MCA9IHRpbGUuY29tcG9uZW50c1swXTtcbiAgICAgICAgdmFyIGFscGhhMDEgPSBjb21wb25lbnRzQ291bnQgLSAzO1xuICAgICAgICBqaiA9IHkwaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghY29tcG9uZW50MC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGpqOyBqKyssIHBvcyArPSBhbHBoYTAxKSB7XG4gICAgICAgICAgICB5MCA9IHkwaXRlbXNbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgICB5MiA9IHkyaXRlbXNbal07XG4gICAgICAgICAgICBvdXRbcG9zKytdID0geTAgKyAxLjQwMiAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgICAgb3V0W3BvcysrXSA9IHkwIC0gMC4zNDQxMyAqIHkxIC0gMC43MTQxNCAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgICAgb3V0W3BvcysrXSA9IHkwICsgMS43NzIgKiB5MSA+PiBzaGlmdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGpqOyBqKyssIHBvcyArPSBhbHBoYTAxKSB7XG4gICAgICAgICAgICB5MCA9IHkwaXRlbXNbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgICB5MiA9IHkyaXRlbXNbal07XG4gICAgICAgICAgICBjb25zdCBnID0geTAgLSAoeTIgKyB5MSA+PiAyKTtcbiAgICAgICAgICAgIG91dFtwb3MrK10gPSBnICsgeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgICBvdXRbcG9zKytdID0gZyA+PiBzaGlmdDtcbiAgICAgICAgICAgIG91dFtwb3MrK10gPSBnICsgeTEgPj4gc2hpZnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvdXJDb21wb25lbnRzKSB7XG4gICAgICAgICAgZm9yIChqID0gMCwgcG9zID0gMzsgaiA8IGpqOyBqKyssIHBvcyArPSA0KSB7XG4gICAgICAgICAgICBvdXRbcG9zXSA9IHkzaXRlbXNbal0gKyBvZmZzZXQgPj4gc2hpZnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICB2YXIgaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzW2NdLml0ZW1zO1xuICAgICAgICAgIHNoaWZ0ID0gY29tcG9uZW50c1tjXS5wcmVjaXNpb24gLSA4O1xuICAgICAgICAgIG9mZnNldCA9ICgxMjggPDwgc2hpZnQpICsgMC41O1xuXG4gICAgICAgICAgZm9yIChwb3MgPSBjLCBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICBvdXRbcG9zXSA9IGl0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICAgICAgcG9zICs9IGNvbXBvbmVudHNDb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0SW1hZ2VzLnB1c2gocmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0SW1hZ2VzO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZUluZGV4KSB7XG4gICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICB2YXIgcWNkT3JRY2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5RQ0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLlFDRDtcbiAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gcWNkT3JRY2M7XG4gICAgICB2YXIgY29kT3JDb2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgICAgIGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb2RPckNvYztcbiAgICB9XG5cbiAgICB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgfVxuXG4gIHZhciBUYWdUcmVlID0gZnVuY3Rpb24gVGFnVHJlZUNsb3N1cmUoKSB7XG4gICAgZnVuY3Rpb24gVGFnVHJlZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKSArIDE7XG4gICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldmVsc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsZXZlbCA9IHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2gobGV2ZWwpO1xuICAgICAgICB3aWR0aCA9IE1hdGguY2VpbCh3aWR0aCAvIDIpO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgVGFnVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICByZXNldDogZnVuY3Rpb24gVGFnVHJlZV9yZXNldChpLCBqKSB7XG4gICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSAwLFxuICAgICAgICAgICAgdmFsdWUgPSAwLFxuICAgICAgICAgICAgbGV2ZWw7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRMZXZlbCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkge1xuICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBpICsgaiAqIGxldmVsLndpZHRoO1xuXG4gICAgICAgICAgaWYgKGxldmVsLml0ZW1zW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldmVsLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgaSA+Pj0gMTtcbiAgICAgICAgICBqID4+PSAxO1xuICAgICAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudExldmVsLS07XG4gICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBpbmNyZW1lbnRWYWx1ZTogZnVuY3Rpb24gVGFnVHJlZV9pbmNyZW1lbnRWYWx1ZSgpIHtcbiAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0rKztcbiAgICAgIH0sXG4gICAgICBuZXh0TGV2ZWw6IGZ1bmN0aW9uIFRhZ1RyZWVfbmV4dExldmVsKCkge1xuICAgICAgICB2YXIgY3VycmVudExldmVsID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgIHZhciB2YWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcbiAgICAgICAgY3VycmVudExldmVsLS07XG5cbiAgICAgICAgaWYgKGN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRhZ1RyZWU7XG4gIH0oKTtcblxuICB2YXIgSW5jbHVzaW9uVHJlZSA9IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVDbG9zdXJlKCkge1xuICAgIGZ1bmN0aW9uIEluY2x1c2lvblRyZWUod2lkdGgsIGhlaWdodCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgbGV2ZWxzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKSArIDE7XG4gICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxldmVsc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0KTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgaXRlbXNbal0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgIGl0ZW1zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGV2ZWxzLnB1c2gobGV2ZWwpO1xuICAgICAgICB3aWR0aCA9IE1hdGguY2VpbCh3aWR0aCAvIDIpO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgSW5jbHVzaW9uVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICByZXNldDogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9yZXNldChpLCBqLCBzdG9wVmFsdWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRMZXZlbCA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRMZXZlbCA8IHRoaXMubGV2ZWxzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgdmFyIGluZGV4ID0gaSArIGogKiBsZXZlbC53aWR0aDtcbiAgICAgICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMHhmZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID4gc3RvcFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaSA+Pj0gMTtcbiAgICAgICAgICBqID4+PSAxO1xuICAgICAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWwgLSAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBpbmNyZW1lbnRWYWx1ZTogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9pbmNyZW1lbnRWYWx1ZShzdG9wVmFsdWUpIHtcbiAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSBzdG9wVmFsdWUgKyAxO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICAgICAgfSxcbiAgICAgIHByb3BhZ2F0ZVZhbHVlczogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9wcm9wYWdhdGVWYWx1ZXMoKSB7XG4gICAgICAgIHZhciBsZXZlbEluZGV4ID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW2xldmVsSW5kZXhdO1xuICAgICAgICB2YXIgY3VycmVudFZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgtLWxldmVsSW5kZXggPj0gMCkge1xuICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbbGV2ZWxJbmRleF07XG4gICAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbmV4dExldmVsOiBmdW5jdGlvbiBJbmNsdXNpb25UcmVlX25leHRMZXZlbCgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRMZXZlbCA9IHRoaXMuY3VycmVudExldmVsO1xuICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tjdXJyZW50TGV2ZWxdO1xuICAgICAgICB2YXIgdmFsdWUgPSBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF07XG4gICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IDB4ZmY7XG4gICAgICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgICAgIGlmIChjdXJyZW50TGV2ZWwgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEluY2x1c2lvblRyZWU7XG4gIH0oKTtcblxuICB2YXIgQml0TW9kZWwgPSBmdW5jdGlvbiBCaXRNb2RlbENsb3N1cmUoKSB7XG4gICAgdmFyIFVOSUZPUk1fQ09OVEVYVCA9IDE3O1xuICAgIHZhciBSVU5MRU5HVEhfQ09OVEVYVCA9IDE4O1xuICAgIHZhciBMTEFuZExIQ29udGV4dHNMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCA1LCA4LCAwLCAzLCA3LCA4LCAwLCA0LCA3LCA4LCAwLCAwLCAwLCAwLCAwLCAxLCA2LCA4LCAwLCAzLCA3LCA4LCAwLCA0LCA3LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCA2LCA4LCAwLCAzLCA3LCA4LCAwLCA0LCA3LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCA2LCA4LCAwLCAzLCA3LCA4LCAwLCA0LCA3LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCA2LCA4LCAwLCAzLCA3LCA4LCAwLCA0LCA3LCA4XSk7XG4gICAgdmFyIEhMQ29udGV4dExhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDMsIDQsIDAsIDUsIDcsIDcsIDAsIDgsIDgsIDgsIDAsIDAsIDAsIDAsIDAsIDEsIDMsIDQsIDAsIDYsIDcsIDcsIDAsIDgsIDgsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDAsIDYsIDcsIDcsIDAsIDgsIDgsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDAsIDYsIDcsIDcsIDAsIDgsIDgsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDAsIDYsIDcsIDcsIDAsIDgsIDgsIDhdKTtcbiAgICB2YXIgSEhDb250ZXh0TGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMCwgMSwgMiwgMiwgMCwgMiwgMiwgMiwgMCwgMCwgMCwgMCwgMCwgMywgNCwgNSwgMCwgNCwgNSwgNSwgMCwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgNiwgNywgNywgMCwgNywgNywgNywgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOF0pO1xuXG4gICAgZnVuY3Rpb24gQml0TW9kZWwod2lkdGgsIGhlaWdodCwgc3ViYmFuZCwgemVyb0JpdFBsYW5lcywgbWIpIHtcbiAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgbGV0IGNvbnRleHRMYWJlbFRhYmxlO1xuXG4gICAgICBpZiAoc3ViYmFuZCA9PT0gXCJISFwiKSB7XG4gICAgICAgIGNvbnRleHRMYWJlbFRhYmxlID0gSEhDb250ZXh0TGFiZWw7XG4gICAgICB9IGVsc2UgaWYgKHN1YmJhbmQgPT09IFwiSExcIikge1xuICAgICAgICBjb250ZXh0TGFiZWxUYWJsZSA9IEhMQ29udGV4dExhYmVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dExhYmVsVGFibGUgPSBMTEFuZExIQ29udGV4dHNMYWJlbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250ZXh0TGFiZWxUYWJsZSA9IGNvbnRleHRMYWJlbFRhYmxlO1xuICAgICAgdmFyIGNvZWZmaWNpZW50Q291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB0aGlzLmNvZWZmaWNlbnRzU2lnbiA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgbGV0IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuXG4gICAgICBpZiAobWIgPiAxNCkge1xuICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZSA9IG5ldyBVaW50MzJBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH0gZWxzZSBpZiAobWIgPiA2KSB7XG4gICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gbmV3IFVpbnQxNkFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGUgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSA9IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgdGhpcy5wcm9jZXNzaW5nRmxhZ3MgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIHZhciBiaXRzRGVjb2RlZCA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuXG4gICAgICBpZiAoemVyb0JpdFBsYW5lcyAhPT0gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZWZmaWNpZW50Q291bnQ7IGkrKykge1xuICAgICAgICAgIGJpdHNEZWNvZGVkW2ldID0gemVyb0JpdFBsYW5lcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmJpdHNEZWNvZGVkID0gYml0c0RlY29kZWQ7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgQml0TW9kZWwucHJvdG90eXBlID0ge1xuICAgICAgc2V0RGVjb2RlcjogZnVuY3Rpb24gQml0TW9kZWxfc2V0RGVjb2RlcihkZWNvZGVyKSB7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgICB9LFxuICAgICAgcmVzZXQ6IGZ1bmN0aW9uIEJpdE1vZGVsX3Jlc2V0KCkge1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbmV3IEludDhBcnJheSgxOSk7XG4gICAgICAgIHRoaXMuY29udGV4dHNbMF0gPSA0IDw8IDEgfCAwO1xuICAgICAgICB0aGlzLmNvbnRleHRzW1VOSUZPUk1fQ09OVEVYVF0gPSA0NiA8PCAxIHwgMDtcbiAgICAgICAgdGhpcy5jb250ZXh0c1tSVU5MRU5HVEhfQ09OVEVYVF0gPSAzIDw8IDEgfCAwO1xuICAgICAgfSxcbiAgICAgIHNldE5laWdoYm9yc1NpZ25pZmljYW5jZTogZnVuY3Rpb24gQml0TW9kZWxfc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgdmFyIGxlZnQgPSBjb2x1bW4gPiAwO1xuICAgICAgICB2YXIgcmlnaHQgPSBjb2x1bW4gKyAxIDwgd2lkdGg7XG4gICAgICAgIHZhciBpO1xuXG4gICAgICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICAgICAgaSA9IGluZGV4IC0gd2lkdGg7XG5cbiAgICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpXSArPSAweDA0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdyArIDEgPCBoZWlnaHQpIHtcbiAgICAgICAgICBpID0gaW5kZXggKyB3aWR0aDtcblxuICAgICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSAtIDFdICs9IDB4MTA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSArIDFdICs9IDB4MTA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCAtIDFdICs9IDB4MDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXggKyAxXSArPSAweDAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XSB8PSAweDgwO1xuICAgICAgfSxcbiAgICAgIHJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzczogZnVuY3Rpb24gQml0TW9kZWxfcnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCkge1xuICAgICAgICB2YXIgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICB2YXIgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgICB2YXIgY29lZmZpY2VudHNTaWduID0gdGhpcy5jb2VmZmljZW50c1NpZ247XG4gICAgICAgIHZhciBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgICAgdmFyIHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgbGFiZWxzID0gdGhpcy5jb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgICAgdmFyIHByb2Nlc3NlZEludmVyc2VNYXNrID0gfjE7XG4gICAgICAgIHZhciBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgICAgdmFyIGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG5cbiAgICAgICAgZm9yICh2YXIgaTAgPSAwOyBpMCA8IGhlaWdodDsgaTAgKz0gNCkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gaTAgKiB3aWR0aCArIGo7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkxID0gMDsgaTEgPCA0OyBpMSsrLCBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgICB2YXIgaSA9IGkwICsgaTE7XG5cbiAgICAgICAgICAgICAgaWYgKGkgPj0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdICY9IHByb2Nlc3NlZEludmVyc2VNYXNrO1xuXG4gICAgICAgICAgICAgIGlmIChjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgIW5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICAgIHZhciBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgc2lnbiA9IHRoaXMuZGVjb2RlU2lnbkJpdChpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29lZmZpY2VudHNTaWduW2luZGV4XSA9IHNpZ247XG4gICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBwcm9jZXNzZWRNYXNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlY29kZVNpZ25CaXQ6IGZ1bmN0aW9uIEJpdE1vZGVsX2RlY29kZVNpZ25CaXQocm93LCBjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICB2YXIgY29udHJpYnV0aW9uLCBzaWduMCwgc2lnbjEsIHNpZ25pZmljYW5jZTE7XG4gICAgICAgIHZhciBjb250ZXh0TGFiZWwsIGRlY29kZWQ7XG4gICAgICAgIHNpZ25pZmljYW5jZTEgPSBjb2x1bW4gPiAwICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4IC0gMV0gIT09IDA7XG5cbiAgICAgICAgaWYgKGNvbHVtbiArIDEgPCB3aWR0aCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCArIDFdICE9PSAwKSB7XG4gICAgICAgICAgc2lnbjEgPSBjb2VmZmljZW50c1NpZ25baW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIDFdO1xuICAgICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgc2lnbjAgPSBjb2VmZmljZW50c1NpZ25baW5kZXggLSAxXTtcbiAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cmlidXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhvcml6b250YWxDb250cmlidXRpb24gPSAzICogY29udHJpYnV0aW9uO1xuICAgICAgICBzaWduaWZpY2FuY2UxID0gcm93ID4gMCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCAtIHdpZHRoXSAhPT0gMDtcblxuICAgICAgICBpZiAocm93ICsgMSA8IGhlaWdodCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCArIHdpZHRoXSAhPT0gMCkge1xuICAgICAgICAgIHNpZ24xID0gY29lZmZpY2VudHNTaWduW2luZGV4ICsgd2lkdGhdO1xuXG4gICAgICAgICAgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gd2lkdGhdO1xuICAgICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjAgKyBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjEgLSBzaWduMSArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMCArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250cmlidXRpb24gPj0gMCkge1xuICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgKyBjb250cmlidXRpb247XG4gICAgICAgICAgZGVjb2RlZCA9IHRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dExhYmVsID0gOSAtIGNvbnRyaWJ1dGlvbjtcbiAgICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKSBeIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICAgIH0sXG4gICAgICBydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzczogZnVuY3Rpb24gQml0TW9kZWxfcnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKSB7XG4gICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIHZhciBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICAgIHZhciBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgICAgdmFyIHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuICAgICAgICB2YXIgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQ7XG4gICAgICAgIHZhciB3aWR0aDQgPSB3aWR0aCAqIDQ7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXgwID0gMCwgaW5kZXhOZXh0OyBpbmRleDAgPCBsZW5ndGg7IGluZGV4MCA9IGluZGV4TmV4dCkge1xuICAgICAgICAgIGluZGV4TmV4dCA9IE1hdGgubWluKGxlbmd0aCwgaW5kZXgwICsgd2lkdGg0KTtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSBpbmRleDAgKyBqOyBpbmRleCA8IGluZGV4TmV4dDsgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgaWYgKCFjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBwcm9jZXNzZWRNYXNrKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIGNvbnRleHRMYWJlbCA9IDE2O1xuXG4gICAgICAgICAgICAgIGlmICgocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIGZpcnN0TWFnbml0dWRlQml0TWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIF49IGZpcnN0TWFnbml0dWRlQml0TWFzaztcbiAgICAgICAgICAgICAgICB2YXIgc2lnbmlmaWNhbmNlID0gbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XSAmIDEyNztcbiAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBzaWduaWZpY2FuY2UgPT09IDAgPyAxNSA6IDE0O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIGJpdCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIDw8IDEgfCBiaXQ7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IHByb2Nlc3NlZE1hc2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcnVuQ2xlYW51cFBhc3M6IGZ1bmN0aW9uIEJpdE1vZGVsX3J1bkNsZWFudXBQYXNzKCkge1xuICAgICAgICB2YXIgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgIHZhciBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICAgIHZhciBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdmFyIGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICAgIHZhciBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgICAgdmFyIHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgICB2YXIgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgICAgdmFyIG9uZVJvd0Rvd24gPSB3aWR0aDtcbiAgICAgICAgdmFyIHR3b1Jvd3NEb3duID0gd2lkdGggKiAyO1xuICAgICAgICB2YXIgdGhyZWVSb3dzRG93biA9IHdpZHRoICogMztcbiAgICAgICAgdmFyIGlOZXh0O1xuXG4gICAgICAgIGZvciAodmFyIGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwID0gaU5leHQpIHtcbiAgICAgICAgICBpTmV4dCA9IE1hdGgubWluKGkwICsgNCwgaGVpZ2h0KTtcbiAgICAgICAgICB2YXIgaW5kZXhCYXNlID0gaTAgKiB3aWR0aDtcbiAgICAgICAgICB2YXIgY2hlY2tBbGxFbXB0eSA9IGkwICsgMyA8IGhlaWdodDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgdmFyIGluZGV4MCA9IGluZGV4QmFzZSArIGo7XG4gICAgICAgICAgICB2YXIgYWxsRW1wdHkgPSBjaGVja0FsbEVtcHR5ICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDBdID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyBvbmVSb3dEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdHdvUm93c0Rvd25dID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyB0aHJlZVJvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDA7XG4gICAgICAgICAgICB2YXIgaTEgPSAwLFxuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuICAgICAgICAgICAgdmFyIGkgPSBpMCxcbiAgICAgICAgICAgICAgICBzaWduO1xuXG4gICAgICAgICAgICBpZiAoYWxsRW1wdHkpIHtcbiAgICAgICAgICAgICAgdmFyIGhhc1NpZ25pZmljYW50Q29lZmZpY2VudCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgUlVOTEVOR1RIX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICAgIGlmICghaGFzU2lnbmlmaWNhbnRDb2VmZmljZW50KSB7XG4gICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXgwXSsrO1xuICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIG9uZVJvd0Rvd25dKys7XG4gICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXgwICsgdHdvUm93c0Rvd25dKys7XG4gICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0rKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGkxID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDEgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCk7XG5cbiAgICAgICAgICAgICAgaWYgKGkxICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaSA9IGkwICsgaTE7XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gaTEgKiB3aWR0aDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNpZ24gPSB0aGlzLmRlY29kZVNpZ25CaXQoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBjb2VmZmljZW50c1NpZ25baW5kZXhdID0gc2lnbjtcbiAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IGZpcnN0TWFnbml0dWRlQml0TWFzaztcbiAgICAgICAgICAgICAgaW5kZXggPSBpbmRleDA7XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaTIgPSBpMDsgaTIgPD0gaTsgaTIrKywgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGkxKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoaSA9IGkwICsgaTE7IGkgPCBpTmV4dDsgaSsrLCBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgICBpZiAoY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8IChwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdICYgcHJvY2Vzc2VkTWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICAgIHZhciBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgICBpZiAoZGVjaXNpb24gPT09IDEpIHtcbiAgICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICBjb2VmZmljZW50c1NpZ25baW5kZXhdID0gc2lnbjtcbiAgICAgICAgICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IGZpcnN0TWFnbml0dWRlQml0TWFzaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNoZWNrU2VnbWVudGF0aW9uU3ltYm9sOiBmdW5jdGlvbiBCaXRNb2RlbF9jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpIHtcbiAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHZhciBzeW1ib2wgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMyB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAyIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDEgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCk7XG5cbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gMHhhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiSW52YWxpZCBzZWdtZW50YXRpb24gc3ltYm9sXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQml0TW9kZWw7XG4gIH0oKTtcblxuICB2YXIgVHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICBmdW5jdGlvbiBUcmFuc2Zvcm0oKSB7fVxuXG4gICAgVHJhbnNmb3JtLnByb3RvdHlwZS5jYWxjdWxhdGUgPSBmdW5jdGlvbiB0cmFuc2Zvcm1DYWxjdWxhdGUoc3ViYmFuZHMsIHUwLCB2MCkge1xuICAgICAgdmFyIGxsID0gc3ViYmFuZHNbMF07XG5cbiAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgbGwgPSB0aGlzLml0ZXJhdGUobGwsIHN1YmJhbmRzW2ldLCB1MCwgdjApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGw7XG4gICAgfTtcblxuICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGJ1ZmZlciwgb2Zmc2V0LCBzaXplKSB7XG4gICAgICB2YXIgaTEgPSBvZmZzZXQgLSAxLFxuICAgICAgICAgIGoxID0gb2Zmc2V0ICsgMTtcbiAgICAgIHZhciBpMiA9IG9mZnNldCArIHNpemUgLSAyLFxuICAgICAgICAgIGoyID0gb2Zmc2V0ICsgc2l6ZTtcbiAgICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICAgIGJ1ZmZlcltpMV0gPSBidWZmZXJbajFdO1xuICAgICAgYnVmZmVyW2oyXSA9IGJ1ZmZlcltpMl07XG4gICAgfTtcblxuICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuaXRlcmF0ZSA9IGZ1bmN0aW9uIFRyYW5zZm9ybV9pdGVyYXRlKGxsLCBobF9saF9oaCwgdTAsIHYwKSB7XG4gICAgICB2YXIgbGxXaWR0aCA9IGxsLndpZHRoLFxuICAgICAgICAgIGxsSGVpZ2h0ID0gbGwuaGVpZ2h0LFxuICAgICAgICAgIGxsSXRlbXMgPSBsbC5pdGVtcztcbiAgICAgIHZhciB3aWR0aCA9IGhsX2xoX2hoLndpZHRoO1xuICAgICAgdmFyIGhlaWdodCA9IGhsX2xoX2hoLmhlaWdodDtcbiAgICAgIHZhciBpdGVtcyA9IGhsX2xoX2hoLml0ZW1zO1xuICAgICAgdmFyIGksIGosIGssIGwsIHUsIHY7XG5cbiAgICAgIGZvciAoayA9IDAsIGkgPSAwOyBpIDwgbGxIZWlnaHQ7IGkrKykge1xuICAgICAgICBsID0gaSAqIDIgKiB3aWR0aDtcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGxXaWR0aDsgaisrLCBrKyssIGwgKz0gMikge1xuICAgICAgICAgIGl0ZW1zW2xdID0gbGxJdGVtc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsbEl0ZW1zID0gbGwuaXRlbXMgPSBudWxsO1xuICAgICAgdmFyIGJ1ZmZlclBhZGRpbmcgPSA0O1xuICAgICAgdmFyIHJvd0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKyAyICogYnVmZmVyUGFkZGluZyk7XG5cbiAgICAgIGlmICh3aWR0aCA9PT0gMSkge1xuICAgICAgICBpZiAoKHUwICYgMSkgIT09IDApIHtcbiAgICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgICBpdGVtc1trXSAqPSAwLjU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgcm93QnVmZmVyLnNldChpdGVtcy5zdWJhcnJheShrLCBrICsgd2lkdGgpLCBidWZmZXJQYWRkaW5nKTtcbiAgICAgICAgICB0aGlzLmV4dGVuZChyb3dCdWZmZXIsIGJ1ZmZlclBhZGRpbmcsIHdpZHRoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlcihyb3dCdWZmZXIsIGJ1ZmZlclBhZGRpbmcsIHdpZHRoKTtcbiAgICAgICAgICBpdGVtcy5zZXQocm93QnVmZmVyLnN1YmFycmF5KGJ1ZmZlclBhZGRpbmcsIGJ1ZmZlclBhZGRpbmcgKyB3aWR0aCksIGspO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBudW1CdWZmZXJzID0gMTY7XG4gICAgICB2YXIgY29sQnVmZmVycyA9IFtdO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQnVmZmVyczsgaSsrKSB7XG4gICAgICAgIGNvbEJ1ZmZlcnMucHVzaChuZXcgRmxvYXQzMkFycmF5KGhlaWdodCArIDIgKiBidWZmZXJQYWRkaW5nKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiLFxuICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSAwO1xuICAgICAgbGwgPSBidWZmZXJQYWRkaW5nICsgaGVpZ2h0O1xuXG4gICAgICBpZiAoaGVpZ2h0ID09PSAxKSB7XG4gICAgICAgIGlmICgodjAgJiAxKSAhPT0gMCkge1xuICAgICAgICAgIGZvciAodSA9IDA7IHUgPCB3aWR0aDsgdSsrKSB7XG4gICAgICAgICAgICBpdGVtc1t1XSAqPSAwLjU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHUgPSAwOyB1IDwgd2lkdGg7IHUrKykge1xuICAgICAgICAgIGlmIChjdXJyZW50QnVmZmVyID09PSAwKSB7XG4gICAgICAgICAgICBudW1CdWZmZXJzID0gTWF0aC5taW4od2lkdGggLSB1LCBudW1CdWZmZXJzKTtcblxuICAgICAgICAgICAgZm9yIChrID0gdSwgbCA9IGJ1ZmZlclBhZGRpbmc7IGwgPCBsbDsgayArPSB3aWR0aCwgbCsrKSB7XG4gICAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgICBjb2xCdWZmZXJzW2JdW2xdID0gaXRlbXNbayArIGJdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBudW1CdWZmZXJzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRCdWZmZXItLTtcbiAgICAgICAgICB2YXIgYnVmZmVyID0gY29sQnVmZmVyc1tjdXJyZW50QnVmZmVyXTtcbiAgICAgICAgICB0aGlzLmV4dGVuZChidWZmZXIsIGJ1ZmZlclBhZGRpbmcsIGhlaWdodCk7XG4gICAgICAgICAgdGhpcy5maWx0ZXIoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRCdWZmZXIgPT09IDApIHtcbiAgICAgICAgICAgIGsgPSB1IC0gbnVtQnVmZmVycyArIDE7XG5cbiAgICAgICAgICAgIGZvciAobCA9IGJ1ZmZlclBhZGRpbmc7IGwgPCBsbDsgayArPSB3aWR0aCwgbCsrKSB7XG4gICAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtc1trICsgYl0gPSBjb2xCdWZmZXJzW2JdW2xdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGl0ZW1zXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gVHJhbnNmb3JtO1xuICB9KCk7XG5cbiAgdmFyIElycmV2ZXJzaWJsZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIElycmV2ZXJzaWJsZVRyYW5zZm9ybUNsb3N1cmUoKSB7XG4gICAgZnVuY3Rpb24gSXJyZXZlcnNpYmxlVHJhbnNmb3JtKCkge1xuICAgICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgSXJyZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSk7XG5cbiAgICBJcnJldmVyc2libGVUcmFuc2Zvcm0ucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGlycmV2ZXJzaWJsZVRyYW5zZm9ybUZpbHRlcih4LCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgdmFyIGxlbiA9IGxlbmd0aCA+PiAxO1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHwgMDtcbiAgICAgIHZhciBqLCBuLCBjdXJyZW50LCBuZXh0O1xuICAgICAgdmFyIGFscGhhID0gLTEuNTg2MTM0MzQyMDU5OTI0O1xuICAgICAgdmFyIGJldGEgPSAtMC4wNTI5ODAxMTg1NzI5NjE7XG4gICAgICB2YXIgZ2FtbWEgPSAwLjg4MjkxMTA3NTUzMDkzNDtcbiAgICAgIHZhciBkZWx0YSA9IDAuNDQzNTA2ODUyMDQzOTcxO1xuICAgICAgdmFyIEsgPSAxLjIzMDE3NDEwNDkxNDAwMTtcbiAgICAgIHZhciBLXyA9IDEgLyBLO1xuICAgICAgaiA9IG9mZnNldCAtIDM7XG5cbiAgICAgIGZvciAobiA9IGxlbiArIDQ7IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIHhbal0gKj0gS187XG4gICAgICB9XG5cbiAgICAgIGogPSBvZmZzZXQgLSAyO1xuICAgICAgY3VycmVudCA9IGRlbHRhICogeFtqIC0gMV07XG5cbiAgICAgIGZvciAobiA9IGxlbiArIDM7IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIG5leHQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgICB4W2pdID0gSyAqIHhbal0gLSBjdXJyZW50IC0gbmV4dDtcblxuICAgICAgICBpZiAobi0tKSB7XG4gICAgICAgICAgaiArPSAyO1xuICAgICAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgICAgIHhbal0gPSBLICogeFtqXSAtIGN1cnJlbnQgLSBuZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGogPSBvZmZzZXQgLSAxO1xuICAgICAgY3VycmVudCA9IGdhbW1hICogeFtqIC0gMV07XG5cbiAgICAgIGZvciAobiA9IGxlbiArIDI7IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIG5leHQgPSBnYW1tYSAqIHhbaiArIDFdO1xuICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuXG4gICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgY3VycmVudCA9IGdhbW1hICogeFtqICsgMV07XG4gICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBqID0gb2Zmc2V0O1xuICAgICAgY3VycmVudCA9IGJldGEgKiB4W2ogLSAxXTtcblxuICAgICAgZm9yIChuID0gbGVuICsgMTsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgbmV4dCA9IGJldGEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcblxuICAgICAgICBpZiAobi0tKSB7XG4gICAgICAgICAgaiArPSAyO1xuICAgICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGVuICE9PSAwKSB7XG4gICAgICAgIGogPSBvZmZzZXQgKyAxO1xuICAgICAgICBjdXJyZW50ID0gYWxwaGEgKiB4W2ogLSAxXTtcblxuICAgICAgICBmb3IgKG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgICAgbmV4dCA9IGFscGhhICogeFtqICsgMV07XG4gICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcblxuICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBhbHBoYSAqIHhbaiArIDFdO1xuICAgICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBJcnJldmVyc2libGVUcmFuc2Zvcm07XG4gIH0oKTtcblxuICB2YXIgUmV2ZXJzaWJsZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFJldmVyc2libGVUcmFuc2Zvcm1DbG9zdXJlKCkge1xuICAgIGZ1bmN0aW9uIFJldmVyc2libGVUcmFuc2Zvcm0oKSB7XG4gICAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBSZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSk7XG5cbiAgICBSZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiByZXZlcnNpYmxlVHJhbnNmb3JtRmlsdGVyKHgsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICB2YXIgbGVuID0gbGVuZ3RoID4+IDE7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfCAwO1xuICAgICAgdmFyIGosIG47XG5cbiAgICAgIGZvciAoaiA9IG9mZnNldCwgbiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIHhbal0gLT0geFtqIC0gMV0gKyB4W2ogKyAxXSArIDIgPj4gMjtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gb2Zmc2V0ICsgMSwgbiA9IGxlbjsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgeFtqXSArPSB4W2ogLSAxXSArIHhbaiArIDFdID4+IDE7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBSZXZlcnNpYmxlVHJhbnNmb3JtO1xuICB9KCk7XG5cbiAgcmV0dXJuIEpweEltYWdlO1xufSgpO1xuXG5leHBvcnRzLkpweEltYWdlID0gSnB4SW1hZ2U7XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2FsY3VsYXRlU0hBNTEyID0gZXhwb3J0cy5jYWxjdWxhdGVTSEEzODQgPSBleHBvcnRzLmNhbGN1bGF0ZVNIQTI1NiA9IGV4cG9ydHMuY2FsY3VsYXRlTUQ1ID0gZXhwb3J0cy5QREYyMCA9IGV4cG9ydHMuUERGMTcgPSBleHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBleHBvcnRzLkFSQ0ZvdXJDaXBoZXIgPSBleHBvcnRzLkFFUzI1NkNpcGhlciA9IGV4cG9ydHMuQUVTMTI4Q2lwaGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTIpO1xuXG52YXIgQVJDRm91ckNpcGhlciA9IGZ1bmN0aW9uIEFSQ0ZvdXJDaXBoZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBBUkNGb3VyQ2lwaGVyKGtleSkge1xuICAgIHRoaXMuYSA9IDA7XG4gICAgdGhpcy5iID0gMDtcbiAgICB2YXIgcyA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG4gICAgdmFyIGksXG4gICAgICAgIGogPSAwLFxuICAgICAgICB0bXAsXG4gICAgICAgIGtleUxlbmd0aCA9IGtleS5sZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgIHNbaV0gPSBpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgdG1wID0gc1tpXTtcbiAgICAgIGogPSBqICsgdG1wICsga2V5W2kgJSBrZXlMZW5ndGhdICYgMHhmZjtcbiAgICAgIHNbaV0gPSBzW2pdO1xuICAgICAgc1tqXSA9IHRtcDtcbiAgICB9XG5cbiAgICB0aGlzLnMgPSBzO1xuICB9XG5cbiAgQVJDRm91ckNpcGhlci5wcm90b3R5cGUgPSB7XG4gICAgZW5jcnlwdEJsb2NrOiBmdW5jdGlvbiBBUkNGb3VyQ2lwaGVyX2VuY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgICB2YXIgaSxcbiAgICAgICAgICBuID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgdG1wLFxuICAgICAgICAgIHRtcDI7XG4gICAgICB2YXIgYSA9IHRoaXMuYSxcbiAgICAgICAgICBiID0gdGhpcy5iLFxuICAgICAgICAgIHMgPSB0aGlzLnM7XG4gICAgICB2YXIgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkobik7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgYSA9IGEgKyAxICYgMHhmZjtcbiAgICAgICAgdG1wID0gc1thXTtcbiAgICAgICAgYiA9IGIgKyB0bXAgJiAweGZmO1xuICAgICAgICB0bXAyID0gc1tiXTtcbiAgICAgICAgc1thXSA9IHRtcDI7XG4gICAgICAgIHNbYl0gPSB0bXA7XG4gICAgICAgIG91dHB1dFtpXSA9IGRhdGFbaV0gXiBzW3RtcCArIHRtcDIgJiAweGZmXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hID0gYTtcbiAgICAgIHRoaXMuYiA9IGI7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgfTtcbiAgQVJDRm91ckNpcGhlci5wcm90b3R5cGUuZGVjcnlwdEJsb2NrID0gQVJDRm91ckNpcGhlci5wcm90b3R5cGUuZW5jcnlwdEJsb2NrO1xuICBBUkNGb3VyQ2lwaGVyLnByb3RvdHlwZS5lbmNyeXB0ID0gQVJDRm91ckNpcGhlci5wcm90b3R5cGUuZW5jcnlwdEJsb2NrO1xuICByZXR1cm4gQVJDRm91ckNpcGhlcjtcbn0oKTtcblxuZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gQVJDRm91ckNpcGhlcjtcblxudmFyIGNhbGN1bGF0ZU1ENSA9IGZ1bmN0aW9uIGNhbGN1bGF0ZU1ENUNsb3N1cmUoKSB7XG4gIHZhciByID0gbmV3IFVpbnQ4QXJyYXkoWzcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDcsIDEyLCAxNywgMjIsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNCwgMTEsIDE2LCAyMywgNCwgMTEsIDE2LCAyMywgNCwgMTEsIDE2LCAyMywgNCwgMTEsIDE2LCAyMywgNiwgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMV0pO1xuICB2YXIgayA9IG5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LCAtMzg5NTY0NTg2LCA2MDYxMDU4MTksIC0xMDQ0NTI1MzMwLCAtMTc2NDE4ODk3LCAxMjAwMDgwNDI2LCAtMTQ3MzIzMTM0MSwgLTQ1NzA1OTgzLCAxNzcwMDM1NDE2LCAtMTk1ODQxNDQxNywgLTQyMDYzLCAtMTk5MDQwNDE2MiwgMTgwNDYwMzY4MiwgLTQwMzQxMTAxLCAtMTUwMjAwMjI5MCwgMTIzNjUzNTMyOSwgLTE2NTc5NjUxMCwgLTEwNjk1MDE2MzIsIDY0MzcxNzcxMywgLTM3Mzg5NzMwMiwgLTcwMTU1ODY5MSwgMzgwMTYwODMsIC02NjA0NzgzMzUsIC00MDU1Mzc4NDgsIDU2ODQ0NjQzOCwgLTEwMTk4MDM2OTAsIC0xODczNjM5NjEsIDExNjM1MzE1MDEsIC0xNDQ0NjgxNDY3LCAtNTE0MDM3ODQsIDE3MzUzMjg0NzMsIC0xOTI2NjA3NzM0LCAtMzc4NTU4LCAtMjAyMjU3NDQ2MywgMTgzOTAzMDU2MiwgLTM1MzA5NTU2LCAtMTUzMDk5MjA2MCwgMTI3Mjg5MzM1MywgLTE1NTQ5NzYzMiwgLTEwOTQ3MzA2NDAsIDY4MTI3OTE3NCwgLTM1ODUzNzIyMiwgLTcyMjUyMTk3OSwgNzYwMjkxODksIC02NDAzNjQ0ODcsIC00MjE4MTU4MzUsIDUzMDc0MjUyMCwgLTk5NTMzODY1MSwgLTE5ODYzMDg0NCwgMTEyNjg5MTQxNSwgLTE0MTYzNTQ5MDUsIC01NzQzNDA1NSwgMTcwMDQ4NTU3MSwgLTE4OTQ5ODY2MDYsIC0xMDUxNTIzLCAtMjA1NDkyMjc5OSwgMTg3MzMxMzM1OSwgLTMwNjExNzQ0LCAtMTU2MDE5ODM4MCwgMTMwOTE1MTY0OSwgLTE0NTUyMzA3MCwgLTExMjAyMTAzNzksIDcxODc4NzI1OSwgLTM0MzQ4NTU1MV0pO1xuXG4gIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICB2YXIgaDAgPSAxNzMyNTg0MTkzLFxuICAgICAgICBoMSA9IC0yNzE3MzM4NzksXG4gICAgICAgIGgyID0gLTE3MzI1ODQxOTQsXG4gICAgICAgIGgzID0gMjcxNzMzODc4O1xuICAgIHZhciBwYWRkZWRMZW5ndGggPSBsZW5ndGggKyA3MiAmIH42MztcbiAgICB2YXIgcGFkZGVkID0gbmV3IFVpbnQ4QXJyYXkocGFkZGVkTGVuZ3RoKTtcbiAgICB2YXIgaSwgaiwgbjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAweDgwO1xuICAgIG4gPSBwYWRkZWRMZW5ndGggLSA4O1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPDwgMyAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gNSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDIxICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+Pj4gMjkgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHZhciB3ID0gbmV3IEludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqLCBpICs9IDQpIHtcbiAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSB8IHBhZGRlZFtpICsgMV0gPDwgOCB8IHBhZGRlZFtpICsgMl0gPDwgMTYgfCBwYWRkZWRbaSArIDNdIDw8IDI0O1xuICAgICAgfVxuXG4gICAgICB2YXIgYSA9IGgwLFxuICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICBjID0gaDIsXG4gICAgICAgICAgZCA9IGgzLFxuICAgICAgICAgIGYsXG4gICAgICAgICAgZztcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgaWYgKGogPCAxNikge1xuICAgICAgICAgIGYgPSBiICYgYyB8IH5iICYgZDtcbiAgICAgICAgICBnID0gajtcbiAgICAgICAgfSBlbHNlIGlmIChqIDwgMzIpIHtcbiAgICAgICAgICBmID0gZCAmIGIgfCB+ZCAmIGM7XG4gICAgICAgICAgZyA9IDUgKiBqICsgMSAmIDE1O1xuICAgICAgICB9IGVsc2UgaWYgKGogPCA0OCkge1xuICAgICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgICAgZyA9IDMgKiBqICsgNSAmIDE1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGYgPSBjIF4gKGIgfCB+ZCk7XG4gICAgICAgICAgZyA9IDcgKiBqICYgMTU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG1wID0gZCxcbiAgICAgICAgICAgIHJvdGF0ZUFyZyA9IGEgKyBmICsga1tqXSArIHdbZ10gfCAwLFxuICAgICAgICAgICAgcm90YXRlID0gcltqXTtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYiArIChyb3RhdGVBcmcgPDwgcm90YXRlIHwgcm90YXRlQXJnID4+PiAzMiAtIHJvdGF0ZSkgfCAwO1xuICAgICAgICBhID0gdG1wO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGNhbGN1bGF0ZU1ENTtcblxudmFyIFdvcmQ2NCA9IGZ1bmN0aW9uIFdvcmQ2NENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIFdvcmQ2NChoaWdoSW50ZWdlciwgbG93SW50ZWdlcikge1xuICAgIHRoaXMuaGlnaCA9IGhpZ2hJbnRlZ2VyIHwgMDtcbiAgICB0aGlzLmxvdyA9IGxvd0ludGVnZXIgfCAwO1xuICB9XG5cbiAgV29yZDY0LnByb3RvdHlwZSA9IHtcbiAgICBhbmQ6IGZ1bmN0aW9uIFdvcmQ2NF9hbmQod29yZCkge1xuICAgICAgdGhpcy5oaWdoICY9IHdvcmQuaGlnaDtcbiAgICAgIHRoaXMubG93ICY9IHdvcmQubG93O1xuICAgIH0sXG4gICAgeG9yOiBmdW5jdGlvbiBXb3JkNjRfeG9yKHdvcmQpIHtcbiAgICAgIHRoaXMuaGlnaCBePSB3b3JkLmhpZ2g7XG4gICAgICB0aGlzLmxvdyBePSB3b3JkLmxvdztcbiAgICB9LFxuICAgIG9yOiBmdW5jdGlvbiBXb3JkNjRfb3Iod29yZCkge1xuICAgICAgdGhpcy5oaWdoIHw9IHdvcmQuaGlnaDtcbiAgICAgIHRoaXMubG93IHw9IHdvcmQubG93O1xuICAgIH0sXG4gICAgc2hpZnRSaWdodDogZnVuY3Rpb24gV29yZDY0X3NoaWZ0UmlnaHQocGxhY2VzKSB7XG4gICAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICAgIHRoaXMubG93ID0gdGhpcy5oaWdoID4+PiBwbGFjZXMgLSAzMiB8IDA7XG4gICAgICAgIHRoaXMuaGlnaCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvdyA9IHRoaXMubG93ID4+PiBwbGFjZXMgfCB0aGlzLmhpZ2ggPDwgMzIgLSBwbGFjZXM7XG4gICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIHwgMDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNoaWZ0TGVmdDogZnVuY3Rpb24gV29yZDY0X3NoaWZ0TGVmdChwbGFjZXMpIHtcbiAgICAgIGlmIChwbGFjZXMgPj0gMzIpIHtcbiAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5sb3cgPDwgcGxhY2VzIC0gMzI7XG4gICAgICAgIHRoaXMubG93ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuaGlnaCA8PCBwbGFjZXMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBwbGFjZXM7XG4gICAgICAgIHRoaXMubG93ID0gdGhpcy5sb3cgPDwgcGxhY2VzO1xuICAgICAgfVxuICAgIH0sXG4gICAgcm90YXRlUmlnaHQ6IGZ1bmN0aW9uIFdvcmQ2NF9yb3RhdGVSaWdodChwbGFjZXMpIHtcbiAgICAgIHZhciBsb3csIGhpZ2g7XG5cbiAgICAgIGlmIChwbGFjZXMgJiAzMikge1xuICAgICAgICBoaWdoID0gdGhpcy5sb3c7XG4gICAgICAgIGxvdyA9IHRoaXMuaGlnaDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdyA9IHRoaXMubG93O1xuICAgICAgICBoaWdoID0gdGhpcy5oaWdoO1xuICAgICAgfVxuXG4gICAgICBwbGFjZXMgJj0gMzE7XG4gICAgICB0aGlzLmxvdyA9IGxvdyA+Pj4gcGxhY2VzIHwgaGlnaCA8PCAzMiAtIHBsYWNlcztcbiAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggPj4+IHBsYWNlcyB8IGxvdyA8PCAzMiAtIHBsYWNlcztcbiAgICB9LFxuICAgIG5vdDogZnVuY3Rpb24gV29yZDY0X25vdCgpIHtcbiAgICAgIHRoaXMuaGlnaCA9IH50aGlzLmhpZ2g7XG4gICAgICB0aGlzLmxvdyA9IH50aGlzLmxvdztcbiAgICB9LFxuICAgIGFkZDogZnVuY3Rpb24gV29yZDY0X2FkZCh3b3JkKSB7XG4gICAgICB2YXIgbG93QWRkID0gKHRoaXMubG93ID4+PiAwKSArICh3b3JkLmxvdyA+Pj4gMCk7XG4gICAgICB2YXIgaGlnaEFkZCA9ICh0aGlzLmhpZ2ggPj4+IDApICsgKHdvcmQuaGlnaCA+Pj4gMCk7XG5cbiAgICAgIGlmIChsb3dBZGQgPiAweGZmZmZmZmZmKSB7XG4gICAgICAgIGhpZ2hBZGQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb3cgPSBsb3dBZGQgfCAwO1xuICAgICAgdGhpcy5oaWdoID0gaGlnaEFkZCB8IDA7XG4gICAgfSxcbiAgICBjb3B5VG86IGZ1bmN0aW9uIFdvcmQ2NF9jb3B5VG8oYnl0ZXMsIG9mZnNldCkge1xuICAgICAgYnl0ZXNbb2Zmc2V0XSA9IHRoaXMuaGlnaCA+Pj4gMjQgJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgMV0gPSB0aGlzLmhpZ2ggPj4gMTYgJiAweGZmO1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgMl0gPSB0aGlzLmhpZ2ggPj4gOCAmIDB4ZmY7XG4gICAgICBieXRlc1tvZmZzZXQgKyAzXSA9IHRoaXMuaGlnaCAmIDB4ZmY7XG4gICAgICBieXRlc1tvZmZzZXQgKyA0XSA9IHRoaXMubG93ID4+PiAyNCAmIDB4ZmY7XG4gICAgICBieXRlc1tvZmZzZXQgKyA1XSA9IHRoaXMubG93ID4+IDE2ICYgMHhmZjtcbiAgICAgIGJ5dGVzW29mZnNldCArIDZdID0gdGhpcy5sb3cgPj4gOCAmIDB4ZmY7XG4gICAgICBieXRlc1tvZmZzZXQgKyA3XSA9IHRoaXMubG93ICYgMHhmZjtcbiAgICB9LFxuICAgIGFzc2lnbjogZnVuY3Rpb24gV29yZDY0X2Fzc2lnbih3b3JkKSB7XG4gICAgICB0aGlzLmhpZ2ggPSB3b3JkLmhpZ2g7XG4gICAgICB0aGlzLmxvdyA9IHdvcmQubG93O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFdvcmQ2NDtcbn0oKTtcblxudmFyIGNhbGN1bGF0ZVNIQTI1NiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTI1NkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIHJvdHIoeCwgbikge1xuICAgIHJldHVybiB4ID4+PiBuIHwgeCA8PCAzMiAtIG47XG4gIH1cblxuICBmdW5jdGlvbiBjaCh4LCB5LCB6KSB7XG4gICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuICB9XG5cbiAgZnVuY3Rpb24gbWFqKHgsIHksIHopIHtcbiAgICByZXR1cm4geCAmIHkgXiB4ICYgeiBeIHkgJiB6O1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWEoeCkge1xuICAgIHJldHVybiByb3RyKHgsIDIpIF4gcm90cih4LCAxMykgXiByb3RyKHgsIDIyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ21hUHJpbWUoeCkge1xuICAgIHJldHVybiByb3RyKHgsIDYpIF4gcm90cih4LCAxMSkgXiByb3RyKHgsIDI1KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdHRsZVNpZ21hKHgpIHtcbiAgICByZXR1cm4gcm90cih4LCA3KSBeIHJvdHIoeCwgMTgpIF4geCA+Pj4gMztcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUoeCkge1xuICAgIHJldHVybiByb3RyKHgsIDE3KSBeIHJvdHIoeCwgMTkpIF4geCA+Pj4gMTA7XG4gIH1cblxuICB2YXIgayA9IFsweDQyOGEyZjk4LCAweDcxMzc0NDkxLCAweGI1YzBmYmNmLCAweGU5YjVkYmE1LCAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1LCAweGQ4MDdhYTk4LCAweDEyODM1YjAxLCAweDI0MzE4NWJlLCAweDU1MGM3ZGMzLCAweDcyYmU1ZDc0LCAweDgwZGViMWZlLCAweDliZGMwNmE3LCAweGMxOWJmMTc0LCAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNhMWNjLCAweDJkZTkyYzZmLCAweDRhNzQ4NGFhLCAweDVjYjBhOWRjLCAweDc2Zjk4OGRhLCAweDk4M2U1MTUyLCAweGE4MzFjNjZkLCAweGIwMDMyN2M4LCAweGJmNTk3ZmM3LCAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0MjkyOTY3LCAweDI3YjcwYTg1LCAweDJlMWIyMTM4LCAweDRkMmM2ZGZjLCAweDUzMzgwZDEzLCAweDY1MGE3MzU0LCAweDc2NmEwYWJiLCAweDgxYzJjOTJlLCAweDkyNzIyYzg1LCAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAweGM3NmM1MWEzLCAweGQxOTJlODE5LCAweGQ2OTkwNjI0LCAweGY0MGUzNTg1LCAweDEwNmFhMDcwLCAweDE5YTRjMTE2LCAweDFlMzc2YzA4LCAweDI3NDg3NzRjLCAweDM0YjBiY2I1LCAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRmLCAweDY4MmU2ZmYzLCAweDc0OGY4MmVlLCAweDc4YTU2MzZmLCAweDg0Yzg3ODE0LCAweDhjYzcwMjA4LCAweDkwYmVmZmZhLCAweGE0NTA2Y2ViLCAweGJlZjlhM2Y3LCAweGM2NzE3OGYyXTtcblxuICBmdW5jdGlvbiBoYXNoKGRhdGEsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgdmFyIGgwID0gMHg2YTA5ZTY2NyxcbiAgICAgICAgaDEgPSAweGJiNjdhZTg1LFxuICAgICAgICBoMiA9IDB4M2M2ZWYzNzIsXG4gICAgICAgIGgzID0gMHhhNTRmZjUzYSxcbiAgICAgICAgaDQgPSAweDUxMGU1MjdmLFxuICAgICAgICBoNSA9IDB4OWIwNTY4OGMsXG4gICAgICAgIGg2ID0gMHgxZjgzZDlhYixcbiAgICAgICAgaDcgPSAweDViZTBjZDE5O1xuICAgIHZhciBwYWRkZWRMZW5ndGggPSBNYXRoLmNlaWwoKGxlbmd0aCArIDkpIC8gNjQpICogNjQ7XG4gICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgdmFyIGksIGosIG47XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjtcbiAgICB2YXIgdyA9IG5ldyBVaW50MzJBcnJheSg2NCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSA8PCAyNCB8IHBhZGRlZFtpICsgMV0gPDwgMTYgfCBwYWRkZWRbaSArIDJdIDw8IDggfCBwYWRkZWRbaSArIDNdO1xuICAgICAgICBpICs9IDQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDE2OyBqIDwgNjQ7ICsraikge1xuICAgICAgICB3W2pdID0gbGl0dGxlU2lnbWFQcmltZSh3W2ogLSAyXSkgKyB3W2ogLSA3XSArIGxpdHRsZVNpZ21hKHdbaiAtIDE1XSkgKyB3W2ogLSAxNl0gfCAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgYSA9IGgwLFxuICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICBjID0gaDIsXG4gICAgICAgICAgZCA9IGgzLFxuICAgICAgICAgIGUgPSBoNCxcbiAgICAgICAgICBmID0gaDUsXG4gICAgICAgICAgZyA9IGg2LFxuICAgICAgICAgIGggPSBoNyxcbiAgICAgICAgICB0MSxcbiAgICAgICAgICB0MjtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgdDEgPSBoICsgc2lnbWFQcmltZShlKSArIGNoKGUsIGYsIGcpICsga1tqXSArIHdbal07XG4gICAgICAgIHQyID0gc2lnbWEoYSkgKyBtYWooYSwgYiwgYyk7XG4gICAgICAgIGggPSBnO1xuICAgICAgICBnID0gZjtcbiAgICAgICAgZiA9IGU7XG4gICAgICAgIGUgPSBkICsgdDEgfCAwO1xuICAgICAgICBkID0gYztcbiAgICAgICAgYyA9IGI7XG4gICAgICAgIGIgPSBhO1xuICAgICAgICBhID0gdDEgKyB0MiB8IDA7XG4gICAgICB9XG5cbiAgICAgIGgwID0gaDAgKyBhIHwgMDtcbiAgICAgIGgxID0gaDEgKyBiIHwgMDtcbiAgICAgIGgyID0gaDIgKyBjIHwgMDtcbiAgICAgIGgzID0gaDMgKyBkIHwgMDtcbiAgICAgIGg0ID0gaDQgKyBlIHwgMDtcbiAgICAgIGg1ID0gaDUgKyBmIHwgMDtcbiAgICAgIGg2ID0gaDYgKyBnIHwgMDtcbiAgICAgIGg3ID0gaDcgKyBoIHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2gwID4+IDI0ICYgMHhGRiwgaDAgPj4gMTYgJiAweEZGLCBoMCA+PiA4ICYgMHhGRiwgaDAgJiAweEZGLCBoMSA+PiAyNCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxICYgMHhGRiwgaDIgPj4gMjQgJiAweEZGLCBoMiA+PiAxNiAmIDB4RkYsIGgyID4+IDggJiAweEZGLCBoMiAmIDB4RkYsIGgzID4+IDI0ICYgMHhGRiwgaDMgPj4gMTYgJiAweEZGLCBoMyA+PiA4ICYgMHhGRiwgaDMgJiAweEZGLCBoNCA+PiAyNCAmIDB4RkYsIGg0ID4+IDE2ICYgMHhGRiwgaDQgPj4gOCAmIDB4RkYsIGg0ICYgMHhGRiwgaDUgPj4gMjQgJiAweEZGLCBoNSA+PiAxNiAmIDB4RkYsIGg1ID4+IDggJiAweEZGLCBoNSAmIDB4RkYsIGg2ID4+IDI0ICYgMHhGRiwgaDYgPj4gMTYgJiAweEZGLCBoNiA+PiA4ICYgMHhGRiwgaDYgJiAweEZGLCBoNyA+PiAyNCAmIDB4RkYsIGg3ID4+IDE2ICYgMHhGRiwgaDcgPj4gOCAmIDB4RkYsIGg3ICYgMHhGRl0pO1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59KCk7XG5cbmV4cG9ydHMuY2FsY3VsYXRlU0hBMjU2ID0gY2FsY3VsYXRlU0hBMjU2O1xuXG52YXIgY2FsY3VsYXRlU0hBNTEyID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBNTEyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY2gocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAubm90KCk7XG4gICAgdG1wLmFuZCh6KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWoocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAuYW5kKHopO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHkpO1xuICAgIHRtcC5hbmQoeik7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoMzQpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgzOSk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDE0KTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgxOCk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDQxKTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDEpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDgpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDcpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoNjEpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDYpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIHZhciBrID0gW25ldyBXb3JkNjQoMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiksIG5ldyBXb3JkNjQoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksIG5ldyBXb3JkNjQoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIG5ldyBXb3JkNjQoMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyksIG5ldyBXb3JkNjQoMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCksIG5ldyBXb3JkNjQoMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSksIG5ldyBXb3JkNjQoMHg5MjNmODJhNCwgMHhhZjE5NGY5YiksIG5ldyBXb3JkNjQoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksIG5ldyBXb3JkNjQoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIG5ldyBXb3JkNjQoMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSksIG5ldyBXb3JkNjQoMHgyNDMxODViZSwgMHg0ZWU0YjI4YyksIG5ldyBXb3JkNjQoMHg1NTBjN2RjMywgMHhkNWZmYjRlMiksIG5ldyBXb3JkNjQoMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiksIG5ldyBXb3JkNjQoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksIG5ldyBXb3JkNjQoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIG5ldyBXb3JkNjQoMHhjMTliZjE3NCwgMHhjZjY5MjY5NCksIG5ldyBXb3JkNjQoMHhlNDliNjljMSwgMHg5ZWYxNGFkMiksIG5ldyBXb3JkNjQoMHhlZmJlNDc4NiwgMHgzODRmMjVlMyksIG5ldyBXb3JkNjQoMHgwZmMxOWRjNiwgMHg4YjhjZDViNSksIG5ldyBXb3JkNjQoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksIG5ldyBXb3JkNjQoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIG5ldyBXb3JkNjQoMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyksIG5ldyBXb3JkNjQoMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCksIG5ldyBXb3JkNjQoMHg3NmY5ODhkYSwgMHg4MzExNTNiNSksIG5ldyBXb3JkNjQoMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiksIG5ldyBXb3JkNjQoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksIG5ldyBXb3JkNjQoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIG5ldyBXb3JkNjQoMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCksIG5ldyBXb3JkNjQoMHhjNmUwMGJmMywgMHgzZGE4OGZjMiksIG5ldyBXb3JkNjQoMHhkNWE3OTE0NywgMHg5MzBhYTcyNSksIG5ldyBXb3JkNjQoMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiksIG5ldyBXb3JkNjQoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksIG5ldyBXb3JkNjQoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIG5ldyBXb3JkNjQoMHgyZTFiMjEzOCwgMHg1YzI2YzkyNiksIG5ldyBXb3JkNjQoMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCksIG5ldyBXb3JkNjQoMHg1MzM4MGQxMywgMHg5ZDk1YjNkZiksIG5ldyBXb3JkNjQoMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSksIG5ldyBXb3JkNjQoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksIG5ldyBXb3JkNjQoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIG5ldyBXb3JkNjQoMHg5MjcyMmM4NSwgMHgxNDgyMzUzYiksIG5ldyBXb3JkNjQoMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCksIG5ldyBXb3JkNjQoMHhhODFhNjY0YiwgMHhiYzQyMzAwMSksIG5ldyBXb3JkNjQoMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSksIG5ldyBXb3JkNjQoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksIG5ldyBXb3JkNjQoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIG5ldyBXb3JkNjQoMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCksIG5ldyBXb3JkNjQoMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSksIG5ldyBXb3JkNjQoMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCksIG5ldyBXb3JkNjQoMHgxOWE0YzExNiwgMHhiOGQyZDBjOCksIG5ldyBXb3JkNjQoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksIG5ldyBXb3JkNjQoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIG5ldyBXb3JkNjQoMHgzNGIwYmNiNSwgMHhlMTliNDhhOCksIG5ldyBXb3JkNjQoMHgzOTFjMGNiMywgMHhjNWM5NWE2MyksIG5ldyBXb3JkNjQoMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYiksIG5ldyBXb3JkNjQoMHg1YjljY2E0ZiwgMHg3NzYzZTM3MyksIG5ldyBXb3JkNjQoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksIG5ldyBXb3JkNjQoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIG5ldyBXb3JkNjQoMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCksIG5ldyBXb3JkNjQoMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiksIG5ldyBXb3JkNjQoMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyksIG5ldyBXb3JkNjQoMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCksIG5ldyBXb3JkNjQoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksIG5ldyBXb3JkNjQoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIG5ldyBXb3JkNjQoMHhjNjcxNzhmMiwgMHhlMzcyNTMyYiksIG5ldyBXb3JkNjQoMHhjYTI3M2VjZSwgMHhlYTI2NjE5YyksIG5ldyBXb3JkNjQoMHhkMTg2YjhjNywgMHgyMWMwYzIwNyksIG5ldyBXb3JkNjQoMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSksIG5ldyBXb3JkNjQoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksIG5ldyBXb3JkNjQoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIG5ldyBXb3JkNjQoMHgwYTYzN2RjNSwgMHhhMmM4OThhNiksIG5ldyBXb3JkNjQoMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSksIG5ldyBXb3JkNjQoMHgxYjcxMGIzNSwgMHgxMzFjNDcxYiksIG5ldyBXb3JkNjQoMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCksIG5ldyBXb3JkNjQoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksIG5ldyBXb3JkNjQoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIG5ldyBXb3JkNjQoMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyksIG5ldyBXb3JkNjQoMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiksIG5ldyBXb3JkNjQoMHg1OTdmMjk5YywgMHhmYzY1N2UyYSksIG5ldyBXb3JkNjQoMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYyksIG5ldyBXb3JkNjQoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNyldO1xuXG4gIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIG1vZGUzODQpIHtcbiAgICBtb2RlMzg0ID0gISFtb2RlMzg0O1xuICAgIHZhciBoMCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaDc7XG5cbiAgICBpZiAoIW1vZGUzODQpIHtcbiAgICAgIGgwID0gbmV3IFdvcmQ2NCgweDZhMDllNjY3LCAweGYzYmNjOTA4KTtcbiAgICAgIGgxID0gbmV3IFdvcmQ2NCgweGJiNjdhZTg1LCAweDg0Y2FhNzNiKTtcbiAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDNjNmVmMzcyLCAweGZlOTRmODJiKTtcbiAgICAgIGgzID0gbmV3IFdvcmQ2NCgweGE1NGZmNTNhLCAweDVmMWQzNmYxKTtcbiAgICAgIGg0ID0gbmV3IFdvcmQ2NCgweDUxMGU1MjdmLCAweGFkZTY4MmQxKTtcbiAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDliMDU2ODhjLCAweDJiM2U2YzFmKTtcbiAgICAgIGg2ID0gbmV3IFdvcmQ2NCgweDFmODNkOWFiLCAweGZiNDFiZDZiKTtcbiAgICAgIGg3ID0gbmV3IFdvcmQ2NCgweDViZTBjZDE5LCAweDEzN2UyMTc5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaDAgPSBuZXcgV29yZDY0KDB4Y2JiYjlkNWQsIDB4YzEwNTllZDgpO1xuICAgICAgaDEgPSBuZXcgV29yZDY0KDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcpO1xuICAgICAgaDIgPSBuZXcgV29yZDY0KDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcpO1xuICAgICAgaDMgPSBuZXcgV29yZDY0KDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzkpO1xuICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpO1xuICAgICAgaDUgPSBuZXcgV29yZDY0KDB4OGViNDRhODcsIDB4Njg1ODE1MTEpO1xuICAgICAgaDYgPSBuZXcgV29yZDY0KDB4ZGIwYzJlMGQsIDB4NjRmOThmYTcpO1xuICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQpO1xuICAgIH1cblxuICAgIHZhciBwYWRkZWRMZW5ndGggPSBNYXRoLmNlaWwoKGxlbmd0aCArIDE3KSAvIDEyOCkgKiAxMjg7XG4gICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgdmFyIGksIGosIG47XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBuID0gcGFkZGVkTGVuZ3RoIC0gMTY7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjtcbiAgICB2YXIgdyA9IG5ldyBBcnJheSg4MCk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgd1tpXSA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBiID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgYyA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgdmFyIGQgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBlID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgZiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgdmFyIGcgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBoID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICB2YXIgdDEgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICB0MiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgdmFyIHRtcDEgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICB0bXAyID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgdG1wMztcblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYWRkZWRMZW5ndGg7KSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICB3W2pdLmhpZ2ggPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgd1tqXS5sb3cgPSBwYWRkZWRbaSArIDRdIDw8IDI0IHwgcGFkZGVkW2kgKyA1XSA8PCAxNiB8IHBhZGRlZFtpICsgNl0gPDwgOCB8IHBhZGRlZFtpICsgN107XG4gICAgICAgIGkgKz0gODtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMTY7IGogPCA4MDsgKytqKSB7XG4gICAgICAgIHRtcDMgPSB3W2pdO1xuICAgICAgICBsaXR0bGVTaWdtYVByaW1lKHRtcDMsIHdbaiAtIDJdLCB0bXAyKTtcbiAgICAgICAgdG1wMy5hZGQod1tqIC0gN10pO1xuICAgICAgICBsaXR0bGVTaWdtYSh0bXAxLCB3W2ogLSAxNV0sIHRtcDIpO1xuICAgICAgICB0bXAzLmFkZCh0bXAxKTtcbiAgICAgICAgdG1wMy5hZGQod1tqIC0gMTZdKTtcbiAgICAgIH1cblxuICAgICAgYS5hc3NpZ24oaDApO1xuICAgICAgYi5hc3NpZ24oaDEpO1xuICAgICAgYy5hc3NpZ24oaDIpO1xuICAgICAgZC5hc3NpZ24oaDMpO1xuICAgICAgZS5hc3NpZ24oaDQpO1xuICAgICAgZi5hc3NpZ24oaDUpO1xuICAgICAgZy5hc3NpZ24oaDYpO1xuICAgICAgaC5hc3NpZ24oaDcpO1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgODA7ICsraikge1xuICAgICAgICB0MS5hc3NpZ24oaCk7XG4gICAgICAgIHNpZ21hUHJpbWUodG1wMSwgZSwgdG1wMik7XG4gICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgY2godG1wMSwgZSwgZiwgZywgdG1wMik7XG4gICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgdDEuYWRkKGtbal0pO1xuICAgICAgICB0MS5hZGQod1tqXSk7XG4gICAgICAgIHNpZ21hKHQyLCBhLCB0bXAyKTtcbiAgICAgICAgbWFqKHRtcDEsIGEsIGIsIGMsIHRtcDIpO1xuICAgICAgICB0Mi5hZGQodG1wMSk7XG4gICAgICAgIHRtcDMgPSBoO1xuICAgICAgICBoID0gZztcbiAgICAgICAgZyA9IGY7XG4gICAgICAgIGYgPSBlO1xuICAgICAgICBkLmFkZCh0MSk7XG4gICAgICAgIGUgPSBkO1xuICAgICAgICBkID0gYztcbiAgICAgICAgYyA9IGI7XG4gICAgICAgIGIgPSBhO1xuICAgICAgICB0bXAzLmFzc2lnbih0MSk7XG4gICAgICAgIHRtcDMuYWRkKHQyKTtcbiAgICAgICAgYSA9IHRtcDM7XG4gICAgICB9XG5cbiAgICAgIGgwLmFkZChhKTtcbiAgICAgIGgxLmFkZChiKTtcbiAgICAgIGgyLmFkZChjKTtcbiAgICAgIGgzLmFkZChkKTtcbiAgICAgIGg0LmFkZChlKTtcbiAgICAgIGg1LmFkZChmKTtcbiAgICAgIGg2LmFkZChnKTtcbiAgICAgIGg3LmFkZChoKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgaWYgKCFtb2RlMzg0KSB7XG4gICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg2NCk7XG4gICAgICBoMC5jb3B5VG8ocmVzdWx0LCAwKTtcbiAgICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpO1xuICAgICAgaDIuY29weVRvKHJlc3VsdCwgMTYpO1xuICAgICAgaDMuY29weVRvKHJlc3VsdCwgMjQpO1xuICAgICAgaDQuY29weVRvKHJlc3VsdCwgMzIpO1xuICAgICAgaDUuY29weVRvKHJlc3VsdCwgNDApO1xuICAgICAgaDYuY29weVRvKHJlc3VsdCwgNDgpO1xuICAgICAgaDcuY29weVRvKHJlc3VsdCwgNTYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg0OCk7XG4gICAgICBoMC5jb3B5VG8ocmVzdWx0LCAwKTtcbiAgICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpO1xuICAgICAgaDIuY29weVRvKHJlc3VsdCwgMTYpO1xuICAgICAgaDMuY29weVRvKHJlc3VsdCwgMjQpO1xuICAgICAgaDQuY29weVRvKHJlc3VsdCwgMzIpO1xuICAgICAgaDUuY29weVRvKHJlc3VsdCwgNDApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gaGFzaDtcbn0oKTtcblxuZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSBjYWxjdWxhdGVTSEE1MTI7XG5cbnZhciBjYWxjdWxhdGVTSEEzODQgPSBmdW5jdGlvbiBjYWxjdWxhdGVTSEEzODRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBoYXNoKGRhdGEsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZVNIQTUxMihkYXRhLCBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gaGFzaDtcbn0oKTtcblxuZXhwb3J0cy5jYWxjdWxhdGVTSEEzODQgPSBjYWxjdWxhdGVTSEEzODQ7XG5cbnZhciBOdWxsQ2lwaGVyID0gZnVuY3Rpb24gTnVsbENpcGhlckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIE51bGxDaXBoZXIoKSB7fVxuXG4gIE51bGxDaXBoZXIucHJvdG90eXBlID0ge1xuICAgIGRlY3J5cHRCbG9jazogZnVuY3Rpb24gTnVsbENpcGhlcl9kZWNyeXB0QmxvY2soZGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBlbmNyeXB0OiBmdW5jdGlvbiBOdWxsQ2lwaGVyX2VuY3J5cHQoZGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9O1xuICByZXR1cm4gTnVsbENpcGhlcjtcbn0oKTtcblxuY2xhc3MgQUVTQmFzZUNpcGhlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBBRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQUVTQmFzZUNpcGhlci5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5fcyA9IG5ldyBVaW50OEFycmF5KFsweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LCAweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2LCAweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLCAweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwLCAweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjLCAweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LCAweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLCAweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1LCAweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLCAweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0LCAweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViLCAweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLCAweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LCAweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4LCAweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LCAweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyLCAweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3LCAweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLCAweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LCAweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiLCAweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLCAweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5LCAweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5LCAweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LCAweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LCAweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhLCAweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLCAweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllLCAweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0LCAweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLCAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2XSk7XG4gICAgdGhpcy5faW52X3MgPSBuZXcgVWludDhBcnJheShbMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwgMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYiwgMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NywgMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYiwgMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCwgMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSwgMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMiwgMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSwgMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNiwgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwgMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSwgMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCwgMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSwgMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNiwgMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMiwgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwgMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSwgMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MywgMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSwgMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSwgMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSwgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwgMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCwgMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCwgMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSwgMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZiwgMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCwgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwgMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCwgMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSwgMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNiwgMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZF0pO1xuICAgIHRoaXMuX21peCA9IG5ldyBVaW50MzJBcnJheShbMHgwMDAwMDAwMCwgMHgwZTA5MGQwYiwgMHgxYzEyMWExNiwgMHgxMjFiMTcxZCwgMHgzODI0MzQyYywgMHgzNjJkMzkyNywgMHgyNDM2MmUzYSwgMHgyYTNmMjMzMSwgMHg3MDQ4Njg1OCwgMHg3ZTQxNjU1MywgMHg2YzVhNzI0ZSwgMHg2MjUzN2Y0NSwgMHg0ODZjNWM3NCwgMHg0NjY1NTE3ZiwgMHg1NDdlNDY2MiwgMHg1YTc3NGI2OSwgMHhlMDkwZDBiMCwgMHhlZTk5ZGRiYiwgMHhmYzgyY2FhNiwgMHhmMjhiYzdhZCwgMHhkOGI0ZTQ5YywgMHhkNmJkZTk5NywgMHhjNGE2ZmU4YSwgMHhjYWFmZjM4MSwgMHg5MGQ4YjhlOCwgMHg5ZWQxYjVlMywgMHg4Y2NhYTJmZSwgMHg4MmMzYWZmNSwgMHhhOGZjOGNjNCwgMHhhNmY1ODFjZiwgMHhiNGVlOTZkMiwgMHhiYWU3OWJkOSwgMHhkYjNiYmI3YiwgMHhkNTMyYjY3MCwgMHhjNzI5YTE2ZCwgMHhjOTIwYWM2NiwgMHhlMzFmOGY1NywgMHhlZDE2ODI1YywgMHhmZjBkOTU0MSwgMHhmMTA0OTg0YSwgMHhhYjczZDMyMywgMHhhNTdhZGUyOCwgMHhiNzYxYzkzNSwgMHhiOTY4YzQzZSwgMHg5MzU3ZTcwZiwgMHg5ZDVlZWEwNCwgMHg4ZjQ1ZmQxOSwgMHg4MTRjZjAxMiwgMHgzYmFiNmJjYiwgMHgzNWEyNjZjMCwgMHgyN2I5NzFkZCwgMHgyOWIwN2NkNiwgMHgwMzhmNWZlNywgMHgwZDg2NTJlYywgMHgxZjlkNDVmMSwgMHgxMTk0NDhmYSwgMHg0YmUzMDM5MywgMHg0NWVhMGU5OCwgMHg1N2YxMTk4NSwgMHg1OWY4MTQ4ZSwgMHg3M2M3MzdiZiwgMHg3ZGNlM2FiNCwgMHg2ZmQ1MmRhOSwgMHg2MWRjMjBhMiwgMHhhZDc2NmRmNiwgMHhhMzdmNjBmZCwgMHhiMTY0NzdlMCwgMHhiZjZkN2FlYiwgMHg5NTUyNTlkYSwgMHg5YjViNTRkMSwgMHg4OTQwNDNjYywgMHg4NzQ5NGVjNywgMHhkZDNlMDVhZSwgMHhkMzM3MDhhNSwgMHhjMTJjMWZiOCwgMHhjZjI1MTJiMywgMHhlNTFhMzE4MiwgMHhlYjEzM2M4OSwgMHhmOTA4MmI5NCwgMHhmNzAxMjY5ZiwgMHg0ZGU2YmQ0NiwgMHg0M2VmYjA0ZCwgMHg1MWY0YTc1MCwgMHg1ZmZkYWE1YiwgMHg3NWMyODk2YSwgMHg3YmNiODQ2MSwgMHg2OWQwOTM3YywgMHg2N2Q5OWU3NywgMHgzZGFlZDUxZSwgMHgzM2E3ZDgxNSwgMHgyMWJjY2YwOCwgMHgyZmI1YzIwMywgMHgwNThhZTEzMiwgMHgwYjgzZWMzOSwgMHgxOTk4ZmIyNCwgMHgxNzkxZjYyZiwgMHg3NjRkZDY4ZCwgMHg3ODQ0ZGI4NiwgMHg2YTVmY2M5YiwgMHg2NDU2YzE5MCwgMHg0ZTY5ZTJhMSwgMHg0MDYwZWZhYSwgMHg1MjdiZjhiNywgMHg1YzcyZjViYywgMHgwNjA1YmVkNSwgMHgwODBjYjNkZSwgMHgxYTE3YTRjMywgMHgxNDFlYTljOCwgMHgzZTIxOGFmOSwgMHgzMDI4ODdmMiwgMHgyMjMzOTBlZiwgMHgyYzNhOWRlNCwgMHg5NmRkMDYzZCwgMHg5OGQ0MGIzNiwgMHg4YWNmMWMyYiwgMHg4NGM2MTEyMCwgMHhhZWY5MzIxMSwgMHhhMGYwM2YxYSwgMHhiMmViMjgwNywgMHhiY2UyMjUwYywgMHhlNjk1NmU2NSwgMHhlODljNjM2ZSwgMHhmYTg3NzQ3MywgMHhmNDhlNzk3OCwgMHhkZWIxNWE0OSwgMHhkMGI4NTc0MiwgMHhjMmEzNDA1ZiwgMHhjY2FhNGQ1NCwgMHg0MWVjZGFmNywgMHg0ZmU1ZDdmYywgMHg1ZGZlYzBlMSwgMHg1M2Y3Y2RlYSwgMHg3OWM4ZWVkYiwgMHg3N2MxZTNkMCwgMHg2NWRhZjRjZCwgMHg2YmQzZjljNiwgMHgzMWE0YjJhZiwgMHgzZmFkYmZhNCwgMHgyZGI2YThiOSwgMHgyM2JmYTViMiwgMHgwOTgwODY4MywgMHgwNzg5OGI4OCwgMHgxNTkyOWM5NSwgMHgxYjliOTE5ZSwgMHhhMTdjMGE0NywgMHhhZjc1MDc0YywgMHhiZDZlMTA1MSwgMHhiMzY3MWQ1YSwgMHg5OTU4M2U2YiwgMHg5NzUxMzM2MCwgMHg4NTRhMjQ3ZCwgMHg4YjQzMjk3NiwgMHhkMTM0NjIxZiwgMHhkZjNkNmYxNCwgMHhjZDI2NzgwOSwgMHhjMzJmNzUwMiwgMHhlOTEwNTYzMywgMHhlNzE5NWIzOCwgMHhmNTAyNGMyNSwgMHhmYjBiNDEyZSwgMHg5YWQ3NjE4YywgMHg5NGRlNmM4NywgMHg4NmM1N2I5YSwgMHg4OGNjNzY5MSwgMHhhMmYzNTVhMCwgMHhhY2ZhNThhYiwgMHhiZWUxNGZiNiwgMHhiMGU4NDJiZCwgMHhlYTlmMDlkNCwgMHhlNDk2MDRkZiwgMHhmNjhkMTNjMiwgMHhmODg0MWVjOSwgMHhkMmJiM2RmOCwgMHhkY2IyMzBmMywgMHhjZWE5MjdlZSwgMHhjMGEwMmFlNSwgMHg3YTQ3YjEzYywgMHg3NDRlYmMzNywgMHg2NjU1YWIyYSwgMHg2ODVjYTYyMSwgMHg0MjYzODUxMCwgMHg0YzZhODgxYiwgMHg1ZTcxOWYwNiwgMHg1MDc4OTIwZCwgMHgwYTBmZDk2NCwgMHgwNDA2ZDQ2ZiwgMHgxNjFkYzM3MiwgMHgxODE0Y2U3OSwgMHgzMjJiZWQ0OCwgMHgzYzIyZTA0MywgMHgyZTM5Zjc1ZSwgMHgyMDMwZmE1NSwgMHhlYzlhYjcwMSwgMHhlMjkzYmEwYSwgMHhmMDg4YWQxNywgMHhmZTgxYTAxYywgMHhkNGJlODMyZCwgMHhkYWI3OGUyNiwgMHhjOGFjOTkzYiwgMHhjNmE1OTQzMCwgMHg5Y2QyZGY1OSwgMHg5MmRiZDI1MiwgMHg4MGMwYzU0ZiwgMHg4ZWM5Yzg0NCwgMHhhNGY2ZWI3NSwgMHhhYWZmZTY3ZSwgMHhiOGU0ZjE2MywgMHhiNmVkZmM2OCwgMHgwYzBhNjdiMSwgMHgwMjAzNmFiYSwgMHgxMDE4N2RhNywgMHgxZTExNzBhYywgMHgzNDJlNTM5ZCwgMHgzYTI3NWU5NiwgMHgyODNjNDk4YiwgMHgyNjM1NDQ4MCwgMHg3YzQyMGZlOSwgMHg3MjRiMDJlMiwgMHg2MDUwMTVmZiwgMHg2ZTU5MThmNCwgMHg0NDY2M2JjNSwgMHg0YTZmMzZjZSwgMHg1ODc0MjFkMywgMHg1NjdkMmNkOCwgMHgzN2ExMGM3YSwgMHgzOWE4MDE3MSwgMHgyYmIzMTY2YywgMHgyNWJhMWI2NywgMHgwZjg1Mzg1NiwgMHgwMThjMzU1ZCwgMHgxMzk3MjI0MCwgMHgxZDllMmY0YiwgMHg0N2U5NjQyMiwgMHg0OWUwNjkyOSwgMHg1YmZiN2UzNCwgMHg1NWYyNzMzZiwgMHg3ZmNkNTAwZSwgMHg3MWM0NWQwNSwgMHg2M2RmNGExOCwgMHg2ZGQ2NDcxMywgMHhkNzMxZGNjYSwgMHhkOTM4ZDFjMSwgMHhjYjIzYzZkYywgMHhjNTJhY2JkNywgMHhlZjE1ZThlNiwgMHhlMTFjZTVlZCwgMHhmMzA3ZjJmMCwgMHhmZDBlZmZmYiwgMHhhNzc5YjQ5MiwgMHhhOTcwYjk5OSwgMHhiYjZiYWU4NCwgMHhiNTYyYTM4ZiwgMHg5ZjVkODBiZSwgMHg5MTU0OGRiNSwgMHg4MzRmOWFhOCwgMHg4ZDQ2OTdhM10pO1xuICAgIHRoaXMuX21peENvbCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDEyOCkge1xuICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDEgXiAweDFiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIHRoaXMuYnVmZmVyUG9zaXRpb24gPSAwO1xuICB9XG5cbiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGNhbGwgYF9leHBhbmRLZXlgIG9uIHRoZSBiYXNlIGNsYXNzXCIpO1xuICB9XG5cbiAgX2RlY3J5cHQoaW5wdXQsIGtleSkge1xuICAgIGxldCB0LCB1LCB2O1xuICAgIGNvbnN0IHN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIHN0YXRlLnNldChpbnB1dCk7XG5cbiAgICBmb3IgKGxldCBqID0gMCwgayA9IHRoaXMuX2tleVNpemU7IGogPCAxNjsgKytqLCArK2spIHtcbiAgICAgIHN0YXRlW2pdIF49IGtleVtrXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICAgIHQgPSBzdGF0ZVsxM107XG4gICAgICBzdGF0ZVsxM10gPSBzdGF0ZVs5XTtcbiAgICAgIHN0YXRlWzldID0gc3RhdGVbNV07XG4gICAgICBzdGF0ZVs1XSA9IHN0YXRlWzFdO1xuICAgICAgc3RhdGVbMV0gPSB0O1xuICAgICAgdCA9IHN0YXRlWzE0XTtcbiAgICAgIHUgPSBzdGF0ZVsxMF07XG4gICAgICBzdGF0ZVsxNF0gPSBzdGF0ZVs2XTtcbiAgICAgIHN0YXRlWzEwXSA9IHN0YXRlWzJdO1xuICAgICAgc3RhdGVbNl0gPSB0O1xuICAgICAgc3RhdGVbMl0gPSB1O1xuICAgICAgdCA9IHN0YXRlWzE1XTtcbiAgICAgIHUgPSBzdGF0ZVsxMV07XG4gICAgICB2ID0gc3RhdGVbN107XG4gICAgICBzdGF0ZVsxNV0gPSBzdGF0ZVszXTtcbiAgICAgIHN0YXRlWzExXSA9IHQ7XG4gICAgICBzdGF0ZVs3XSA9IHU7XG4gICAgICBzdGF0ZVszXSA9IHY7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBzdGF0ZVtqXSA9IHRoaXMuX2ludl9zW3N0YXRlW2pdXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGsgPSBpICogMTY7IGogPCAxNjsgKytqLCArK2spIHtcbiAgICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqICs9IDQpIHtcbiAgICAgICAgY29uc3QgczAgPSB0aGlzLl9taXhbc3RhdGVbal1dO1xuICAgICAgICBjb25zdCBzMSA9IHRoaXMuX21peFtzdGF0ZVtqICsgMV1dO1xuICAgICAgICBjb25zdCBzMiA9IHRoaXMuX21peFtzdGF0ZVtqICsgMl1dO1xuICAgICAgICBjb25zdCBzMyA9IHRoaXMuX21peFtzdGF0ZVtqICsgM11dO1xuICAgICAgICB0ID0gczAgXiBzMSA+Pj4gOCBeIHMxIDw8IDI0IF4gczIgPj4+IDE2IF4gczIgPDwgMTYgXiBzMyA+Pj4gMjQgXiBzMyA8PCA4O1xuICAgICAgICBzdGF0ZVtqXSA9IHQgPj4+IDI0ICYgMHhmZjtcbiAgICAgICAgc3RhdGVbaiArIDFdID0gdCA+PiAxNiAmIDB4ZmY7XG4gICAgICAgIHN0YXRlW2ogKyAyXSA9IHQgPj4gOCAmIDB4ZmY7XG4gICAgICAgIHN0YXRlW2ogKyAzXSA9IHQgJiAweGZmO1xuICAgICAgfVxuICAgIH1cblxuICAgIHQgPSBzdGF0ZVsxM107XG4gICAgc3RhdGVbMTNdID0gc3RhdGVbOV07XG4gICAgc3RhdGVbOV0gPSBzdGF0ZVs1XTtcbiAgICBzdGF0ZVs1XSA9IHN0YXRlWzFdO1xuICAgIHN0YXRlWzFdID0gdDtcbiAgICB0ID0gc3RhdGVbMTRdO1xuICAgIHUgPSBzdGF0ZVsxMF07XG4gICAgc3RhdGVbMTRdID0gc3RhdGVbNl07XG4gICAgc3RhdGVbMTBdID0gc3RhdGVbMl07XG4gICAgc3RhdGVbNl0gPSB0O1xuICAgIHN0YXRlWzJdID0gdTtcbiAgICB0ID0gc3RhdGVbMTVdO1xuICAgIHUgPSBzdGF0ZVsxMV07XG4gICAgdiA9IHN0YXRlWzddO1xuICAgIHN0YXRlWzE1XSA9IHN0YXRlWzNdO1xuICAgIHN0YXRlWzExXSA9IHQ7XG4gICAgc3RhdGVbN10gPSB1O1xuICAgIHN0YXRlWzNdID0gdjtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgc3RhdGVbal0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtqXV07XG4gICAgICBzdGF0ZVtqXSBePSBrZXlbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgX2VuY3J5cHQoaW5wdXQsIGtleSkge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9zO1xuICAgIGxldCB0LCB1LCB2O1xuICAgIGNvbnN0IHN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIHN0YXRlLnNldChpbnB1dCk7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHN0YXRlW2pdIF49IGtleVtqXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbjsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgc3RhdGVbal0gPSBzW3N0YXRlW2pdXTtcbiAgICAgIH1cblxuICAgICAgdiA9IHN0YXRlWzFdO1xuICAgICAgc3RhdGVbMV0gPSBzdGF0ZVs1XTtcbiAgICAgIHN0YXRlWzVdID0gc3RhdGVbOV07XG4gICAgICBzdGF0ZVs5XSA9IHN0YXRlWzEzXTtcbiAgICAgIHN0YXRlWzEzXSA9IHY7XG4gICAgICB2ID0gc3RhdGVbMl07XG4gICAgICB1ID0gc3RhdGVbNl07XG4gICAgICBzdGF0ZVsyXSA9IHN0YXRlWzEwXTtcbiAgICAgIHN0YXRlWzZdID0gc3RhdGVbMTRdO1xuICAgICAgc3RhdGVbMTBdID0gdjtcbiAgICAgIHN0YXRlWzE0XSA9IHU7XG4gICAgICB2ID0gc3RhdGVbM107XG4gICAgICB1ID0gc3RhdGVbN107XG4gICAgICB0ID0gc3RhdGVbMTFdO1xuICAgICAgc3RhdGVbM10gPSBzdGF0ZVsxNV07XG4gICAgICBzdGF0ZVs3XSA9IHY7XG4gICAgICBzdGF0ZVsxMV0gPSB1O1xuICAgICAgc3RhdGVbMTVdID0gdDtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgaiArPSA0KSB7XG4gICAgICAgIGNvbnN0IHMwID0gc3RhdGVbaiArIDBdO1xuICAgICAgICBjb25zdCBzMSA9IHN0YXRlW2ogKyAxXTtcbiAgICAgICAgY29uc3QgczIgPSBzdGF0ZVtqICsgMl07XG4gICAgICAgIGNvbnN0IHMzID0gc3RhdGVbaiArIDNdO1xuICAgICAgICB0ID0gczAgXiBzMSBeIHMyIF4gczM7XG4gICAgICAgIHN0YXRlW2ogKyAwXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MwIF4gczFdO1xuICAgICAgICBzdGF0ZVtqICsgMV0gXj0gdCBeIHRoaXMuX21peENvbFtzMSBeIHMyXTtcbiAgICAgICAgc3RhdGVbaiArIDJdIF49IHQgXiB0aGlzLl9taXhDb2xbczIgXiBzM107XG4gICAgICAgIHN0YXRlW2ogKyAzXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MzIF4gczBdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMCwgayA9IGkgKiAxNjsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBzdGF0ZVtqXSA9IHNbc3RhdGVbal1dO1xuICAgIH1cblxuICAgIHYgPSBzdGF0ZVsxXTtcbiAgICBzdGF0ZVsxXSA9IHN0YXRlWzVdO1xuICAgIHN0YXRlWzVdID0gc3RhdGVbOV07XG4gICAgc3RhdGVbOV0gPSBzdGF0ZVsxM107XG4gICAgc3RhdGVbMTNdID0gdjtcbiAgICB2ID0gc3RhdGVbMl07XG4gICAgdSA9IHN0YXRlWzZdO1xuICAgIHN0YXRlWzJdID0gc3RhdGVbMTBdO1xuICAgIHN0YXRlWzZdID0gc3RhdGVbMTRdO1xuICAgIHN0YXRlWzEwXSA9IHY7XG4gICAgc3RhdGVbMTRdID0gdTtcbiAgICB2ID0gc3RhdGVbM107XG4gICAgdSA9IHN0YXRlWzddO1xuICAgIHQgPSBzdGF0ZVsxMV07XG4gICAgc3RhdGVbM10gPSBzdGF0ZVsxNV07XG4gICAgc3RhdGVbN10gPSB2O1xuICAgIHN0YXRlWzExXSA9IHU7XG4gICAgc3RhdGVbMTVdID0gdDtcblxuICAgIGZvciAobGV0IGogPSAwLCBrID0gdGhpcy5fa2V5U2l6ZTsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIF9kZWNyeXB0QmxvY2syKGRhdGEsIGZpbmFsaXplKSB7XG4gICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGxldCBpdiA9IHRoaXMuaXY7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICArK2J1ZmZlckxlbmd0aDtcblxuICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA8IDE2KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwbGFpbiA9IHRoaXMuX2RlY3J5cHQoYnVmZmVyLCB0aGlzLl9rZXkpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgcGxhaW5bal0gXj0gaXZbal07XG4gICAgICB9XG5cbiAgICAgIGl2ID0gYnVmZmVyO1xuICAgICAgcmVzdWx0LnB1c2gocGxhaW4pO1xuICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICB0aGlzLml2ID0gaXY7XG5cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgIH1cblxuICAgIGxldCBvdXRwdXRMZW5ndGggPSAxNiAqIHJlc3VsdC5sZW5ndGg7XG5cbiAgICBpZiAoZmluYWxpemUpIHtcbiAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICBsZXQgcHNMZW4gPSBsYXN0QmxvY2tbMTVdO1xuXG4gICAgICBpZiAocHNMZW4gPD0gMTYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE1LCBpaSA9IDE2IC0gcHNMZW47IGkgPj0gaWk7IC0taSkge1xuICAgICAgICAgIGlmIChsYXN0QmxvY2tbaV0gIT09IHBzTGVuKSB7XG4gICAgICAgICAgICBwc0xlbiA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXRMZW5ndGggLT0gcHNMZW47XG4gICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSBsYXN0QmxvY2suc3ViYXJyYXkoMCwgMTYgLSBwc0xlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSByZXN1bHQubGVuZ3RoOyBpIDwgaWk7ICsraSwgaiArPSAxNikge1xuICAgICAgb3V0cHV0LnNldChyZXN1bHRbaV0sIGopO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBkZWNyeXB0QmxvY2soZGF0YSwgZmluYWxpemUsIGl2ID0gbnVsbCkge1xuICAgIGNvbnN0IHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgIGxldCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuXG4gICAgaWYgKGl2KSB7XG4gICAgICB0aGlzLml2ID0gaXY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBidWZmZXJMZW5ndGggPCAxNiAmJiBpIDwgc291cmNlTGVuZ3RoOyArK2ksICsrYnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA8IDE2KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXYgPSBidWZmZXI7XG4gICAgICBkYXRhID0gZGF0YS5zdWJhcnJheSgxNik7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgIHRoaXMuZGVjcnlwdEJsb2NrID0gdGhpcy5fZGVjcnlwdEJsb2NrMjtcbiAgICByZXR1cm4gdGhpcy5kZWNyeXB0QmxvY2soZGF0YSwgZmluYWxpemUpO1xuICB9XG5cbiAgZW5jcnlwdChkYXRhLCBpdikge1xuICAgIGNvbnN0IHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmJ1ZmZlcixcbiAgICAgICAgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJQb3NpdGlvbjtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGlmICghaXYpIHtcbiAgICAgIGl2ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgICsrYnVmZmVyTGVuZ3RoO1xuXG4gICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBidWZmZXJbal0gXj0gaXZbal07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNpcGhlciA9IHRoaXMuX2VuY3J5cHQoYnVmZmVyLCB0aGlzLl9rZXkpO1xuXG4gICAgICBpdiA9IGNpcGhlcjtcbiAgICAgIHJlc3VsdC5wdXNoKGNpcGhlcik7XG4gICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICBidWZmZXJMZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgIHRoaXMuaXYgPSBpdjtcblxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0TGVuZ3RoID0gMTYgKiByZXN1bHQubGVuZ3RoO1xuICAgIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDAsIGlpID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGlpOyArK2ksIGogKz0gMTYpIHtcbiAgICAgIG91dHB1dC5zZXQocmVzdWx0W2ldLCBqKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbn1cblxuY2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlciB7XG4gIGNvbnN0cnVjdG9yKGtleSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uID0gMTA7XG4gICAgdGhpcy5fa2V5U2l6ZSA9IDE2MDtcbiAgICB0aGlzLl9yY29uID0gbmV3IFVpbnQ4QXJyYXkoWzB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGRdKTtcbiAgICB0aGlzLl9rZXkgPSB0aGlzLl9leHBhbmRLZXkoa2V5KTtcbiAgfVxuXG4gIF9leHBhbmRLZXkoY2lwaGVyS2V5KSB7XG4gICAgY29uc3QgYiA9IDE3NjtcbiAgICBjb25zdCBzID0gdGhpcy5fcztcbiAgICBjb25zdCByY29uID0gdGhpcy5fcmNvbjtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShiKTtcbiAgICByZXN1bHQuc2V0KGNpcGhlcktleSk7XG5cbiAgICBmb3IgKGxldCBqID0gMTYsIGkgPSAxOyBqIDwgYjsgKytpKSB7XG4gICAgICBsZXQgdDEgPSByZXN1bHRbaiAtIDNdO1xuICAgICAgbGV0IHQyID0gcmVzdWx0W2ogLSAyXTtcbiAgICAgIGxldCB0MyA9IHJlc3VsdFtqIC0gMV07XG4gICAgICBsZXQgdDQgPSByZXN1bHRbaiAtIDRdO1xuICAgICAgdDEgPSBzW3QxXTtcbiAgICAgIHQyID0gc1t0Ml07XG4gICAgICB0MyA9IHNbdDNdO1xuICAgICAgdDQgPSBzW3Q0XTtcbiAgICAgIHQxID0gdDEgXiByY29uW2ldO1xuXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IDQ7ICsrbikge1xuICAgICAgICByZXN1bHRbal0gPSB0MSBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0MiBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgaisrO1xuICAgICAgICByZXN1bHRbal0gPSB0NCBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5leHBvcnRzLkFFUzEyOENpcGhlciA9IEFFUzEyOENpcGhlcjtcblxuY2xhc3MgQUVTMjU2Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlciB7XG4gIGNvbnN0cnVjdG9yKGtleSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uID0gMTQ7XG4gICAgdGhpcy5fa2V5U2l6ZSA9IDIyNDtcbiAgICB0aGlzLl9rZXkgPSB0aGlzLl9leHBhbmRLZXkoa2V5KTtcbiAgfVxuXG4gIF9leHBhbmRLZXkoY2lwaGVyS2V5KSB7XG4gICAgY29uc3QgYiA9IDI0MDtcbiAgICBjb25zdCBzID0gdGhpcy5fcztcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShiKTtcbiAgICByZXN1bHQuc2V0KGNpcGhlcktleSk7XG4gICAgbGV0IHIgPSAxO1xuICAgIGxldCB0MSwgdDIsIHQzLCB0NDtcblxuICAgIGZvciAobGV0IGogPSAzMiwgaSA9IDE7IGogPCBiOyArK2kpIHtcbiAgICAgIGlmIChqICUgMzIgPT09IDE2KSB7XG4gICAgICAgIHQxID0gc1t0MV07XG4gICAgICAgIHQyID0gc1t0Ml07XG4gICAgICAgIHQzID0gc1t0M107XG4gICAgICAgIHQ0ID0gc1t0NF07XG4gICAgICB9IGVsc2UgaWYgKGogJSAzMiA9PT0gMCkge1xuICAgICAgICB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICAgIHQyID0gcmVzdWx0W2ogLSAyXTtcbiAgICAgICAgdDMgPSByZXN1bHRbaiAtIDFdO1xuICAgICAgICB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICAgIHQxID0gc1t0MV07XG4gICAgICAgIHQyID0gc1t0Ml07XG4gICAgICAgIHQzID0gc1t0M107XG4gICAgICAgIHQ0ID0gc1t0NF07XG4gICAgICAgIHQxID0gdDEgXiByO1xuXG4gICAgICAgIGlmICgociA8PD0gMSkgPj0gMjU2KSB7XG4gICAgICAgICAgciA9IChyIF4gMHgxYikgJiAweGZmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQxIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQzIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQ0IF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQUVTMjU2Q2lwaGVyID0gQUVTMjU2Q2lwaGVyO1xuXG52YXIgUERGMTcgPSBmdW5jdGlvbiBQREYxN0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNvbXBhcmVCeXRlQXJyYXlzKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgaWYgKGFycmF5MS5sZW5ndGggIT09IGFycmF5Mi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFBERjE3KCkge31cblxuICBQREYxNy5wcm90b3R5cGUgPSB7XG4gICAgY2hlY2tPd25lclBhc3N3b3JkOiBmdW5jdGlvbiBQREYxN19jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldChvd25lclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJWYWxpZGF0aW9uU2FsdC5sZW5ndGgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGN1bGF0ZVNIQTI1NihoYXNoRGF0YSwgMCwgaGFzaERhdGEubGVuZ3RoKTtcbiAgICAgIHJldHVybiBjb21wYXJlQnl0ZUFycmF5cyhyZXN1bHQsIG93bmVyUGFzc3dvcmQpO1xuICAgIH0sXG4gICAgY2hlY2tVc2VyUGFzc3dvcmQ6IGZ1bmN0aW9uIFBERjE3X2NoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJQYXNzd29yZCkge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgICByZXR1cm4gY29tcGFyZUJ5dGVBcnJheXMocmVzdWx0LCB1c2VyUGFzc3dvcmQpO1xuICAgIH0sXG4gICAgZ2V0T3duZXJLZXk6IGZ1bmN0aW9uIFBERjE3X2dldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVzZXJCeXRlcywgb3duZXJFbmNyeXB0aW9uKSB7XG4gICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyS2V5U2FsdC5sZW5ndGgpO1xuICAgICAgdmFyIGtleSA9IGNhbGN1bGF0ZVNIQTI1NihoYXNoRGF0YSwgMCwgaGFzaERhdGEubGVuZ3RoKTtcbiAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhvd25lckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIH0sXG4gICAgZ2V0VXNlcktleTogZnVuY3Rpb24gUERGMTdfZ2V0VXNlcktleShwYXNzd29yZCwgdXNlcktleVNhbHQsIHVzZXJFbmNyeXB0aW9uKSB7XG4gICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlcktleVNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICB2YXIga2V5ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMyNTZDaXBoZXIoa2V5KTtcbiAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKHVzZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBQREYxNztcbn0oKTtcblxuZXhwb3J0cy5QREYxNyA9IFBERjE3O1xuXG52YXIgUERGMjAgPSBmdW5jdGlvbiBQREYyMENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNvbmNhdEFycmF5cyhhcnJheTEsIGFycmF5Mikge1xuICAgIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkxLmxlbmd0aCArIGFycmF5Mi5sZW5ndGgpO1xuICAgIHQuc2V0KGFycmF5MSwgMCk7XG4gICAgdC5zZXQoYXJyYXkyLCBhcnJheTEubGVuZ3RoKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgaW5wdXQsIHVzZXJCeXRlcykge1xuICAgIHZhciBrID0gY2FsY3VsYXRlU0hBMjU2KGlucHV0LCAwLCBpbnB1dC5sZW5ndGgpLnN1YmFycmF5KDAsIDMyKTtcbiAgICB2YXIgZSA9IFswXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IDY0IHx8IGVbZS5sZW5ndGggLSAxXSA+IGkgLSAzMikge1xuICAgICAgdmFyIGFycmF5TGVuZ3RoID0gcGFzc3dvcmQubGVuZ3RoICsgay5sZW5ndGggKyB1c2VyQnl0ZXMubGVuZ3RoO1xuICAgICAgdmFyIGsxID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlMZW5ndGggKiA2NCk7XG4gICAgICB2YXIgYXJyYXkgPSBjb25jYXRBcnJheXMocGFzc3dvcmQsIGspO1xuICAgICAgYXJyYXkgPSBjb25jYXRBcnJheXMoYXJyYXksIHVzZXJCeXRlcyk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBwb3MgPSAwOyBqIDwgNjQ7IGorKywgcG9zICs9IGFycmF5TGVuZ3RoKSB7XG4gICAgICAgIGsxLnNldChhcnJheSwgcG9zKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMxMjhDaXBoZXIoay5zdWJhcnJheSgwLCAxNikpO1xuICAgICAgZSA9IGNpcGhlci5lbmNyeXB0KGsxLCBrLnN1YmFycmF5KDE2LCAzMikpO1xuICAgICAgdmFyIHJlbWFpbmRlciA9IDA7XG5cbiAgICAgIGZvciAodmFyIHogPSAwOyB6IDwgMTY7IHorKykge1xuICAgICAgICByZW1haW5kZXIgKj0gMjU2ICUgMztcbiAgICAgICAgcmVtYWluZGVyICU9IDM7XG4gICAgICAgIHJlbWFpbmRlciArPSAoZVt6XSA+Pj4gMCkgJSAzO1xuICAgICAgICByZW1haW5kZXIgJT0gMztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbWFpbmRlciA9PT0gMCkge1xuICAgICAgICBrID0gY2FsY3VsYXRlU0hBMjU2KGUsIDAsIGUubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAxKSB7XG4gICAgICAgIGsgPSBjYWxjdWxhdGVTSEEzODQoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChyZW1haW5kZXIgPT09IDIpIHtcbiAgICAgICAgayA9IGNhbGN1bGF0ZVNIQTUxMihlLCAwLCBlLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gay5zdWJhcnJheSgwLCAzMik7XG4gIH1cblxuICBmdW5jdGlvbiBQREYyMCgpIHt9XG5cbiAgZnVuY3Rpb24gY29tcGFyZUJ5dGVBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgUERGMjAucHJvdG90eXBlID0ge1xuICAgIGhhc2g6IGZ1bmN0aW9uIFBERjIwX2hhc2gocGFzc3dvcmQsIGNvbmNhdEJ5dGVzLCB1c2VyQnl0ZXMpIHtcbiAgICAgIHJldHVybiBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGNvbmNhdEJ5dGVzLCB1c2VyQnl0ZXMpO1xuICAgIH0sXG4gICAgY2hlY2tPd25lclBhc3N3b3JkOiBmdW5jdGlvbiBQREYyMF9jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldChvd25lclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJWYWxpZGF0aW9uU2FsdC5sZW5ndGgpO1xuICAgICAgdmFyIHJlc3VsdCA9IGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgaGFzaERhdGEsIHVzZXJCeXRlcyk7XG4gICAgICByZXR1cm4gY29tcGFyZUJ5dGVBcnJheXMocmVzdWx0LCBvd25lclBhc3N3b3JkKTtcbiAgICB9LFxuICAgIGNoZWNrVXNlclBhc3N3b3JkOiBmdW5jdGlvbiBQREYyMF9jaGVja1VzZXJQYXNzd29yZChwYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyUGFzc3dvcmQpIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgdXNlclBhc3N3b3JkKTtcbiAgICB9LFxuICAgIGdldE93bmVyS2V5OiBmdW5jdGlvbiBQREYyMF9nZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyQnl0ZXMsIG93bmVyRW5jcnlwdGlvbikge1xuICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldChvd25lcktleVNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICAgIHZhciBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMyNTZDaXBoZXIoa2V5KTtcbiAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKG93bmVyRW5jcnlwdGlvbiwgZmFsc2UsIG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgfSxcbiAgICBnZXRVc2VyS2V5OiBmdW5jdGlvbiBQREYyMF9nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgIHZhciBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCBbXSk7XG4gICAgICB2YXIgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFBERjIwO1xufSgpO1xuXG5leHBvcnRzLlBERjIwID0gUERGMjA7XG5cbnZhciBDaXBoZXJUcmFuc2Zvcm0gPSBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm0oc3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IsIHN0cmVhbUNpcGhlckNvbnN0cnVjdG9yKSB7XG4gICAgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvciA9IHN0cmluZ0NpcGhlckNvbnN0cnVjdG9yO1xuICAgIHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIENpcGhlclRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gICAgY3JlYXRlU3RyZWFtOiBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1fY3JlYXRlU3RyZWFtKHN0cmVhbSwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY2lwaGVyID0gbmV3IHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IoKTtcbiAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5EZWNyeXB0U3RyZWFtKHN0cmVhbSwgbGVuZ3RoLCBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1EZWNyeXB0U3RyZWFtKGRhdGEsIGZpbmFsaXplKSB7XG4gICAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVjcnlwdFN0cmluZzogZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtX2RlY3J5cHRTdHJpbmcocykge1xuICAgICAgdmFyIGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgZGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzKTtcbiAgICAgIGRhdGEgPSBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIHRydWUpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShkYXRhKTtcbiAgICB9LFxuICAgIGVuY3J5cHRTdHJpbmc6IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybV9lbmNyeXB0U3RyaW5nKHMpIHtcbiAgICAgIGNvbnN0IGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG5cbiAgICAgIGlmIChjaXBoZXIgaW5zdGFuY2VvZiBBRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYWQgPSAxNiAtIHN0ckxlbiAlIDE2O1xuXG4gICAgICAgIGlmIChwYWQgIT09IDE2KSB7XG4gICAgICAgICAgcyA9IHMucGFkRW5kKDE2ICogTWF0aC5jZWlsKHN0ckxlbiAvIDE2KSwgU3RyaW5nLmZyb21DaGFyQ29kZShwYWQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl2ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgICBpdltpXSA9IE1hdGguZmxvb3IoMjU2ICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgICAgIGRhdGEgPSBjaXBoZXIuZW5jcnlwdChkYXRhLCBpdik7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KDE2ICsgZGF0YS5sZW5ndGgpO1xuICAgICAgICBidWYuc2V0KGl2KTtcbiAgICAgICAgYnVmLnNldChkYXRhLCAxNik7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoYnVmKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgICBkYXRhID0gY2lwaGVyLmVuY3J5cHQoZGF0YSk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIENpcGhlclRyYW5zZm9ybTtcbn0oKTtcblxudmFyIENpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5Q2xvc3VyZSgpIHtcbiAgdmFyIGRlZmF1bHRQYXNzd29yZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzB4MjgsIDB4QkYsIDB4NEUsIDB4NUUsIDB4NEUsIDB4NzUsIDB4OEEsIDB4NDEsIDB4NjQsIDB4MDAsIDB4NEUsIDB4NTYsIDB4RkYsIDB4RkEsIDB4MDEsIDB4MDgsIDB4MkUsIDB4MkUsIDB4MDAsIDB4QjYsIDB4RDAsIDB4NjgsIDB4M0UsIDB4ODAsIDB4MkYsIDB4MEMsIDB4QTksIDB4RkUsIDB4NjQsIDB4NTMsIDB4NjksIDB4N0FdKTtcblxuICBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0aW9uS2V5MjAocmV2aXNpb24sIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcykge1xuICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgdmFyIHBhc3N3b3JkTGVuZ3RoID0gTWF0aC5taW4oMTI3LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZC5zdWJhcnJheSgwLCBwYXNzd29yZExlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhc3N3b3JkID0gW107XG4gICAgfVxuXG4gICAgdmFyIHBkZkFsZ29yaXRobTtcblxuICAgIGlmIChyZXZpc2lvbiA9PT0gNikge1xuICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjIwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBkZkFsZ29yaXRobSA9IG5ldyBQREYxNygpO1xuICAgIH1cblxuICAgIGlmIChwZGZBbGdvcml0aG0uY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSkge1xuICAgICAgcmV0dXJuIHBkZkFsZ29yaXRobS5nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pO1xuICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHtcbiAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdUJ5dGVzLCBvd25lckVuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUtleURhdGEoZmlsZUlkLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKSB7XG4gICAgdmFyIGhhc2hEYXRhU2l6ZSA9IDQwICsgb3duZXJQYXNzd29yZC5sZW5ndGggKyBmaWxlSWQubGVuZ3RoO1xuICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KGhhc2hEYXRhU2l6ZSksXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBqLFxuICAgICAgICBuO1xuXG4gICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICBuID0gTWF0aC5taW4oMzIsIHBhc3N3b3JkLmxlbmd0aCk7XG5cbiAgICAgIGZvciAoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaiA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IDMyKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gZGVmYXVsdFBhc3N3b3JkQnl0ZXNbaisrXTtcbiAgICB9XG5cbiAgICBmb3IgKGogPSAwLCBuID0gb3duZXJQYXNzd29yZC5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgIGhhc2hEYXRhW2krK10gPSBvd25lclBhc3N3b3JkW2pdO1xuICAgIH1cblxuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyAmIDB4ZmY7XG4gICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+IDggJiAweGZmO1xuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+PiAxNiAmIDB4ZmY7XG4gICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+PiAyNCAmIDB4ZmY7XG5cbiAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGZpbGVJZFtqXTtcbiAgICB9XG5cbiAgICBpZiAocmV2aXNpb24gPj0gNCAmJiAhZW5jcnlwdE1ldGFkYXRhKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gMHhmZjtcbiAgICAgIGhhc2hEYXRhW2krK10gPSAweGZmO1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgICBoYXNoRGF0YVtpKytdID0gMHhmZjtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7XG4gICAgdmFyIGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBlbmNyeXB0aW9uS2V5ID0gaGFzaC5zdWJhcnJheSgwLCBrZXlMZW5ndGhJbkJ5dGVzKTtcbiAgICB2YXIgY2lwaGVyLCBjaGVja0RhdGE7XG5cbiAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHtcbiAgICAgICAgaGFzaERhdGFbaV0gPSBkZWZhdWx0UGFzc3dvcmRCeXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMCwgbiA9IGZpbGVJZC5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgICAgaGFzaERhdGFbaSsrXSA9IGZpbGVJZFtqXTtcbiAgICAgIH1cblxuICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZW5jcnlwdGlvbktleSk7XG4gICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSkpO1xuICAgICAgbiA9IGVuY3J5cHRpb25LZXkubGVuZ3RoO1xuICAgICAgdmFyIGRlcml2ZWRLZXkgPSBuZXcgVWludDhBcnJheShuKSxcbiAgICAgICAgICBrO1xuXG4gICAgICBmb3IgKGogPSAxOyBqIDw9IDE5OyArK2opIHtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IG47ICsraykge1xuICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBlbmNyeXB0aW9uS2V5W2tdIF4gajtcbiAgICAgICAgfVxuXG4gICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpO1xuICAgICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGNoZWNrRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpO1xuICAgICAgY2hlY2tEYXRhID0gY2lwaGVyLmVuY3J5cHRCbG9jayhkZWZhdWx0UGFzc3dvcmRCeXRlcyk7XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY3J5cHRpb25LZXk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIHJldmlzaW9uLCBrZXlMZW5ndGgpIHtcbiAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheSgzMiksXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBqLFxuICAgICAgICBuO1xuICAgIG4gPSBNYXRoLm1pbigzMiwgcGFzc3dvcmQubGVuZ3RoKTtcblxuICAgIGZvciAoOyBpIDwgbjsgKytpKSB7XG4gICAgICBoYXNoRGF0YVtpXSA9IHBhc3N3b3JkW2ldO1xuICAgIH1cblxuICAgIGogPSAwO1xuXG4gICAgd2hpbGUgKGkgPCAzMikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgfVxuXG4gICAgdmFyIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaERhdGEsIDAsIGkpO1xuICAgIHZhciBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5TGVuZ3RoID4+IDM7XG5cbiAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IDUwOyArK2opIHtcbiAgICAgICAgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoLCAwLCBoYXNoLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNpcGhlciwgdXNlclBhc3N3b3JkO1xuXG4gICAgaWYgKHJldmlzaW9uID49IDMpIHtcbiAgICAgIHVzZXJQYXNzd29yZCA9IG93bmVyUGFzc3dvcmQ7XG4gICAgICB2YXIgZGVyaXZlZEtleSA9IG5ldyBVaW50OEFycmF5KGtleUxlbmd0aEluQnl0ZXMpLFxuICAgICAgICAgIGs7XG5cbiAgICAgIGZvciAoaiA9IDE5OyBqID49IDA7IGotLSkge1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwga2V5TGVuZ3RoSW5CeXRlczsgKytrKSB7XG4gICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGhhc2hba10gXiBqO1xuICAgICAgICB9XG5cbiAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sodXNlclBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoaGFzaC5zdWJhcnJheSgwLCBrZXlMZW5ndGhJbkJ5dGVzKSk7XG4gICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKG93bmVyUGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUGFzc3dvcmQ7XG4gIH1cblxuICB2YXIgaWRlbnRpdHlOYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJJZGVudGl0eVwiKTtcblxuICBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5KGRpY3QsIGZpbGVJZCwgcGFzc3dvcmQpIHtcbiAgICB2YXIgZmlsdGVyID0gZGljdC5nZXQoXCJGaWx0ZXJcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlciwgXCJTdGFuZGFyZFwiKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5rbm93biBlbmNyeXB0aW9uIG1ldGhvZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHZhciBhbGdvcml0aG0gPSBkaWN0LmdldChcIlZcIik7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWxnb3JpdGhtKSB8fCBhbGdvcml0aG0gIT09IDEgJiYgYWxnb3JpdGhtICE9PSAyICYmIGFsZ29yaXRobSAhPT0gNCAmJiBhbGdvcml0aG0gIT09IDUpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInVuc3VwcG9ydGVkIGVuY3J5cHRpb24gYWxnb3JpdGhtXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgIHZhciBrZXlMZW5ndGggPSBkaWN0LmdldChcIkxlbmd0aFwiKTtcblxuICAgIGlmICgha2V5TGVuZ3RoKSB7XG4gICAgICBpZiAoYWxnb3JpdGhtIDw9IDMpIHtcbiAgICAgICAga2V5TGVuZ3RoID0gNDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2ZEaWN0ID0gZGljdC5nZXQoXCJDRlwiKTtcbiAgICAgICAgdmFyIHN0cmVhbUNyeXB0b05hbWUgPSBkaWN0LmdldChcIlN0bUZcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNmRGljdCkgJiYgKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoc3RyZWFtQ3J5cHRvTmFtZSkpIHtcbiAgICAgICAgICBjZkRpY3Quc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICB2YXIgaGFuZGxlckRpY3QgPSBjZkRpY3QuZ2V0KHN0cmVhbUNyeXB0b05hbWUubmFtZSk7XG4gICAgICAgICAga2V5TGVuZ3RoID0gaGFuZGxlckRpY3QgJiYgaGFuZGxlckRpY3QuZ2V0KFwiTGVuZ3RoXCIpIHx8IDEyODtcblxuICAgICAgICAgIGlmIChrZXlMZW5ndGggPCA0MCkge1xuICAgICAgICAgICAga2V5TGVuZ3RoIDw8PSAzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihrZXlMZW5ndGgpIHx8IGtleUxlbmd0aCA8IDQwIHx8IGtleUxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQga2V5IGxlbmd0aFwiKTtcbiAgICB9XG5cbiAgICB2YXIgb3duZXJQYXNzd29yZCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDAsIDMyKTtcbiAgICB2YXIgdXNlclBhc3N3b3JkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVVwiKSkuc3ViYXJyYXkoMCwgMzIpO1xuICAgIHZhciBmbGFncyA9IGRpY3QuZ2V0KFwiUFwiKTtcbiAgICB2YXIgcmV2aXNpb24gPSBkaWN0LmdldChcIlJcIik7XG4gICAgdmFyIGVuY3J5cHRNZXRhZGF0YSA9IChhbGdvcml0aG0gPT09IDQgfHwgYWxnb3JpdGhtID09PSA1KSAmJiBkaWN0LmdldChcIkVuY3J5cHRNZXRhZGF0YVwiKSAhPT0gZmFsc2U7XG4gICAgdGhpcy5lbmNyeXB0TWV0YWRhdGEgPSBlbmNyeXB0TWV0YWRhdGE7XG4gICAgdmFyIGZpbGVJZEJ5dGVzID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGZpbGVJZCk7XG4gICAgdmFyIHBhc3N3b3JkQnl0ZXM7XG5cbiAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgIGlmIChyZXZpc2lvbiA9PT0gNikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhc3N3b3JkID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykocGFzc3dvcmQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFwiICsgXCJVbmFibGUgdG8gY29udmVydCBVVEY4IGVuY29kZWQgcGFzc3dvcmQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhc3N3b3JkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHZhciBlbmNyeXB0aW9uS2V5O1xuXG4gICAgaWYgKGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgZW5jcnlwdGlvbktleSA9IHByZXBhcmVLZXlEYXRhKGZpbGVJZEJ5dGVzLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb3duZXJWYWxpZGF0aW9uU2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDMyLCA0MCk7XG4gICAgICB2YXIgb3duZXJLZXlTYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiT1wiKSkuc3ViYXJyYXkoNDAsIDQ4KTtcbiAgICAgIHZhciB1Qnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSgwLCA0OCk7XG4gICAgICB2YXIgdXNlclZhbGlkYXRpb25TYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVVwiKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgIHZhciB1c2VyS2V5U2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlVcIikpLnN1YmFycmF5KDQwLCA0OCk7XG4gICAgICB2YXIgb3duZXJFbmNyeXB0aW9uID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiT0VcIikpO1xuICAgICAgdmFyIHVzZXJFbmNyeXB0aW9uID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVUVcIikpO1xuICAgICAgdmFyIHBlcm1zID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiUGVybXNcIikpO1xuICAgICAgZW5jcnlwdGlvbktleSA9IGNyZWF0ZUVuY3J5cHRpb25LZXkyMChyZXZpc2lvbiwgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpO1xuICAgIH1cblxuICAgIGlmICghZW5jcnlwdGlvbktleSAmJiAhcGFzc3dvcmQpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihcIk5vIHBhc3N3b3JkIGdpdmVuXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO1xuICAgIH0gZWxzZSBpZiAoIWVuY3J5cHRpb25LZXkgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHZhciBkZWNvZGVkUGFzc3dvcmQgPSBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgcmV2aXNpb24sIGtleUxlbmd0aCk7XG4gICAgICBlbmNyeXB0aW9uS2V5ID0gcHJlcGFyZUtleURhdGEoZmlsZUlkQnl0ZXMsIGRlY29kZWRQYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIWVuY3J5cHRpb25LZXkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihcIkluY29ycmVjdCBQYXNzd29yZFwiLCBfdXRpbC5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO1xuICAgIH1cblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAoYWxnb3JpdGhtID49IDQpIHtcbiAgICAgIHZhciBjZiA9IGRpY3QuZ2V0KFwiQ0ZcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZikpIHtcbiAgICAgICAgY2Yuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jZiA9IGNmO1xuICAgICAgdGhpcy5zdG1mID0gZGljdC5nZXQoXCJTdG1GXCIpIHx8IGlkZW50aXR5TmFtZTtcbiAgICAgIHRoaXMuc3RyZiA9IGRpY3QuZ2V0KFwiU3RyRlwiKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICB0aGlzLmVmZiA9IGRpY3QuZ2V0KFwiRUZGXCIpIHx8IHRoaXMuc3RtZjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZE9iamVjdEtleShudW0sIGdlbiwgZW5jcnlwdGlvbktleSwgaXNBZXMpIHtcbiAgICB2YXIga2V5ID0gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvbktleS5sZW5ndGggKyA5KSxcbiAgICAgICAgaSxcbiAgICAgICAgbjtcblxuICAgIGZvciAoaSA9IDAsIG4gPSBlbmNyeXB0aW9uS2V5Lmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAga2V5W2ldID0gZW5jcnlwdGlvbktleVtpXTtcbiAgICB9XG5cbiAgICBrZXlbaSsrXSA9IG51bSAmIDB4ZmY7XG4gICAga2V5W2krK10gPSBudW0gPj4gOCAmIDB4ZmY7XG4gICAga2V5W2krK10gPSBudW0gPj4gMTYgJiAweGZmO1xuICAgIGtleVtpKytdID0gZ2VuICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IGdlbiA+PiA4ICYgMHhmZjtcblxuICAgIGlmIChpc0Flcykge1xuICAgICAga2V5W2krK10gPSAweDczO1xuICAgICAga2V5W2krK10gPSAweDQxO1xuICAgICAga2V5W2krK10gPSAweDZjO1xuICAgICAga2V5W2krK10gPSAweDU0O1xuICAgIH1cblxuICAgIHZhciBoYXNoID0gY2FsY3VsYXRlTUQ1KGtleSwgMCwgaSk7XG4gICAgcmV0dXJuIGhhc2guc3ViYXJyYXkoMCwgTWF0aC5taW4oZW5jcnlwdGlvbktleS5sZW5ndGggKyA1LCAxNikpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDaXBoZXJDb25zdHJ1Y3RvcihjZiwgbmFtZSwgbnVtLCBnZW4sIGtleSkge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuXCIpO1xuICAgIH1cblxuICAgIHZhciBjcnlwdEZpbHRlciA9IGNmLmdldChuYW1lLm5hbWUpO1xuICAgIHZhciBjZm07XG5cbiAgICBpZiAoY3J5cHRGaWx0ZXIgIT09IG51bGwgJiYgY3J5cHRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2ZtID0gY3J5cHRGaWx0ZXIuZ2V0KFwiQ0ZNXCIpO1xuICAgIH1cblxuICAgIGlmICghY2ZtIHx8IGNmbS5uYW1lID09PSBcIk5vbmVcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ2lwaGVyKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBrZXksIGZhbHNlKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJBRVNWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JBRVNWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBRVMxMjhDaXBoZXIoYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGtleSwgdHJ1ZSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2ZtLm5hbWUgPT09IFwiQUVTVjNcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY3J5cHRvIG1ldGhvZFwiKTtcbiAgfVxuXG4gIENpcGhlclRyYW5zZm9ybUZhY3RvcnkucHJvdG90eXBlID0ge1xuICAgIGNyZWF0ZUNpcGhlclRyYW5zZm9ybTogZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeV9jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pIHtcbiAgICAgIGlmICh0aGlzLmFsZ29yaXRobSA9PT0gNCB8fCB0aGlzLmFsZ29yaXRobSA9PT0gNSkge1xuICAgICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShidWlsZENpcGhlckNvbnN0cnVjdG9yKHRoaXMuY2YsIHRoaXMuc3RtZiwgbnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSksIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdHJmLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBrZXkgPSBidWlsZE9iamVjdEtleShudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5LCBmYWxzZSk7XG5cbiAgICAgIHZhciBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihrZXkpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0oY2lwaGVyQ29uc3RydWN0b3IsIGNpcGhlckNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xufSgpO1xuXG5leHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbG9yU3BhY2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKHNyYywgZGVzdCwgdzEsIGgxLCB3MiwgaDIsIGFscGhhMDEpIHtcbiAgY29uc3QgQ09NUE9ORU5UUyA9IDM7XG4gIGFscGhhMDEgPSBhbHBoYTAxICE9PSAxID8gMCA6IGFscGhhMDE7XG4gIGNvbnN0IHhSYXRpbyA9IHcxIC8gdzI7XG4gIGNvbnN0IHlSYXRpbyA9IGgxIC8gaDI7XG4gIGxldCBuZXdJbmRleCA9IDAsXG4gICAgICBvbGRJbmRleDtcbiAgY29uc3QgeFNjYWxlZCA9IG5ldyBVaW50MTZBcnJheSh3Mik7XG4gIGNvbnN0IHcxU2NhbmxpbmUgPSB3MSAqIENPTVBPTkVOVFM7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3MjsgaSsrKSB7XG4gICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbykgKiBDT01QT05FTlRTO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgY29uc3QgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdzI7IGorKykge1xuICAgICAgb2xkSW5kZXggPSBweSArIHhTY2FsZWRbal07XG4gICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICBuZXdJbmRleCArPSBhbHBoYTAxO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgbnVtQ29tcHMpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQ29sb3JTcGFjZSkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuXCIpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5udW1Db21wcyA9IG51bUNvbXBzO1xuICB9XG5cbiAgZ2V0UmdiKHNyYywgc3JjT2Zmc2V0KSB7XG4gICAgY29uc3QgcmdiID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuICAgIHRoaXMuZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgcmdiLCAwKTtcbiAgICByZXR1cm4gcmdiO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtXCIpO1xuICB9XG5cbiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXJcIik7XG4gIH1cblxuICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoXCIpO1xuICB9XG5cbiAgaXNQYXNzdGhyb3VnaChiaXRzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgcmV0dXJuIENvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgdGhpcy5udW1Db21wcyk7XG4gIH1cblxuICBmaWxsUmdiKGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGJwYywgY29tcHMsIGFscGhhMDEpIHtcbiAgICBjb25zdCBjb3VudCA9IG9yaWdpbmFsV2lkdGggKiBvcmlnaW5hbEhlaWdodDtcbiAgICBsZXQgcmdiQnVmID0gbnVsbDtcbiAgICBjb25zdCBudW1Db21wb25lbnRDb2xvcnMgPSAxIDw8IGJwYztcbiAgICBjb25zdCBuZWVkc1Jlc2l6aW5nID0gb3JpZ2luYWxIZWlnaHQgIT09IGhlaWdodCB8fCBvcmlnaW5hbFdpZHRoICE9PSB3aWR0aDtcblxuICAgIGlmICh0aGlzLmlzUGFzc3Rocm91Z2goYnBjKSkge1xuICAgICAgcmdiQnVmID0gY29tcHM7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBzID09PSAxICYmIGNvdW50ID4gbnVtQ29tcG9uZW50Q29sb3JzICYmIHRoaXMubmFtZSAhPT0gXCJEZXZpY2VHcmF5XCIgJiYgdGhpcy5uYW1lICE9PSBcIkRldmljZVJHQlwiKSB7XG4gICAgICBjb25zdCBhbGxDb2xvcnMgPSBicGMgPD0gOCA/IG5ldyBVaW50OEFycmF5KG51bUNvbXBvbmVudENvbG9ycykgOiBuZXcgVWludDE2QXJyYXkobnVtQ29tcG9uZW50Q29sb3JzKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Db21wb25lbnRDb2xvcnM7IGkrKykge1xuICAgICAgICBhbGxDb2xvcnNbaV0gPSBpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xvck1hcCA9IG5ldyBVaW50OENsYW1wZWRBcnJheShudW1Db21wb25lbnRDb2xvcnMgKiAzKTtcbiAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGFsbENvbG9ycywgMCwgbnVtQ29tcG9uZW50Q29sb3JzLCBjb2xvck1hcCwgMCwgYnBjLCAwKTtcblxuICAgICAgaWYgKCFuZWVkc1Jlc2l6aW5nKSB7XG4gICAgICAgIGxldCBkZXN0UG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBjb21wc1tpXSAqIDM7XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gY29sb3JNYXBba2V5XTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAxXTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAyXTtcbiAgICAgICAgICBkZXN0UG9zICs9IGFscGhhMDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJnYkJ1ZiA9IG5ldyBVaW50OEFycmF5KGNvdW50ICogMyk7XG4gICAgICAgIGxldCByZ2JQb3MgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGNvbXBzW2ldICogMztcbiAgICAgICAgICByZ2JCdWZbcmdiUG9zKytdID0gY29sb3JNYXBba2V5XTtcbiAgICAgICAgICByZ2JCdWZbcmdiUG9zKytdID0gY29sb3JNYXBba2V5ICsgMV07XG4gICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleSArIDJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbmVlZHNSZXNpemluZykge1xuICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihjb21wcywgMCwgd2lkdGggKiBhY3R1YWxIZWlnaHQsIGRlc3QsIDAsIGJwYywgYWxwaGEwMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoY291bnQgKiAzKTtcbiAgICAgICAgdGhpcy5nZXRSZ2JCdWZmZXIoY29tcHMsIDAsIGNvdW50LCByZ2JCdWYsIDAsIGJwYywgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJnYkJ1Zikge1xuICAgICAgaWYgKG5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgcmVzaXplUmdiSW1hZ2UocmdiQnVmLCBkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWxwaGEwMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZGVzdFBvcyA9IDAsXG4gICAgICAgICAgICByZ2JQb3MgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHJnYkJ1ZltyZ2JQb3MrK107XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gcmdiQnVmW3JnYlBvcysrXTtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSByZ2JCdWZbcmdiUG9zKytdO1xuICAgICAgICAgIGRlc3RQb3MgKz0gYWxwaGEwMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidXNlc1plcm9Ub09uZVJhbmdlXCIsIHRydWUpO1xuICB9XG5cbiAgc3RhdGljIF9jYWNoZShjYWNoZUtleSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUsIHBhcnNlZENvbG9yU3BhY2UpIHtcbiAgICBpZiAoIWxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgXCJsb2NhbENvbG9yU3BhY2VDYWNoZVwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmICghcGFyc2VkQ29sb3JTcGFjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkIFwicGFyc2VkQ29sb3JTcGFjZVwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGxldCBjc05hbWUsIGNzUmVmO1xuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICBjc1JlZiA9IGNhY2hlS2V5O1xuICAgICAgY2FjaGVLZXkgPSB4cmVmLmZldGNoKGNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGVLZXkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICBjc05hbWUgPSBjYWNoZUtleS5uYW1lO1xuICAgIH1cblxuICAgIGlmIChjc05hbWUgfHwgY3NSZWYpIHtcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLnNldChjc05hbWUsIGNzUmVmLCBwYXJzZWRDb2xvclNwYWNlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0Q2FjaGVkKGNhY2hlS2V5LCB4cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIGlmICghbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5nZXRDYWNoZWQgLSBleHBlY3RlZCBcImxvY2FsQ29sb3JTcGFjZUNhY2hlXCIgYXJndW1lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICBjb25zdCBsb2NhbENvbG9yU3BhY2UgPSBsb2NhbENvbG9yU3BhY2VDYWNoZS5nZXRCeVJlZihjYWNoZUtleSk7XG5cbiAgICAgIGlmIChsb2NhbENvbG9yU3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsQ29sb3JTcGFjZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY2FjaGVLZXkgPSB4cmVmLmZldGNoKGNhY2hlS2V5KTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2FjaGVLZXkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICBjb25zdCBsb2NhbENvbG9yU3BhY2UgPSBsb2NhbENvbG9yU3BhY2VDYWNoZS5nZXRCeU5hbWUoY2FjaGVLZXkubmFtZSk7XG5cbiAgICAgIGlmIChsb2NhbENvbG9yU3BhY2UpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsQ29sb3JTcGFjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwYXJzZUFzeW5jKHtcbiAgICBjcyxcbiAgICB4cmVmLFxuICAgIHJlc291cmNlcyA9IG51bGwsXG4gICAgcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gIH0pIHtcbiAgICBjb25zdCBwYXJzZWRDb2xvclNwYWNlID0gdGhpcy5fcGFyc2UoY3MsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgIHRoaXMuX2NhY2hlKGNzLCB4cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgcGFyc2VkQ29sb3JTcGFjZSk7XG5cbiAgICByZXR1cm4gcGFyc2VkQ29sb3JTcGFjZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZSh7XG4gICAgY3MsXG4gICAgeHJlZixcbiAgICByZXNvdXJjZXMgPSBudWxsLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgY29uc3QgY2FjaGVkQ29sb3JTcGFjZSA9IHRoaXMuZ2V0Q2FjaGVkKGNzLCB4cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICBpZiAoY2FjaGVkQ29sb3JTcGFjZSkge1xuICAgICAgcmV0dXJuIGNhY2hlZENvbG9yU3BhY2U7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkQ29sb3JTcGFjZSA9IHRoaXMuX3BhcnNlKGNzLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICB0aGlzLl9jYWNoZShjcywgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUsIHBhcnNlZENvbG9yU3BhY2UpO1xuXG4gICAgcmV0dXJuIHBhcnNlZENvbG9yU3BhY2U7XG4gIH1cblxuICBzdGF0aWMgX3BhcnNlKGNzLCB4cmVmLCByZXNvdXJjZXMgPSBudWxsLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICBjcyA9IHhyZWYuZmV0Y2hJZlJlZihjcyk7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY3MpKSB7XG4gICAgICBzd2l0Y2ggKGNzLm5hbWUpIHtcbiAgICAgICAgY2FzZSBcIkRldmljZUdyYXlcIjpcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7XG5cbiAgICAgICAgY2FzZSBcIkRldmljZVJHQlwiOlxuICAgICAgICBjYXNlIFwiUkdCXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgICAgY2FzZSBcIkRldmljZUNNWUtcIjpcbiAgICAgICAgY2FzZSBcIkNNWUtcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7XG5cbiAgICAgICAgY2FzZSBcIlBhdHRlcm5cIjpcbiAgICAgICAgICByZXR1cm4gbmV3IFBhdHRlcm5DUyhudWxsKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyZXNvdXJjZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvclNwYWNlcyA9IHJlc291cmNlcy5nZXQoXCJDb2xvclNwYWNlXCIpO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY29sb3JTcGFjZXMpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlc0NTID0gY29sb3JTcGFjZXMuZ2V0KGNzLm5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChyZXNvdXJjZXNDUykge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShyZXNvdXJjZXNDUykpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZShyZXNvdXJjZXNDUywgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNzID0gcmVzb3VyY2VzQ1M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBDb2xvclNwYWNlOiAke2NzLm5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3MpKSB7XG4gICAgICBjb25zdCBtb2RlID0geHJlZi5mZXRjaElmUmVmKGNzWzBdKS5uYW1lO1xuICAgICAgbGV0IHBhcmFtcywgbnVtQ29tcHMsIGJhc2VDUywgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWE7XG5cbiAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtcblxuICAgICAgICBjYXNlIFwiRGV2aWNlUkdCXCI6XG4gICAgICAgIGNhc2UgXCJSR0JcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtcblxuICAgICAgICBjYXNlIFwiRGV2aWNlQ01ZS1wiOlxuICAgICAgICBjYXNlIFwiQ01ZS1wiOlxuICAgICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztcblxuICAgICAgICBjYXNlIFwiQ2FsR3JheVwiOlxuICAgICAgICAgIHBhcmFtcyA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIldoaXRlUG9pbnRcIik7XG4gICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIkJsYWNrUG9pbnRcIik7XG4gICAgICAgICAgZ2FtbWEgPSBwYXJhbXMuZ2V0KFwiR2FtbWFcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDYWxHcmF5Q1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEpO1xuXG4gICAgICAgIGNhc2UgXCJDYWxSR0JcIjpcbiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJXaGl0ZVBvaW50XCIpO1xuICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJCbGFja1BvaW50XCIpO1xuICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldEFycmF5KFwiR2FtbWFcIik7XG4gICAgICAgICAgY29uc3QgbWF0cml4ID0gcGFyYW1zLmdldEFycmF5KFwiTWF0cml4XCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgQ2FsUkdCQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEsIG1hdHJpeCk7XG5cbiAgICAgICAgY2FzZSBcIklDQ0Jhc2VkXCI6XG4gICAgICAgICAgY29uc3Qgc3RyZWFtID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICBjb25zdCBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgICAgICAgbnVtQ29tcHMgPSBkaWN0LmdldChcIk5cIik7XG4gICAgICAgICAgY29uc3QgYWx0ID0gZGljdC5nZXQoXCJBbHRlcm5hdGVcIik7XG5cbiAgICAgICAgICBpZiAoYWx0KSB7XG4gICAgICAgICAgICBjb25zdCBhbHRDUyA9IHRoaXMuX3BhcnNlKGFsdCwgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuXG4gICAgICAgICAgICBpZiAoYWx0Q1MubnVtQ29tcHMgPT09IG51bUNvbXBzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBhbHRDUztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobnVtQ29tcHMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlBhdHRlcm5cIjpcbiAgICAgICAgICBiYXNlQ1MgPSBjc1sxXSB8fCBudWxsO1xuXG4gICAgICAgICAgaWYgKGJhc2VDUykge1xuICAgICAgICAgICAgYmFzZUNTID0gdGhpcy5fcGFyc2UoYmFzZUNTLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQYXR0ZXJuQ1MoYmFzZUNTKTtcblxuICAgICAgICBjYXNlIFwiSW5kZXhlZFwiOlxuICAgICAgICBjYXNlIFwiSVwiOlxuICAgICAgICAgIGJhc2VDUyA9IHRoaXMuX3BhcnNlKGNzWzFdLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgY29uc3QgaGlWYWwgPSB4cmVmLmZldGNoSWZSZWYoY3NbMl0pICsgMTtcbiAgICAgICAgICBjb25zdCBsb29rdXAgPSB4cmVmLmZldGNoSWZSZWYoY3NbM10pO1xuICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhlZENTKGJhc2VDUywgaGlWYWwsIGxvb2t1cCk7XG5cbiAgICAgICAgY2FzZSBcIlNlcGFyYXRpb25cIjpcbiAgICAgICAgY2FzZSBcIkRldmljZU5cIjpcbiAgICAgICAgICBjb25zdCBuYW1lID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICBudW1Db21wcyA9IEFycmF5LmlzQXJyYXkobmFtZSkgPyBuYW1lLmxlbmd0aCA6IDE7XG4gICAgICAgICAgYmFzZUNTID0gdGhpcy5fcGFyc2UoY3NbMl0sIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICBjb25zdCB0aW50Rm4gPSBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGNzWzNdKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEFsdGVybmF0ZUNTKG51bUNvbXBzLCBiYXNlQ1MsIHRpbnRGbik7XG5cbiAgICAgICAgY2FzZSBcIkxhYlwiOlxuICAgICAgICAgIHBhcmFtcyA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIldoaXRlUG9pbnRcIik7XG4gICAgICAgICAgYmxhY2tQb2ludCA9IHBhcmFtcy5nZXRBcnJheShcIkJsYWNrUG9pbnRcIik7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJhbXMuZ2V0QXJyYXkoXCJSYW5nZVwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IExhYkNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIHJhbmdlKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5pbXBsZW1lbnRlZCBDb2xvclNwYWNlIG9iamVjdDogJHttb2RlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5yZWNvZ25pemVkIENvbG9yU3BhY2Ugb2JqZWN0OiAke2NzfWApO1xuICB9XG5cbiAgc3RhdGljIGlzRGVmYXVsdERlY29kZShkZWNvZGUsIG51bUNvbXBzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRlY29kZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChudW1Db21wcyAqIDIgIT09IGRlY29kZS5sZW5ndGgpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGhcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkZWNvZGUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgaWYgKGRlY29kZVtpXSAhPT0gMCB8fCBkZWNvZGVbaSArIDFdICE9PSAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2luZ2xldG9ucygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzaW5nbGV0b25zXCIsIHtcbiAgICAgIGdldCBncmF5KCkge1xuICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJncmF5XCIsIG5ldyBEZXZpY2VHcmF5Q1MoKSk7XG4gICAgICB9LFxuXG4gICAgICBnZXQgcmdiKCkge1xuICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyZ2JcIiwgbmV3IERldmljZVJnYkNTKCkpO1xuICAgICAgfSxcblxuICAgICAgZ2V0IGNteWsoKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNteWtcIiwgbmV3IERldmljZUNteWtDUygpKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Db2xvclNwYWNlID0gQ29sb3JTcGFjZTtcblxuY2xhc3MgQWx0ZXJuYXRlQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IobnVtQ29tcHMsIGJhc2UsIHRpbnRGbikge1xuICAgIHN1cGVyKFwiQWx0ZXJuYXRlXCIsIG51bUNvbXBzKTtcbiAgICB0aGlzLmJhc2UgPSBiYXNlO1xuICAgIHRoaXMudGludEZuID0gdGludEZuO1xuICAgIHRoaXMudG1wQnVmID0gbmV3IEZsb2F0MzJBcnJheShiYXNlLm51bUNvbXBzKTtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCB0bXBCdWYgPSB0aGlzLnRtcEJ1ZjtcbiAgICB0aGlzLnRpbnRGbihzcmMsIHNyY09mZnNldCwgdG1wQnVmLCAwKTtcbiAgICB0aGlzLmJhc2UuZ2V0UmdiSXRlbSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICB9XG5cbiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgIGNvbnN0IHRpbnRGbiA9IHRoaXMudGludEZuO1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG4gICAgY29uc3QgYmFzZU51bUNvbXBzID0gYmFzZS5udW1Db21wcztcbiAgICBjb25zdCB1c2VzWmVyb1RvT25lUmFuZ2UgPSBiYXNlLnVzZXNaZXJvVG9PbmVSYW5nZTtcbiAgICBjb25zdCBpc1Bhc3N0aHJvdWdoID0gKGJhc2UuaXNQYXNzdGhyb3VnaCg4KSB8fCAhdXNlc1plcm9Ub09uZVJhbmdlKSAmJiBhbHBoYTAxID09PSAwO1xuICAgIGxldCBwb3MgPSBpc1Bhc3N0aHJvdWdoID8gZGVzdE9mZnNldCA6IDA7XG4gICAgY29uc3QgYmFzZUJ1ZiA9IGlzUGFzc3Rocm91Z2ggPyBkZXN0IDogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGJhc2VOdW1Db21wcyAqIGNvdW50KTtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgY29uc3Qgc2NhbGVkID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgY29uc3QgdGludGVkID0gbmV3IEZsb2F0MzJBcnJheShiYXNlTnVtQ29tcHMpO1xuICAgIGxldCBpLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBudW1Db21wczsgaisrKSB7XG4gICAgICAgIHNjYWxlZFtqXSA9IHNyY1tzcmNPZmZzZXQrK10gKiBzY2FsZTtcbiAgICAgIH1cblxuICAgICAgdGludEZuKHNjYWxlZCwgMCwgdGludGVkLCAwKTtcblxuICAgICAgaWYgKHVzZXNaZXJvVG9PbmVSYW5nZSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgYmFzZU51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgICBiYXNlQnVmW3BvcysrXSA9IHRpbnRlZFtqXSAqIDI1NTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZS5nZXRSZ2JJdGVtKHRpbnRlZCwgMCwgYmFzZUJ1ZiwgcG9zKTtcbiAgICAgICAgcG9zICs9IGJhc2VOdW1Db21wcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzUGFzc3Rocm91Z2gpIHtcbiAgICAgIGJhc2UuZ2V0UmdiQnVmZmVyKGJhc2VCdWYsIDAsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCA4LCBhbHBoYTAxKTtcbiAgICB9XG4gIH1cblxuICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCAqIHRoaXMuYmFzZS5udW1Db21wcyAvIHRoaXMubnVtQ29tcHMsIGFscGhhMDEpO1xuICB9XG5cbn1cblxuY2xhc3MgUGF0dGVybkNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKGJhc2VDUykge1xuICAgIHN1cGVyKFwiUGF0dGVyblwiLCBudWxsKTtcbiAgICB0aGlzLmJhc2UgPSBiYXNlQ1M7XG4gIH1cblxuICBpc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCBicGMpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm5DUy5pc0RlZmF1bHREZWNvZGVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBJbmRleGVkQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IoYmFzZSwgaGlnaFZhbCwgbG9va3VwKSB7XG4gICAgc3VwZXIoXCJJbmRleGVkXCIsIDEpO1xuICAgIHRoaXMuYmFzZSA9IGJhc2U7XG4gICAgdGhpcy5oaWdoVmFsID0gaGlnaFZhbDtcbiAgICBjb25zdCBsZW5ndGggPSBiYXNlLm51bUNvbXBzICogaGlnaFZhbDtcbiAgICB0aGlzLmxvb2t1cCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShsb29rdXApKSB7XG4gICAgICBjb25zdCBieXRlcyA9IGxvb2t1cC5nZXRCeXRlcyhsZW5ndGgpO1xuICAgICAgdGhpcy5sb29rdXAuc2V0KGJ5dGVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsb29rdXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpcy5sb29rdXBbaV0gPSBsb29rdXAuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW5kZXhlZENTIC0gdW5yZWNvZ25pemVkIGxvb2t1cCB0YWJsZTogJHtsb29rdXB9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5iYXNlLm51bUNvbXBzO1xuICAgIGNvbnN0IHN0YXJ0ID0gc3JjW3NyY09mZnNldF0gKiBudW1Db21wcztcbiAgICB0aGlzLmJhc2UuZ2V0UmdiQnVmZmVyKHRoaXMubG9va3VwLCBzdGFydCwgMSwgZGVzdCwgZGVzdE9mZnNldCwgOCwgMCk7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYmFzZTtcbiAgICBjb25zdCBudW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgY29uc3Qgb3V0cHV0RGVsdGEgPSBiYXNlLmdldE91dHB1dExlbmd0aChudW1Db21wcywgYWxwaGEwMSk7XG4gICAgY29uc3QgbG9va3VwID0gdGhpcy5sb29rdXA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGNvbnN0IGxvb2t1cFBvcyA9IHNyY1tzcmNPZmZzZXQrK10gKiBudW1Db21wcztcbiAgICAgIGJhc2UuZ2V0UmdiQnVmZmVyKGxvb2t1cCwgbG9va3VwUG9zLCAxLCBkZXN0LCBkZXN0T2Zmc2V0LCA4LCBhbHBoYTAxKTtcbiAgICAgIGRlc3RPZmZzZXQgKz0gb3V0cHV0RGVsdGE7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMsIGFscGhhMDEpO1xuICB9XG5cbiAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRlY29kZU1hcCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkZWNvZGVNYXAubGVuZ3RoICE9PSAyKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEZWNvZGUgbWFwIGxlbmd0aCBpcyBub3QgY29ycmVjdFwiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihicGMpIHx8IGJwYyA8IDEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdFwiKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNvZGVNYXBbMF0gPT09IDAgJiYgZGVjb2RlTWFwWzFdID09PSAoMSA8PCBicGMpIC0gMTtcbiAgfVxuXG59XG5cbmNsYXNzIERldmljZUdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkRldmljZUdyYXlcIiwgMSk7XG4gIH1cblxuICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgY29uc3QgYyA9IHNyY1tzcmNPZmZzZXRdICogMjU1O1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IGRlc3RbZGVzdE9mZnNldCArIDJdID0gYztcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICBjb25zdCBzY2FsZSA9IDI1NSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuICAgIGxldCBqID0gc3JjT2Zmc2V0LFxuICAgICAgICBxID0gZGVzdE9mZnNldDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgY29uc3QgYyA9IHNjYWxlICogc3JjW2orK107XG4gICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICBxICs9IGFscGhhMDE7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTtcbiAgfVxuXG59XG5cbmNsYXNzIERldmljZVJnYkNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRGV2aWNlUkdCXCIsIDMpO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBzcmNbc3JjT2Zmc2V0XSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHNyY1tzcmNPZmZzZXQgKyAxXSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIDI1NTtcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICBpZiAoYml0cyA9PT0gOCAmJiBhbHBoYTAxID09PSAwKSB7XG4gICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjT2Zmc2V0LCBzcmNPZmZzZXQgKyBjb3VudCAqIDMpLCBkZXN0T2Zmc2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZSA9IDI1NSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuICAgIGxldCBqID0gc3JjT2Zmc2V0LFxuICAgICAgICBxID0gZGVzdE9mZnNldDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgcSArPSBhbHBoYTAxO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSkgLyAzIHwgMDtcbiAgfVxuXG4gIGlzUGFzc3Rocm91Z2goYml0cykge1xuICAgIHJldHVybiBiaXRzID09PSA4O1xuICB9XG5cbn1cblxuY29uc3QgRGV2aWNlQ215a0NTID0gZnVuY3Rpb24gRGV2aWNlQ215a0NTQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzcmNTY2FsZSwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IGMgPSBzcmNbc3JjT2Zmc2V0XSAqIHNyY1NjYWxlO1xuICAgIGNvbnN0IG0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiBzcmNTY2FsZTtcbiAgICBjb25zdCB5ID0gc3JjW3NyY09mZnNldCArIDJdICogc3JjU2NhbGU7XG4gICAgY29uc3QgayA9IHNyY1tzcmNPZmZzZXQgKyAzXSAqIHNyY1NjYWxlO1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSAyNTUgKyBjICogKC00LjM4NzMzMjM4NDYwOTk4OCAqIGMgKyA1NC40ODYxNTE5NDE4OTE3NiAqIG0gKyAxOC44MjI5MDUwMjE2NTMwMiAqIHkgKyAyMTIuMjU2NjI0NTE2Mzk1ODUgKiBrICsgLTI4NS4yMzMxMDI2MTM3MDA0KSArIG0gKiAoMS43MTQ5NzYzNDc3MzYyMTM0ICogbSAtIDUuNjA5NjczNjkwNDA0NzMxNSAqIHkgKyAtMTcuODczODcwODYxNDE1NDQ0ICogayAtIDUuNDk3MDA2NDI3MTk2MzY2KSArIHkgKiAoLTIuNTIxNzM0MDEzMTY4MzAzMyAqIHkgLSAyMS4yNDg5MjMzMzczNTMwNzMgKiBrICsgMTcuNTExOTI3MDg0MTgxMykgKyBrICogKC0yMS44NjEyMjE0NzQ2MzYwNSAqIGsgLSAxODkuNDgxODA4MzU5MjI3NDcpO1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gMjU1ICsgYyAqICg4Ljg0MTA0MTQyMjAzNjE0OSAqIGMgKyA2MC4xMTgwMjcwNDU1OTczNjYgKiBtICsgNi44NzE0MjU1OTIwNDkwMDcgKiB5ICsgMzEuMTU5MTAwMTMwMDU1OTIyICogayArIC03OS4yOTcwODQ0ODE2NTQ4KSArIG0gKiAoLTE1LjMxMDM2MTMwNjk2NzgxNyAqIG0gKyAxNy41NzUyNTEyNjExMDk0ODIgKiB5ICsgMTMxLjM1MjUwOTEyNDkzOTc2ICogayAtIDE5MC45NDUzMzAyNTg4OTUxKSArIHkgKiAoNC40NDQzMzkxMDI4NTI3MzkgKiB5ICsgOS44NjMyODYxNDkzNDA1ICogayAtIDI0Ljg2NzQxNTgyNTU1ODc4KSArIGsgKiAoLTIwLjczNzMyNTQ3MTE4MTAzNCAqIGsgLSAxODcuODA0NTM3MDk3MTk1NzgpO1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgKyAtMTQuMTgzNTc2Nzk5NjczMjg2KSArIG0gKiAoMTAuNDk1OTMyNzM0MzIwNzIgKiBtICsgNjMuMDIzNzg0OTQ3NTQwNTIgKiB5ICsgNTAuNjA2OTU3NjU2MzYwNzM0ICogayAtIDExMi4yMzg4NDI1MzcxOTI0OCkgKyB5ICogKDAuMDMyOTYwNDExMTQ4NzMyMTcgKiB5ICsgMTE1LjYwMzg0NDQ5NjQ2NjQxICogayArIC0xOTMuNTgyMDkzNTY4NjE1MDUpICsgayAqICgtMjIuMzM4MTY4MDczMDk4ODYgKiBrIC0gMTgwLjEyNjEzOTc0NzA4MzY3KTtcbiAgfVxuXG4gIGNsYXNzIERldmljZUNteWtDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoXCJEZXZpY2VDTVlLXCIsIDQpO1xuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgMSwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgfVxuXG4gICAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIHNjYWxlLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDQ7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggLyA0ICogKDMgKyBhbHBoYTAxKSB8IDA7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gRGV2aWNlQ215a0NTO1xufSgpO1xuXG5jb25zdCBDYWxHcmF5Q1MgPSBmdW5jdGlvbiBDYWxHcmF5Q1NDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoY3MsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSkge1xuICAgIGNvbnN0IEEgPSBzcmNbc3JjT2Zmc2V0XSAqIHNjYWxlO1xuICAgIGNvbnN0IEFHID0gQSAqKiBjcy5HO1xuICAgIGNvbnN0IEwgPSBjcy5ZVyAqIEFHO1xuICAgIGNvbnN0IHZhbCA9IE1hdGgubWF4KDI5NS44ICogTCAqKiAwLjMzMzMzMzMzMzMzMzMzMzMzMyAtIDQwLjgsIDApO1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSB2YWw7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSB2YWw7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSB2YWw7XG4gIH1cblxuICBjbGFzcyBDYWxHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSkge1xuICAgICAgc3VwZXIoXCJDYWxHcmF5XCIsIDEpO1xuXG4gICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXlcIik7XG4gICAgICB9XG5cbiAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTtcbiAgICAgIGdhbW1hID0gZ2FtbWEgfHwgMTtcbiAgICAgIHRoaXMuWFcgPSB3aGl0ZVBvaW50WzBdO1xuICAgICAgdGhpcy5ZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICB0aGlzLlpXID0gd2hpdGVQb2ludFsyXTtcbiAgICAgIHRoaXMuWEIgPSBibGFja1BvaW50WzBdO1xuICAgICAgdGhpcy5ZQiA9IGJsYWNrUG9pbnRbMV07XG4gICAgICB0aGlzLlpCID0gYmxhY2tQb2ludFsyXTtcbiAgICAgIHRoaXMuRyA9IGdhbW1hO1xuXG4gICAgICBpZiAodGhpcy5YVyA8IDAgfHwgdGhpcy5aVyA8IDAgfHwgdGhpcy5ZVyAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX1gICsgXCIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZVwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuWEIgPCAwIHx8IHRoaXMuWUIgPCAwIHx8IHRoaXMuWkIgPCAwKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO1xuICAgICAgICB0aGlzLlhCID0gdGhpcy5ZQiA9IHRoaXMuWkIgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5YQiAhPT0gMCB8fCB0aGlzLllCICE9PSAwIHx8IHRoaXMuWkIgIT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGAke3RoaXMubmFtZX0sIEJsYWNrUG9pbnQ6IFhCOiAke3RoaXMuWEJ9LCBZQjogJHt0aGlzLllCfSwgYCArIGBaQjogJHt0aGlzLlpCfSwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5HIDwgMSkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgR2FtbWE6ICR7dGhpcy5HfSBmb3IgJHt0aGlzLm5hbWV9LCBgICsgXCJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cIik7XG4gICAgICAgIHRoaXMuRyA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCAxKTtcbiAgICB9XG5cbiAgICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpO1xuICAgICAgICBzcmNPZmZzZXQgKz0gMTtcbiAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ2FsR3JheUNTO1xufSgpO1xuXG5jb25zdCBDYWxSR0JDUyA9IGZ1bmN0aW9uIENhbFJHQkNTQ2xvc3VyZSgpIHtcbiAgY29uc3QgQlJBREZPUkRfU0NBTEVfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC44OTUxLCAwLjI2NjQsIC0wLjE2MTQsIC0wLjc1MDIsIDEuNzEzNSwgMC4wMzY3LCAwLjAzODksIC0wLjA2ODUsIDEuMDI5Nl0pO1xuICBjb25zdCBCUkFERk9SRF9TQ0FMRV9JTlZFUlNFX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAuOTg2OTkyOSwgLTAuMTQ3MDU0MywgMC4xNTk5NjI3LCAwLjQzMjMwNTMsIDAuNTE4MzYwMywgMC4wNDkyOTEyLCAtMC4wMDg1Mjg3LCAwLjA0MDA0MjgsIDAuOTY4NDg2N10pO1xuICBjb25zdCBTUkdCX0Q2NV9YWVpfVE9fUkdCX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzMuMjQwNDU0MiwgLTEuNTM3MTM4NSwgLTAuNDk4NTMxNCwgLTAuOTY5MjY2MCwgMS44NzYwMTA4LCAwLjA0MTU1NjAsIDAuMDU1NjQzNCwgLTAuMjA0MDI1OSwgMS4wNTcyMjUyXSk7XG4gIGNvbnN0IEZMQVRfV0hJVEVQT0lOVF9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7XG4gIGNvbnN0IHRlbXBOb3JtYWxpemVNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICBjb25zdCB0ZW1wQ29udmVydE1hdHJpeDEgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICBjb25zdCB0ZW1wQ29udmVydE1hdHJpeDIgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICBjb25zdCBERUNPREVfTF9DT05TVEFOVCA9ICgoOCArIDE2KSAvIDExNikgKiogMyAvIDguMDtcblxuICBmdW5jdGlvbiBtYXRyaXhQcm9kdWN0KGEsIGIsIHJlc3VsdCkge1xuICAgIHJlc3VsdFswXSA9IGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbiAgICByZXN1bHRbMV0gPSBhWzNdICogYlswXSArIGFbNF0gKiBiWzFdICsgYVs1XSAqIGJbMl07XG4gICAgcmVzdWx0WzJdID0gYVs2XSAqIGJbMF0gKyBhWzddICogYlsxXSArIGFbOF0gKiBiWzJdO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFRvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIHJlc3VsdCkge1xuICAgIHJlc3VsdFswXSA9IExNU1swXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzBdO1xuICAgIHJlc3VsdFsxXSA9IExNU1sxXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzFdO1xuICAgIHJlc3VsdFsyXSA9IExNU1syXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzJdO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgcmVzdWx0KSB7XG4gICAgY29uc3QgRDY1WCA9IDAuOTUwNDc7XG4gICAgY29uc3QgRDY1WSA9IDE7XG4gICAgY29uc3QgRDY1WiA9IDEuMDg4ODM7XG4gICAgcmVzdWx0WzBdID0gTE1TWzBdICogRDY1WCAvIHNvdXJjZVdoaXRlUG9pbnRbMF07XG4gICAgcmVzdWx0WzFdID0gTE1TWzFdICogRDY1WSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07XG4gICAgcmVzdWx0WzJdID0gTE1TWzJdICogRDY1WiAvIHNvdXJjZVdoaXRlUG9pbnRbMl07XG4gIH1cblxuICBmdW5jdGlvbiBzUkdCVHJhbnNmZXJGdW5jdGlvbihjb2xvcikge1xuICAgIGlmIChjb2xvciA8PSAwLjAwMzEzMDgpIHtcbiAgICAgIHJldHVybiBhZGp1c3RUb1JhbmdlKDAsIDEsIDEyLjkyICogY29sb3IpO1xuICAgIH1cblxuICAgIGlmIChjb2xvciA+PSAwLjk5NTU0NTI1KSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRqdXN0VG9SYW5nZSgwLCAxLCAoMSArIDAuMDU1KSAqIGNvbG9yICoqICgxIC8gMi40KSAtIDAuMDU1KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkanVzdFRvUmFuZ2UobWluLCBtYXgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlTChMKSB7XG4gICAgaWYgKEwgPCAwKSB7XG4gICAgICByZXR1cm4gLWRlY29kZUwoLUwpO1xuICAgIH1cblxuICAgIGlmIChMID4gOC4wKSB7XG4gICAgICByZXR1cm4gKChMICsgMTYpIC8gMTE2KSAqKiAzO1xuICAgIH1cblxuICAgIHJldHVybiBMICogREVDT0RFX0xfQ09OU1RBTlQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChzb3VyY2VCbGFja1BvaW50LCBYWVpfRmxhdCwgcmVzdWx0KSB7XG4gICAgaWYgKHNvdXJjZUJsYWNrUG9pbnRbMF0gPT09IDAgJiYgc291cmNlQmxhY2tQb2ludFsxXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzJdID09PSAwKSB7XG4gICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXTtcbiAgICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdO1xuICAgICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgemVyb0RlY29kZUwgPSBkZWNvZGVMKDApO1xuICAgIGNvbnN0IFhfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWF9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMF0pO1xuICAgIGNvbnN0IFlfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWV9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMV0pO1xuICAgIGNvbnN0IFpfRFNUID0gemVyb0RlY29kZUw7XG4gICAgY29uc3QgWl9TUkMgPSBkZWNvZGVMKHNvdXJjZUJsYWNrUG9pbnRbMl0pO1xuICAgIGNvbnN0IFhfU2NhbGUgPSAoMSAtIFhfRFNUKSAvICgxIC0gWF9TUkMpO1xuICAgIGNvbnN0IFhfT2Zmc2V0ID0gMSAtIFhfU2NhbGU7XG4gICAgY29uc3QgWV9TY2FsZSA9ICgxIC0gWV9EU1QpIC8gKDEgLSBZX1NSQyk7XG4gICAgY29uc3QgWV9PZmZzZXQgPSAxIC0gWV9TY2FsZTtcbiAgICBjb25zdCBaX1NjYWxlID0gKDEgLSBaX0RTVCkgLyAoMSAtIFpfU1JDKTtcbiAgICBjb25zdCBaX09mZnNldCA9IDEgLSBaX1NjYWxlO1xuICAgIHJlc3VsdFswXSA9IFhZWl9GbGF0WzBdICogWF9TY2FsZSArIFhfT2Zmc2V0O1xuICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdICogWV9TY2FsZSArIFlfT2Zmc2V0O1xuICAgIHJlc3VsdFsyXSA9IFhZWl9GbGF0WzJdICogWl9TY2FsZSArIFpfT2Zmc2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBYWVpfSW4sIHJlc3VsdCkge1xuICAgIGlmIChzb3VyY2VXaGl0ZVBvaW50WzBdID09PSAxICYmIHNvdXJjZVdoaXRlUG9pbnRbMl0gPT09IDEpIHtcbiAgICAgIHJlc3VsdFswXSA9IFhZWl9JblswXTtcbiAgICAgIHJlc3VsdFsxXSA9IFhZWl9JblsxXTtcbiAgICAgIHJlc3VsdFsyXSA9IFhZWl9JblsyXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBMTVMgPSByZXN1bHQ7XG4gICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9NQVRSSVgsIFhZWl9JbiwgTE1TKTtcbiAgICBjb25zdCBMTVNfRmxhdCA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgY29udmVydFRvRmxhdChzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19GbGF0KTtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYLCBMTVNfRmxhdCwgcmVzdWx0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBYWVpfSW4sIHJlc3VsdCkge1xuICAgIGNvbnN0IExNUyA9IHJlc3VsdDtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgIGNvbnN0IExNU19ENjUgPSB0ZW1wTm9ybWFsaXplTWF0cml4O1xuICAgIGNvbnZlcnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIExNU19ENjUpO1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVgsIExNU19ENjUsIHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoY3MsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSkge1xuICAgIGNvbnN0IEEgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXRdICogc2NhbGUpO1xuICAgIGNvbnN0IEIgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXQgKyAxXSAqIHNjYWxlKTtcbiAgICBjb25zdCBDID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0ICsgMl0gKiBzY2FsZSk7XG4gICAgY29uc3QgQUdSID0gQSA9PT0gMSA/IDEgOiBBICoqIGNzLkdSO1xuICAgIGNvbnN0IEJHRyA9IEIgPT09IDEgPyAxIDogQiAqKiBjcy5HRztcbiAgICBjb25zdCBDR0IgPSBDID09PSAxID8gMSA6IEMgKiogY3MuR0I7XG4gICAgY29uc3QgWCA9IGNzLk1YQSAqIEFHUiArIGNzLk1YQiAqIEJHRyArIGNzLk1YQyAqIENHQjtcbiAgICBjb25zdCBZID0gY3MuTVlBICogQUdSICsgY3MuTVlCICogQkdHICsgY3MuTVlDICogQ0dCO1xuICAgIGNvbnN0IFogPSBjcy5NWkEgKiBBR1IgKyBjcy5NWkIgKiBCR0cgKyBjcy5NWkMgKiBDR0I7XG4gICAgY29uc3QgWFlaID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIFhZWlswXSA9IFg7XG4gICAgWFlaWzFdID0gWTtcbiAgICBYWVpbMl0gPSBaO1xuICAgIGNvbnN0IFhZWl9GbGF0ID0gdGVtcENvbnZlcnRNYXRyaXgyO1xuICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0ZsYXQoY3Mud2hpdGVQb2ludCwgWFlaLCBYWVpfRmxhdCk7XG4gICAgY29uc3QgWFlaX0JsYWNrID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIGNvbXBlbnNhdGVCbGFja1BvaW50KGNzLmJsYWNrUG9pbnQsIFhZWl9GbGF0LCBYWVpfQmxhY2spO1xuICAgIGNvbnN0IFhZWl9ENjUgPSB0ZW1wQ29udmVydE1hdHJpeDI7XG4gICAgbm9ybWFsaXplV2hpdGVQb2ludFRvRDY1KEZMQVRfV0hJVEVQT0lOVF9NQVRSSVgsIFhZWl9CbGFjaywgWFlaX0Q2NSk7XG4gICAgY29uc3QgU1JHQiA9IHRlbXBDb252ZXJ0TWF0cml4MTtcbiAgICBtYXRyaXhQcm9kdWN0KFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYLCBYWVpfRDY1LCBTUkdCKTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlswXSkgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzFdKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMl0pICogMjU1O1xuICB9XG5cbiAgY2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4KSB7XG4gICAgICBzdXBlcihcIkNhbFJHQlwiLCAzKTtcblxuICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0JcIik7XG4gICAgICB9XG5cbiAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICBnYW1tYSA9IGdhbW1hIHx8IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDFdKTtcbiAgICAgIG1hdHJpeCA9IG1hdHJpeCB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXSk7XG4gICAgICBjb25zdCBYVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICBjb25zdCBZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICBjb25zdCBaVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICB0aGlzLndoaXRlUG9pbnQgPSB3aGl0ZVBvaW50O1xuICAgICAgY29uc3QgWEIgPSBibGFja1BvaW50WzBdO1xuICAgICAgY29uc3QgWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgY29uc3QgWkIgPSBibGFja1BvaW50WzJdO1xuICAgICAgdGhpcy5ibGFja1BvaW50ID0gYmxhY2tQb2ludDtcbiAgICAgIHRoaXMuR1IgPSBnYW1tYVswXTtcbiAgICAgIHRoaXMuR0cgPSBnYW1tYVsxXTtcbiAgICAgIHRoaXMuR0IgPSBnYW1tYVsyXTtcbiAgICAgIHRoaXMuTVhBID0gbWF0cml4WzBdO1xuICAgICAgdGhpcy5NWUEgPSBtYXRyaXhbMV07XG4gICAgICB0aGlzLk1aQSA9IG1hdHJpeFsyXTtcbiAgICAgIHRoaXMuTVhCID0gbWF0cml4WzNdO1xuICAgICAgdGhpcy5NWUIgPSBtYXRyaXhbNF07XG4gICAgICB0aGlzLk1aQiA9IG1hdHJpeFs1XTtcbiAgICAgIHRoaXMuTVhDID0gbWF0cml4WzZdO1xuICAgICAgdGhpcy5NWUMgPSBtYXRyaXhbN107XG4gICAgICB0aGlzLk1aQyA9IG1hdHJpeFs4XTtcblxuICAgICAgaWYgKFhXIDwgMCB8fCBaVyA8IDAgfHwgWVcgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9YCArIFwiLCBubyBmYWxsYmFjayBhdmFpbGFibGVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChYQiA8IDAgfHwgWUIgPCAwIHx8IFpCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9IFske1hCfSwgJHtZQn0sICR7WkJ9XSwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpO1xuICAgICAgICB0aGlzLmJsYWNrUG9pbnQgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5HUiA8IDAgfHwgdGhpcy5HRyA8IDAgfHwgdGhpcy5HQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKGBJbnZhbGlkIEdhbW1hIFske3RoaXMuR1J9LCAke3RoaXMuR0d9LCAke3RoaXMuR0J9XSBmb3IgYCArIGAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO1xuICAgICAgICB0aGlzLkdSID0gdGhpcy5HRyA9IHRoaXMuR0IgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7XG4gICAgfVxuXG4gICAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgY29uc3Qgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ2FsUkdCQ1M7XG59KCk7XG5cbmNvbnN0IExhYkNTID0gZnVuY3Rpb24gTGFiQ1NDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBmbl9nKHgpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHggPj0gNiAvIDI5KSB7XG4gICAgICByZXN1bHQgPSB4ICogeCAqIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IDEwOCAvIDg0MSAqICh4IC0gNCAvIDI5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlKHZhbHVlLCBoaWdoMSwgbG93MiwgaGlnaDIpIHtcbiAgICByZXR1cm4gbG93MiArIHZhbHVlICogKGhpZ2gyIC0gbG93MikgLyBoaWdoMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihjcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGxldCBMcyA9IHNyY1tzcmNPZmZzZXRdO1xuICAgIGxldCBhcyA9IHNyY1tzcmNPZmZzZXQgKyAxXTtcbiAgICBsZXQgYnMgPSBzcmNbc3JjT2Zmc2V0ICsgMl07XG5cbiAgICBpZiAobWF4VmFsICE9PSBmYWxzZSkge1xuICAgICAgTHMgPSBkZWNvZGUoTHMsIG1heFZhbCwgMCwgMTAwKTtcbiAgICAgIGFzID0gZGVjb2RlKGFzLCBtYXhWYWwsIGNzLmFtaW4sIGNzLmFtYXgpO1xuICAgICAgYnMgPSBkZWNvZGUoYnMsIG1heFZhbCwgY3MuYm1pbiwgY3MuYm1heCk7XG4gICAgfVxuXG4gICAgaWYgKGFzID4gY3MuYW1heCkge1xuICAgICAgYXMgPSBjcy5hbWF4O1xuICAgIH0gZWxzZSBpZiAoYXMgPCBjcy5hbWluKSB7XG4gICAgICBhcyA9IGNzLmFtaW47XG4gICAgfVxuXG4gICAgaWYgKGJzID4gY3MuYm1heCkge1xuICAgICAgYnMgPSBjcy5ibWF4O1xuICAgIH0gZWxzZSBpZiAoYnMgPCBjcy5ibWluKSB7XG4gICAgICBicyA9IGNzLmJtaW47XG4gICAgfVxuXG4gICAgY29uc3QgTSA9IChMcyArIDE2KSAvIDExNjtcbiAgICBjb25zdCBMID0gTSArIGFzIC8gNTAwO1xuICAgIGNvbnN0IE4gPSBNIC0gYnMgLyAyMDA7XG4gICAgY29uc3QgWCA9IGNzLlhXICogZm5fZyhMKTtcbiAgICBjb25zdCBZID0gY3MuWVcgKiBmbl9nKE0pO1xuICAgIGNvbnN0IFogPSBjcy5aVyAqIGZuX2coTik7XG4gICAgbGV0IHIsIGcsIGI7XG5cbiAgICBpZiAoY3MuWlcgPCAxKSB7XG4gICAgICByID0gWCAqIDMuMTMzOSArIFkgKiAtMS42MTcgKyBaICogLTAuNDkwNjtcbiAgICAgIGcgPSBYICogLTAuOTc4NSArIFkgKiAxLjkxNiArIFogKiAwLjAzMzM7XG4gICAgICBiID0gWCAqIDAuMDcyICsgWSAqIC0wLjIyOSArIFogKiAxLjQwNTc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSBYICogMy4yNDA2ICsgWSAqIC0xLjUzNzIgKyBaICogLTAuNDk4NjtcbiAgICAgIGcgPSBYICogLTAuOTY4OSArIFkgKiAxLjg3NTggKyBaICogMC4wNDE1O1xuICAgICAgYiA9IFggKiAwLjA1NTcgKyBZICogLTAuMjA0ICsgWiAqIDEuMDU3O1xuICAgIH1cblxuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBNYXRoLnNxcnQocikgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBNYXRoLnNxcnQoZykgKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBNYXRoLnNxcnQoYikgKiAyNTU7XG4gIH1cblxuICBjbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIHJhbmdlKSB7XG4gICAgICBzdXBlcihcIkxhYlwiLCAzKTtcblxuICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWJcIik7XG4gICAgICB9XG5cbiAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTtcbiAgICAgIHJhbmdlID0gcmFuZ2UgfHwgWy0xMDAsIDEwMCwgLTEwMCwgMTAwXTtcbiAgICAgIHRoaXMuWFcgPSB3aGl0ZVBvaW50WzBdO1xuICAgICAgdGhpcy5ZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICB0aGlzLlpXID0gd2hpdGVQb2ludFsyXTtcbiAgICAgIHRoaXMuYW1pbiA9IHJhbmdlWzBdO1xuICAgICAgdGhpcy5hbWF4ID0gcmFuZ2VbMV07XG4gICAgICB0aGlzLmJtaW4gPSByYW5nZVsyXTtcbiAgICAgIHRoaXMuYm1heCA9IHJhbmdlWzNdO1xuICAgICAgdGhpcy5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICB0aGlzLllCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgIHRoaXMuWkIgPSBibGFja1BvaW50WzJdO1xuXG4gICAgICBpZiAodGhpcy5YVyA8IDAgfHwgdGhpcy5aVyA8IDAgfHwgdGhpcy5ZVyAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5YQiA8IDAgfHwgdGhpcy5ZQiA8IDAgfHwgdGhpcy5aQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdFwiKTtcbiAgICAgICAgdGhpcy5YQiA9IHRoaXMuWUIgPSB0aGlzLlpCID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYW1pbiA+IHRoaXMuYW1heCB8fCB0aGlzLmJtaW4gPiB0aGlzLmJtYXgpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzXCIpO1xuICAgICAgICB0aGlzLmFtaW4gPSAtMTAwO1xuICAgICAgICB0aGlzLmFtYXggPSAxMDA7XG4gICAgICAgIHRoaXMuYm1pbiA9IC0xMDA7XG4gICAgICAgIHRoaXMuYm1heCA9IDEwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGZhbHNlLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICB9XG5cbiAgICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICBjb25zdCBtYXhWYWwgPSAoMSA8PCBiaXRzKSAtIDE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgIHNyY09mZnNldCArPSAzO1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKSAvIDMgfCAwO1xuICAgIH1cblxuICAgIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLCBmYWxzZSk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gTGFiQ1M7XG59KCk7XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IGV4cG9ydHMuTG9jYWxHU3RhdGVDYWNoZSA9IGV4cG9ydHMuTG9jYWxGdW5jdGlvbkNhY2hlID0gZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IGV4cG9ydHMuTG9jYWxJbWFnZUNhY2hlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG5jbGFzcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUxvY2FsQ2FjaGUpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm9ubHlSZWZzKSB7XG4gICAgICB0aGlzLl9uYW1lUmVmTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5faW1hZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLl9uYW1lUmVmTWFwLmdldChuYW1lKTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ5UmVmKHJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlTWFwLmdldChuYW1lKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0QnlSZWYocmVmKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHJlZikgfHwgbnVsbDtcbiAgfVxuXG4gIHNldChuYW1lLCByZWYsIGRhdGEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIHNldChuYW1lLCByZWYgPSBudWxsLCBkYXRhKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbEltYWdlQ2FjaGUgPSBMb2NhbEltYWdlQ2FjaGU7XG5cbmNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUge1xuICBzZXQobmFtZSA9IG51bGwsIHJlZiA9IG51bGwsIGRhdGEpIHtcbiAgICBpZiAoIW5hbWUgJiYgIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhbmQvb3IgXCJyZWZcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IExvY2FsQ29sb3JTcGFjZUNhY2hlO1xuXG5jbGFzcyBMb2NhbEZ1bmN0aW9uQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBvbmx5UmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGBnZXRCeU5hbWVgIG1ldGhvZC5cIik7XG4gIH1cblxuICBzZXQobmFtZSA9IG51bGwsIHJlZiwgZGF0YSkge1xuICAgIGlmICghcmVmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCBcInJlZlwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxGdW5jdGlvbkNhY2hlID0gTG9jYWxGdW5jdGlvbkNhY2hlO1xuXG5jbGFzcyBMb2NhbEdTdGF0ZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUge1xuICBzZXQobmFtZSwgcmVmID0gbnVsbCwgZGF0YSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbEdTdGF0ZUNhY2hlLnNldCAtIGV4cGVjdGVkIFwibmFtZVwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmIChyZWYpIHtcbiAgICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbmFtZVJlZk1hcC5zZXQobmFtZSwgcmVmKTtcblxuICAgICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbWFnZU1hcC5oYXMobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pbWFnZU1hcC5zZXQobmFtZSwgZGF0YSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkxvY2FsR1N0YXRlQ2FjaGUgPSBMb2NhbEdTdGF0ZUNhY2hlO1xuXG5jbGFzcyBHbG9iYWxJbWFnZUNhY2hlIHtcbiAgc3RhdGljIGdldCBOVU1fUEFHRVNfVEhSRVNIT0xEKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk5VTV9QQUdFU19USFJFU0hPTERcIiwgMik7XG4gIH1cblxuICBzdGF0aWMgZ2V0IE1BWF9JTUFHRVNfVE9fQ0FDSEUoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTUFYX0lNQUdFU19UT19DQUNIRVwiLCAxMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9yZWZDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMuX2ltYWdlQ2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIHNob3VsZENhY2hlKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBjb25zdCBudW1QYWdlcyA9IHBhZ2VJbmRleFNldCA/IHBhZ2VJbmRleFNldC5zaXplICsgKHBhZ2VJbmRleFNldC5oYXMocGFnZUluZGV4KSA/IDAgOiAxKSA6IDE7XG5cbiAgICBpZiAobnVtUGFnZXMgPCBHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikgJiYgdGhpcy5faW1hZ2VDYWNoZS5zaXplID49IEdsb2JhbEltYWdlQ2FjaGUuTUFYX0lNQUdFU19UT19DQUNIRSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUGFnZUluZGV4KHJlZiwgcGFnZUluZGV4KSB7XG4gICAgbGV0IHBhZ2VJbmRleFNldCA9IHRoaXMuX3JlZkNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFwYWdlSW5kZXhTZXQpIHtcbiAgICAgIHBhZ2VJbmRleFNldCA9IG5ldyBTZXQoKTtcblxuICAgICAgdGhpcy5fcmVmQ2FjaGUucHV0KHJlZiwgcGFnZUluZGV4U2V0KTtcbiAgICB9XG5cbiAgICBwYWdlSW5kZXhTZXQuYWRkKHBhZ2VJbmRleCk7XG4gIH1cblxuICBnZXREYXRhKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXBhZ2VJbmRleFNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VJbmRleFNldC5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHBhZ2VJbmRleFNldC5hZGQocGFnZUluZGV4KTtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQocmVmKTtcbiAgfVxuXG4gIHNldERhdGEocmVmLCBkYXRhKSB7XG4gICAgaWYgKCF0aGlzLl9yZWZDYWNoZS5oYXMocmVmKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBleHBlY3RlZCBcImFkZFBhZ2VJbmRleFwiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHJlZikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5zaXplID49IEdsb2JhbEltYWdlQ2FjaGUuTUFYX0lNQUdFU19UT19DQUNIRSkge1xuICAgICAgKDAsIF91dGlsLmluZm8pKFwiR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gaWdub3JpbmcgaW1hZ2UgYWJvdmUgTUFYX0lNQUdFU19UT19DQUNIRS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKG9ubHlEYXRhID0gZmFsc2UpIHtcbiAgICBpZiAoIW9ubHlEYXRhKSB7XG4gICAgICB0aGlzLl9yZWZDYWNoZS5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IEdsb2JhbEltYWdlQ2FjaGU7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0UXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHM7XG5leHBvcnRzLk1hcmt1cEFubm90YXRpb24gPSBleHBvcnRzLkFubm90YXRpb25GYWN0b3J5ID0gZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGUgPSBleHBvcnRzLkFubm90YXRpb24gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfb2JqID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjMpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI2KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxuY2xhc3MgQW5ub3RhdGlvbkZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKHhyZWYsIHJlZiwgcGRmTWFuYWdlciwgaWRGYWN0b3J5KSB7XG4gICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImFjcm9Gb3JtXCIpLnRoZW4oYWNyb0Zvcm0gPT4ge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiX2NyZWF0ZVwiLCBbeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnksIGFjcm9Gb3JtXSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2NyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSwgYWNyb0Zvcm0pIHtcbiAgICBjb25zdCBkaWN0ID0geHJlZi5mZXRjaElmUmVmKHJlZik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRpY3QpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyZWYpID8gcmVmLnRvU3RyaW5nKCkgOiBgYW5ub3RfJHtpZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO1xuICAgIGxldCBzdWJ0eXBlID0gZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgIHN1YnR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShzdWJ0eXBlKSA/IHN1YnR5cGUubmFtZSA6IG51bGw7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIHhyZWYsXG4gICAgICByZWYsXG4gICAgICBkaWN0LFxuICAgICAgc3VidHlwZSxcbiAgICAgIGlkLFxuICAgICAgcGRmTWFuYWdlcixcbiAgICAgIGFjcm9Gb3JtOiBhY3JvRm9ybSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgPyBhY3JvRm9ybSA6IF9wcmltaXRpdmVzLkRpY3QuZW1wdHlcbiAgICB9O1xuXG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIFwiTGlua1wiOlxuICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiVGV4dFwiOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiV2lkZ2V0XCI6XG4gICAgICAgIGxldCBmaWVsZFR5cGUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgIGRpY3QsXG4gICAgICAgICAga2V5OiBcIkZUXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiVHhcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQnRuXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQ2hcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSBcIicgKyBmaWVsZFR5cGUgKyAnXCIsICcgKyBcImZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuXCIpO1xuICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJQb3B1cFwiOlxuICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkZyZWVUZXh0XCI6XG4gICAgICAgIHJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiTGluZVwiOlxuICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiU3F1YXJlXCI6XG4gICAgICAgIHJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkNpcmNsZVwiOlxuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJQb2x5TGluZVwiOlxuICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkNhcmV0XCI6XG4gICAgICAgIHJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiSW5rXCI6XG4gICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkhpZ2hsaWdodFwiOlxuICAgICAgICByZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJVbmRlcmxpbmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiU3F1aWdnbHlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBTcXVpZ2dseUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJTdHJpa2VPdXRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiU3RhbXBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJGaWxlQXR0YWNobWVudFwiOlxuICAgICAgICByZXR1cm4gbmV3IEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKCFzdWJ0eXBlKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGFubm90YXRpb24gdHlwZSBcIicgKyBzdWJ0eXBlICsgJ1wiLCAnICsgXCJmYWxsaW5nIGJhY2sgdG8gYmFzZSBhbm5vdGF0aW9uLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25GYWN0b3J5ID0gQW5ub3RhdGlvbkZhY3Rvcnk7XG5cbmZ1bmN0aW9uIGdldFF1YWRQb2ludHMoZGljdCwgcmVjdCkge1xuICBpZiAoIWRpY3QuaGFzKFwiUXVhZFBvaW50c1wiKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcXVhZFBvaW50cyA9IGRpY3QuZ2V0QXJyYXkoXCJRdWFkUG9pbnRzXCIpO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShxdWFkUG9pbnRzKSB8fCBxdWFkUG9pbnRzLmxlbmd0aCAlIDggPiAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBxdWFkUG9pbnRzTGlzdHMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBxdWFkUG9pbnRzLmxlbmd0aCAvIDg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcXVhZFBvaW50c0xpc3RzLnB1c2goW10pO1xuXG4gICAgZm9yIChsZXQgaiA9IGkgKiA4LCBqaiA9IGkgKiA4ICsgODsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgIGNvbnN0IHggPSBxdWFkUG9pbnRzW2pdO1xuICAgICAgY29uc3QgeSA9IHF1YWRQb2ludHNbaiArIDFdO1xuXG4gICAgICBpZiAoeCA8IHJlY3RbMF0gfHwgeCA+IHJlY3RbMl0gfHwgeSA8IHJlY3RbMV0gfHwgeSA+IHJlY3RbM10pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHF1YWRQb2ludHNMaXN0c1tpXS5wdXNoKHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHF1YWRQb2ludHNMaXN0cztcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNmb3JtTWF0cml4KHJlY3QsIGJib3gsIG1hdHJpeCkge1xuICBjb25zdCBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGJib3gsIG1hdHJpeCk7XG5cbiAgaWYgKG1pblggPT09IG1heFggfHwgbWluWSA9PT0gbWF4WSkge1xuICAgIHJldHVybiBbMSwgMCwgMCwgMSwgcmVjdFswXSwgcmVjdFsxXV07XG4gIH1cblxuICBjb25zdCB4UmF0aW8gPSAocmVjdFsyXSAtIHJlY3RbMF0pIC8gKG1heFggLSBtaW5YKTtcbiAgY29uc3QgeVJhdGlvID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIChtYXhZIC0gbWluWSk7XG4gIHJldHVybiBbeFJhdGlvLCAwLCAwLCB5UmF0aW8sIHJlY3RbMF0gLSBtaW5YICogeFJhdGlvLCByZWN0WzFdIC0gbWluWSAqIHlSYXRpb107XG59XG5cbmNsYXNzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBjb25zdCBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgdGhpcy5zZXRDb250ZW50cyhkaWN0LmdldChcIkNvbnRlbnRzXCIpKTtcbiAgICB0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoZGljdC5nZXQoXCJNXCIpKTtcbiAgICB0aGlzLnNldEZsYWdzKGRpY3QuZ2V0KFwiRlwiKSk7XG4gICAgdGhpcy5zZXRSZWN0YW5nbGUoZGljdC5nZXRBcnJheShcIlJlY3RcIikpO1xuICAgIHRoaXMuc2V0Q29sb3IoZGljdC5nZXRBcnJheShcIkNcIikpO1xuICAgIHRoaXMuc2V0Qm9yZGVyU3R5bGUoZGljdCk7XG4gICAgdGhpcy5zZXRBcHBlYXJhbmNlKGRpY3QpO1xuICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgIGFubm90YXRpb25GbGFnczogdGhpcy5mbGFncyxcbiAgICAgIGJvcmRlclN0eWxlOiB0aGlzLmJvcmRlclN0eWxlLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBjb250ZW50czogdGhpcy5jb250ZW50cyxcbiAgICAgIGhhc0FwcGVhcmFuY2U6ICEhdGhpcy5hcHBlYXJhbmNlLFxuICAgICAgaWQ6IHBhcmFtcy5pZCxcbiAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IHRoaXMubW9kaWZpY2F0aW9uRGF0ZSxcbiAgICAgIHJlY3Q6IHRoaXMucmVjdGFuZ2xlLFxuICAgICAgc3VidHlwZTogcGFyYW1zLnN1YnR5cGVcbiAgICB9O1xuICB9XG5cbiAgX2hhc0ZsYWcoZmxhZ3MsIGZsYWcpIHtcbiAgICByZXR1cm4gISEoZmxhZ3MgJiBmbGFnKTtcbiAgfVxuXG4gIF9pc1ZpZXdhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpO1xuICB9XG5cbiAgX2lzUHJpbnRhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgfVxuXG4gIGdldCB2aWV3YWJsZSgpIHtcbiAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncyk7XG4gIH1cblxuICBnZXQgcHJpbnRhYmxlKCkge1xuICAgIGlmICh0aGlzLmZsYWdzID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpO1xuICB9XG5cbiAgc2V0Q29udGVudHMoY29udGVudHMpIHtcbiAgICB0aGlzLmNvbnRlbnRzID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjb250ZW50cyB8fCBcIlwiKTtcbiAgfVxuXG4gIHNldE1vZGlmaWNhdGlvbkRhdGUobW9kaWZpY2F0aW9uRGF0ZSkge1xuICAgIHRoaXMubW9kaWZpY2F0aW9uRGF0ZSA9ICgwLCBfdXRpbC5pc1N0cmluZykobW9kaWZpY2F0aW9uRGF0ZSkgPyBtb2RpZmljYXRpb25EYXRlIDogbnVsbDtcbiAgfVxuXG4gIHNldEZsYWdzKGZsYWdzKSB7XG4gICAgdGhpcy5mbGFncyA9IE51bWJlci5pc0ludGVnZXIoZmxhZ3MpICYmIGZsYWdzID4gMCA/IGZsYWdzIDogMDtcbiAgfVxuXG4gIGhhc0ZsYWcoZmxhZykge1xuICAgIHJldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsIGZsYWcpO1xuICB9XG5cbiAgc2V0UmVjdGFuZ2xlKHJlY3RhbmdsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3RhbmdsZSkgJiYgcmVjdGFuZ2xlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sb3IoY29sb3IpIHtcbiAgICBjb25zdCByZ2JDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xvcikpIHtcbiAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbG9yLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGNvbG9yLCAwLCByZ2JDb2xvciwgMCk7XG5cbiAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGNvbG9yLCAwLCByZ2JDb2xvciwgMCk7XG5cbiAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRCb3JkZXJTdHlsZShib3JkZXJTdHlsZSkge1xuICAgIHRoaXMuYm9yZGVyU3R5bGUgPSBuZXcgQW5ub3RhdGlvbkJvcmRlclN0eWxlKCk7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGJvcmRlclN0eWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChib3JkZXJTdHlsZS5oYXMoXCJCU1wiKSkge1xuICAgICAgY29uc3QgZGljdCA9IGJvcmRlclN0eWxlLmdldChcIkJTXCIpO1xuICAgICAgY29uc3QgZGljdFR5cGUgPSBkaWN0LmdldChcIlR5cGVcIik7XG5cbiAgICAgIGlmICghZGljdFR5cGUgfHwgKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZGljdFR5cGUsIFwiQm9yZGVyXCIpKSB7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoZGljdC5nZXQoXCJXXCIpLCB0aGlzLnJlY3RhbmdsZSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUoZGljdC5nZXQoXCJTXCIpKTtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoZGljdC5nZXRBcnJheShcIkRcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYm9yZGVyU3R5bGUuaGFzKFwiQm9yZGVyXCIpKSB7XG4gICAgICBjb25zdCBhcnJheSA9IGJvcmRlclN0eWxlLmdldEFycmF5KFwiQm9yZGVyXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkgJiYgYXJyYXkubGVuZ3RoID49IDMpIHtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGFycmF5WzBdKTtcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhhcnJheVsxXSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoYXJyYXlbMl0sIHRoaXMucmVjdGFuZ2xlKTtcblxuICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoYXJyYXlbM10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgoMCk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwZWFyYW5jZShkaWN0KSB7XG4gICAgdGhpcy5hcHBlYXJhbmNlID0gbnVsbDtcbiAgICBjb25zdCBhcHBlYXJhbmNlU3RhdGVzID0gZGljdC5nZXQoXCJBUFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYXBwZWFyYW5jZVN0YXRlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxBcHBlYXJhbmNlU3RhdGUgPSBhcHBlYXJhbmNlU3RhdGVzLmdldChcIk5cIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShub3JtYWxBcHBlYXJhbmNlU3RhdGUpKSB7XG4gICAgICB0aGlzLmFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlU3RhdGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub3JtYWxBcHBlYXJhbmNlU3RhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXMgPSBkaWN0LmdldChcIkFTXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcykgfHwgIW5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5oYXMoYXMubmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlU3RhdGUuZ2V0KGFzLm5hbWUpO1xuICB9XG5cbiAgbG9hZFJlc291cmNlcyhrZXlzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZWFyYW5jZS5kaWN0LmdldEFzeW5jKFwiUmVzb3VyY2VzXCIpLnRoZW4ocmVzb3VyY2VzID0+IHtcbiAgICAgIGlmICghcmVzb3VyY2VzKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBfb2JqLk9iamVjdExvYWRlcihyZXNvdXJjZXMsIGtleXMsIHJlc291cmNlcy54cmVmKTtcbiAgICAgIHJldHVybiBvYmplY3RMb2FkZXIubG9hZCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcGVhcmFuY2UgPSB0aGlzLmFwcGVhcmFuY2U7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IGFwcGVhcmFuY2UuZGljdDtcbiAgICBjb25zdCByZXNvdXJjZXNQcm9taXNlID0gdGhpcy5sb2FkUmVzb3VyY2VzKFtcIkV4dEdTdGF0ZVwiLCBcIkNvbG9yU3BhY2VcIiwgXCJQYXR0ZXJuXCIsIFwiU2hhZGluZ1wiLCBcIlhPYmplY3RcIiwgXCJGb250XCJdKTtcbiAgICBjb25zdCBiYm94ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoXCJCQm94XCIpIHx8IFswLCAwLCAxLCAxXTtcbiAgICBjb25zdCBtYXRyaXggPSBhcHBlYXJhbmNlRGljdC5nZXRBcnJheShcIk1hdHJpeFwiKSB8fCBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgY29uc3QgdHJhbnNmb3JtID0gZ2V0VHJhbnNmb3JtTWF0cml4KGRhdGEucmVjdCwgYmJveCwgbWF0cml4KTtcbiAgICByZXR1cm4gcmVzb3VyY2VzUHJvbWlzZS50aGVuKHJlc291cmNlcyA9PiB7XG4gICAgICBjb25zdCBvcExpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICBvcExpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbiwgW2RhdGEucmVjdCwgdHJhbnNmb3JtLCBtYXRyaXhdKTtcbiAgICAgIHJldHVybiBldmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgc3RyZWFtOiBhcHBlYXJhbmNlLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgb3BMaXN0LmFkZE9wKF91dGlsLk9QUy5lbmRBbm5vdGF0aW9uLCBbXSk7XG4gICAgICAgIGFwcGVhcmFuY2UucmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb24gPSBBbm5vdGF0aW9uO1xuXG5jbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpZHRoID0gMTtcbiAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICB0aGlzLmRhc2hBcnJheSA9IFszXTtcbiAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgIHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXMgPSAwO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgsIHJlY3QgPSBbMCwgMCwgMCwgMF0pIHtcbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkod2lkdGgpKSB7XG4gICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih3aWR0aCkpIHtcbiAgICAgIGlmICh3aWR0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSAocmVjdFsyXSAtIHJlY3RbMF0pIC8gMjtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIDI7XG5cbiAgICAgICAgaWYgKG1heFdpZHRoID4gMCAmJiBtYXhIZWlnaHQgPiAwICYmICh3aWR0aCA+IG1heFdpZHRoIHx8IHdpZHRoID4gbWF4SGVpZ2h0KSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgQW5ub3RhdGlvbkJvcmRlclN0eWxlLnNldFdpZHRoIC0gaWdub3Jpbmcgd2lkdGg6ICR7d2lkdGh9YCk7XG4gICAgICAgICAgd2lkdGggPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB9XG4gIH1cblxuICBzZXRTdHlsZShzdHlsZSkge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoc3R5bGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChzdHlsZS5uYW1lKSB7XG4gICAgICBjYXNlIFwiU1wiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiSVwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJVXCI6XG4gICAgICAgIHRoaXMuc3R5bGUgPSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldERhc2hBcnJheShkYXNoQXJyYXkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBsZXQgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZGFzaEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgYWxsWmVyb3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgdGhpcy5kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhc2hBcnJheSkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgfVxuICB9XG5cbiAgc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhyYWRpdXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgfVxuICB9XG5cbiAgc2V0VmVydGljYWxDb3JuZXJSYWRpdXMocmFkaXVzKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIocmFkaXVzKSkge1xuICAgICAgdGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cyA9IHJhZGl1cztcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZTtcblxuY2xhc3MgTWFya3VwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtZXRlcnMuZGljdDtcblxuICAgIGlmIChkaWN0LmhhcyhcIklSVFwiKSkge1xuICAgICAgY29uc3QgcmF3SVJUID0gZGljdC5nZXRSYXcoXCJJUlRcIik7XG4gICAgICB0aGlzLmRhdGEuaW5SZXBseVRvID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyYXdJUlQpID8gcmF3SVJULnRvU3RyaW5nKCkgOiBudWxsO1xuICAgICAgY29uc3QgcnQgPSBkaWN0LmdldChcIlJUXCIpO1xuICAgICAgdGhpcy5kYXRhLnJlcGx5VHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJ0KSA/IHJ0Lm5hbWUgOiBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLlJFUExZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEucmVwbHlUeXBlID09PSBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBkaWN0LmdldChcIklSVFwiKTtcbiAgICAgIHRoaXMuZGF0YS50aXRsZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykocGFyZW50LmdldChcIlRcIikgfHwgXCJcIik7XG4gICAgICB0aGlzLnNldENvbnRlbnRzKHBhcmVudC5nZXQoXCJDb250ZW50c1wiKSk7XG4gICAgICB0aGlzLmRhdGEuY29udGVudHMgPSB0aGlzLmNvbnRlbnRzO1xuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJDcmVhdGlvbkRhdGVcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldENyZWF0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiQ3JlYXRpb25EYXRlXCIpKTtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJNXCIpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiTVwiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gdGhpcy5tb2RpZmljYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBwYXJlbnQuaGFzKFwiUG9wdXBcIik7XG5cbiAgICAgIGlmICghcGFyZW50LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50LmdldEFycmF5KFwiQ1wiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS50aXRsZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpO1xuICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUoZGljdC5nZXQoXCJDcmVhdGlvbkRhdGVcIikpO1xuICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZGljdC5oYXMoXCJQb3B1cFwiKTtcblxuICAgICAgaWYgKCFkaWN0LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDcmVhdGlvbkRhdGUoY3JlYXRpb25EYXRlKSB7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGNyZWF0aW9uRGF0ZSkgPyBjcmVhdGlvbkRhdGUgOiBudWxsO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NYXJrdXBBbm5vdGF0aW9uID0gTWFya3VwQW5ub3RhdGlvbjtcblxuY2xhc3MgV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMucmVmID0gcGFyYW1zLnJlZjtcbiAgICBkYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuV0lER0VUO1xuICAgIGRhdGEuZmllbGROYW1lID0gdGhpcy5fY29uc3RydWN0RmllbGROYW1lKGRpY3QpO1xuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJWXCIsXG4gICAgICBnZXRBcnJheTogdHJ1ZVxuICAgIH0pO1xuICAgIGRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShmaWVsZFZhbHVlKTtcbiAgICBkYXRhLmFsdGVybmF0aXZlVGV4dCA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUVVwiKSB8fCBcIlwiKTtcbiAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiREFcIlxuICAgIH0pIHx8IHBhcmFtcy5hY3JvRm9ybS5nZXQoXCJEQVwiKSB8fCBcIlwiO1xuICAgIGNvbnN0IGZpZWxkVHlwZSA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkZUXCJcbiAgICB9KTtcbiAgICBkYXRhLmZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG4gICAgdGhpcy5maWVsZFJlc291cmNlcyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkRSXCJcbiAgICB9KSB8fCBwYXJhbXMuYWNyb0Zvcm0uZ2V0KFwiRFJcIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICBkYXRhLmZpZWxkRmxhZ3MgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJGZlwiXG4gICAgfSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF0YS5maWVsZEZsYWdzKSB8fCBkYXRhLmZpZWxkRmxhZ3MgPCAwKSB7XG4gICAgICBkYXRhLmZpZWxkRmxhZ3MgPSAwO1xuICAgIH1cblxuICAgIGRhdGEucmVhZE9ubHkgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFQURPTkxZKTtcblxuICAgIGlmIChkYXRhLmZpZWxkVHlwZSA9PT0gXCJTaWdcIikge1xuICAgICAgZGF0YS5maWVsZFZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuc2V0RmxhZ3MoX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgICB9XG4gIH1cblxuICBfY29uc3RydWN0RmllbGROYW1lKGRpY3QpIHtcbiAgICBpZiAoIWRpY3QuaGFzKFwiVFwiKSAmJiAhZGljdC5oYXMoXCJQYXJlbnRcIikpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlVua25vd24gZmllbGQgbmFtZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpZWxkIG5hbWUuXCIpO1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKCFkaWN0LmhhcyhcIlBhcmVudFwiKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZE5hbWUgPSBbXTtcblxuICAgIGlmIChkaWN0LmhhcyhcIlRcIikpIHtcbiAgICAgIGZpZWxkTmFtZS51bnNoaWZ0KCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpKSk7XG4gICAgfVxuXG4gICAgbGV0IGxvb3BEaWN0ID0gZGljdDtcblxuICAgIHdoaWxlIChsb29wRGljdC5oYXMoXCJQYXJlbnRcIikpIHtcbiAgICAgIGxvb3BEaWN0ID0gbG9vcERpY3QuZ2V0KFwiUGFyZW50XCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGxvb3BEaWN0KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGxvb3BEaWN0LmhhcyhcIlRcIikpIHtcbiAgICAgICAgZmllbGROYW1lLnVuc2hpZnQoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShsb29wRGljdC5nZXQoXCJUXCIpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkTmFtZS5qb2luKFwiLlwiKTtcbiAgfVxuXG4gIF9kZWNvZGVGb3JtVmFsdWUoZm9ybVZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1WYWx1ZS5maWx0ZXIoaXRlbSA9PiAoMCwgX3V0aWwuaXNTdHJpbmcpKGl0ZW0pKS5tYXAoaXRlbSA9PiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvcm1WYWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZvcm1WYWx1ZS5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZm9ybVZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhc0ZpZWxkRmxhZyhmbGFnKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZGF0YS5maWVsZEZsYWdzICYgZmxhZyk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAocmVuZGVyRm9ybXMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2hhc1RleHQpIHtcbiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRBcHBlYXJhbmNlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpLnRoZW4oY29udGVudCA9PiB7XG4gICAgICBpZiAodGhpcy5hcHBlYXJhbmNlICYmIGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcblxuICAgICAgaWYgKCF0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UgfHwgY29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRyaXggPSBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgICBjb25zdCBiYm94ID0gWzAsIDAsIHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF0sIHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV1dO1xuICAgICAgY29uc3QgdHJhbnNmb3JtID0gZ2V0VHJhbnNmb3JtTWF0cml4KHRoaXMuZGF0YS5yZWN0LCBiYm94LCBtYXRyaXgpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbkFubm90YXRpb24sIFt0aGlzLmRhdGEucmVjdCwgdHJhbnNmb3JtLCBtYXRyaXhdKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShjb250ZW50KTtcbiAgICAgIHJldHVybiBldmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXM6IHRoaXMuZmllbGRSZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbiwgW10pO1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAodGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IGFubm90YXRpb25TdG9yYWdlW3RoaXMuZGF0YS5pZF0pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBhcHBlYXJhbmNlID0gYXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcblxuICAgIGlmIChhcHBlYXJhbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkaWN0ID0gZXZhbHVhdG9yLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRpY3QpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBiYm94ID0gWzAsIDAsIHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF0sIHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV1dO1xuICAgIGNvbnN0IG5ld1JlZiA9IGV2YWx1YXRvci54cmVmLmdldE5ld1JlZigpO1xuICAgIGNvbnN0IEFQID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoZXZhbHVhdG9yLnhyZWYpO1xuICAgIEFQLnNldChcIk5cIiwgbmV3UmVmKTtcbiAgICBjb25zdCB2YWx1ZSA9IGFubm90YXRpb25TdG9yYWdlW3RoaXMuZGF0YS5pZF07XG4gICAgY29uc3QgZW5jcnlwdCA9IGV2YWx1YXRvci54cmVmLmVuY3J5cHQ7XG4gICAgbGV0IG9yaWdpbmFsVHJhbnNmb3JtID0gbnVsbDtcbiAgICBsZXQgbmV3VHJhbnNmb3JtID0gbnVsbDtcblxuICAgIGlmIChlbmNyeXB0KSB7XG4gICAgICBvcmlnaW5hbFRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSwgdGhpcy5yZWYuZ2VuKTtcbiAgICAgIG5ld1RyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKG5ld1JlZi5udW0sIG5ld1JlZi5nZW4pO1xuICAgICAgYXBwZWFyYW5jZSA9IG5ld1RyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKGFwcGVhcmFuY2UpO1xuICAgIH1cblxuICAgIGRpY3Quc2V0KFwiVlwiLCB2YWx1ZSk7XG4gICAgZGljdC5zZXQoXCJBUFwiLCBBUCk7XG4gICAgZGljdC5zZXQoXCJNXCIsIGBEOiR7KDAsIF91dGlsLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7XG4gICAgY29uc3QgYXBwZWFyYW5jZURpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdChldmFsdWF0b3IueHJlZik7XG4gICAgYXBwZWFyYW5jZURpY3Quc2V0KFwiTGVuZ3RoXCIsIGFwcGVhcmFuY2UubGVuZ3RoKTtcbiAgICBhcHBlYXJhbmNlRGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRm9ybVwiKSk7XG4gICAgYXBwZWFyYW5jZURpY3Quc2V0KFwiUmVzb3VyY2VzXCIsIHRoaXMuZmllbGRSZXNvdXJjZXMpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIkJCb3hcIiwgYmJveCk7XG4gICAgY29uc3QgYnVmZmVyT3JpZ2luYWwgPSBbYCR7dGhpcy5yZWYubnVtfSAke3RoaXMucmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShkaWN0LCBidWZmZXJPcmlnaW5hbCwgb3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck9yaWdpbmFsLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgY29uc3QgYnVmZmVyTmV3ID0gW2Ake25ld1JlZi5udW19ICR7bmV3UmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShhcHBlYXJhbmNlRGljdCwgYnVmZmVyTmV3LCBuZXdUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck5ldy5wdXNoKFwiIHN0cmVhbVxcblwiKTtcbiAgICBidWZmZXJOZXcucHVzaChhcHBlYXJhbmNlKTtcbiAgICBidWZmZXJOZXcucHVzaChcIlxcbmVuZHN0cmVhbVxcbmVuZG9ialxcblwiKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBkYXRhOiBidWZmZXJPcmlnaW5hbC5qb2luKFwiXCIpXG4gICAgfSwge1xuICAgICAgcmVmOiBuZXdSZWYsXG4gICAgICBkYXRhOiBidWZmZXJOZXcuam9pbihcIlwiKVxuICAgIH1dO1xuICB9XG5cbiAgYXN5bmMgX2dldEFwcGVhcmFuY2UoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IGlzUGFzc3dvcmQgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKTtcblxuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UgfHwgaXNQYXNzd29yZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBhbm5vdGF0aW9uU3RvcmFnZVt0aGlzLmRhdGEuaWRdO1xuXG4gICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0UGFkZGluZyA9IDI7XG4gICAgY29uc3QgaFBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZztcbiAgICBjb25zdCB0b3RhbEhlaWdodCA9IHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV07XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG4gICAgY29uc3QgZm9udEluZm8gPSBhd2FpdCB0aGlzLl9nZXRGb250RGF0YShldmFsdWF0b3IsIHRhc2spO1xuICAgIGNvbnN0IFtmb250LCBmb250TmFtZV0gPSBmb250SW5mbztcbiAgICBsZXQgZm9udFNpemUgPSBmb250SW5mb1syXTtcbiAgICBmb250U2l6ZSA9IHRoaXMuX2NvbXB1dGVGb250U2l6ZShmb250LCBmb250TmFtZSwgZm9udFNpemUsIHRvdGFsSGVpZ2h0KTtcbiAgICBsZXQgZGVzY2VudCA9IGZvbnQuZGVzY2VudDtcblxuICAgIGlmIChpc05hTihkZXNjZW50KSkge1xuICAgICAgZGVzY2VudCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZyArIE1hdGguYWJzKGRlc2NlbnQpICogZm9udFNpemU7XG4gICAgY29uc3QgZGVmYXVsdEFwcGVhcmFuY2UgPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2U7XG4gICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7XG5cbiAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShkZWZhdWx0QXBwZWFyYW5jZSwgdmFsdWUsIHRvdGFsV2lkdGgsIGhQYWRkaW5nLCB2UGFkZGluZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5tdWx0aUxpbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKGRlZmF1bHRBcHBlYXJhbmNlLCB2YWx1ZSwgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgsIHRvdGFsSGVpZ2h0LCBhbGlnbm1lbnQsIGhQYWRkaW5nLCB2UGFkZGluZyk7XG4gICAgfVxuXG4gICAgaWYgKGFsaWdubWVudCA9PT0gMCB8fCBhbGlnbm1lbnQgPiAyKSB7XG4gICAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAke2hQYWRkaW5nfSAke3ZQYWRkaW5nfSBUbSAoJHsoMCwgX3V0aWwuZXNjYXBlU3RyaW5nKSh2YWx1ZSl9KSBUamAgKyBcIiBFVCBRIEVNQ1wiO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkVGV4dCA9IHRoaXMuX3JlbmRlclRleHQodmFsdWUsIGZvbnQsIGZvbnRTaXplLCB0b3RhbFdpZHRoLCBhbGlnbm1lbnQsIGhQYWRkaW5nLCB2UGFkZGluZyk7XG5cbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAwIDAgVG0gJHtyZW5kZXJlZFRleHR9YCArIFwiIEVUIFEgRU1DXCI7XG4gIH1cblxuICBhc3luYyBfZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGZvbnRTaXplOiAwLFxuICAgICAgZm9udDogbnVsbCxcbiAgICAgIGZvbnROYW1lOiBudWxsLFxuXG4gICAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICB9O1xuICAgIGF3YWl0IGV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJpbmdTdHJlYW0odGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlKSxcbiAgICAgIHRhc2ssXG4gICAgICByZXNvdXJjZXM6IHRoaXMuZmllbGRSZXNvdXJjZXMsXG4gICAgICBvcGVyYXRvckxpc3QsXG4gICAgICBpbml0aWFsU3RhdGVcbiAgICB9KTtcbiAgICByZXR1cm4gW2luaXRpYWxTdGF0ZS5mb250LCBpbml0aWFsU3RhdGUuZm9udE5hbWUsIGluaXRpYWxTdGF0ZS5mb250U2l6ZV07XG4gIH1cblxuICBfY29tcHV0ZUZvbnRTaXplKGZvbnQsIGZvbnROYW1lLCBmb250U2l6ZSwgaGVpZ2h0KSB7XG4gICAgaWYgKGZvbnRTaXplID09PSBudWxsIHx8IGZvbnRTaXplID09PSAwKSB7XG4gICAgICBjb25zdCBlbSA9IGZvbnQuY2hhcnNUb0dseXBocyhcIk1cIiwgdHJ1ZSlbMF0ud2lkdGggLyAxMDAwO1xuICAgICAgY29uc3QgY2FwSGVpZ2h0ID0gMC43ICogZW07XG4gICAgICBmb250U2l6ZSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gKDEuNSAqIGNhcEhlaWdodCkpKTtcbiAgICAgIGxldCBmb250UmVnZXggPSBuZXcgUmVnRXhwKGAvJHtmb250TmFtZX1cXFxccytbMC05XFwuXStcXFxccytUZmApO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlLnNlYXJjaChmb250UmVnZXgpID09PSAtMSkge1xuICAgICAgICBmb250UmVnZXggPSBuZXcgUmVnRXhwKGAvJHtmb250TmFtZX1cXFxccytUZmApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UgPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UucmVwbGFjZShmb250UmVnZXgsIGAvJHtmb250TmFtZX0gJHtmb250U2l6ZX0gVGZgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9udFNpemU7XG4gIH1cblxuICBfcmVuZGVyVGV4dCh0ZXh0LCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgYWxpZ25tZW50LCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHModGV4dCk7XG4gICAgY29uc3Qgc2NhbGUgPSBmb250U2l6ZSAvIDEwMDA7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7XG4gICAgICB3aWR0aCArPSBnbHlwaC53aWR0aCAqIHNjYWxlO1xuICAgIH1cblxuICAgIGxldCBzaGlmdDtcblxuICAgIGlmIChhbGlnbm1lbnQgPT09IDEpIHtcbiAgICAgIHNoaWZ0ID0gKHRvdGFsV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50ID09PSAyKSB7XG4gICAgICBzaGlmdCA9IHRvdGFsV2lkdGggLSB3aWR0aCAtIGhQYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGlmdCA9IGhQYWRkaW5nO1xuICAgIH1cblxuICAgIHNoaWZ0ID0gc2hpZnQudG9GaXhlZCgyKTtcbiAgICB2UGFkZGluZyA9IHZQYWRkaW5nLnRvRml4ZWQoMik7XG4gICAgcmV0dXJuIGAke3NoaWZ0fSAke3ZQYWRkaW5nfSBUZCAoJHsoMCwgX3V0aWwuZXNjYXBlU3RyaW5nKSh0ZXh0KX0pIFRqYDtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5faGFzVGV4dCA9IHRydWU7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtcy5kaWN0O1xuXG4gICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKHRoaXMuZGF0YS5maWVsZFZhbHVlKSkge1xuICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBcIlwiO1xuICAgIH1cblxuICAgIGxldCBhbGlnbm1lbnQgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJRXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGlnbm1lbnQpIHx8IGFsaWdubWVudCA8IDAgfHwgYWxpZ25tZW50ID4gMikge1xuICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEudGV4dEFsaWdubWVudCA9IGFsaWdubWVudDtcbiAgICBsZXQgbWF4aW11bUxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIk1heExlblwiXG4gICAgfSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4aW11bUxlbmd0aCkgfHwgbWF4aW11bUxlbmd0aCA8IDApIHtcbiAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5tYXhMZW4gPSBtYXhpbXVtTGVuZ3RoO1xuICAgIHRoaXMuZGF0YS5tdWx0aUxpbmUgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgdGhpcy5kYXRhLmNvbWIgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpICYmIHRoaXMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gIH1cblxuICBfZ2V0Q29tYkFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIHRleHQsIHdpZHRoLCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBjb21iV2lkdGggPSAod2lkdGggLyB0aGlzLmRhdGEubWF4TGVuKS50b0ZpeGVkKDIpO1xuICAgIGNvbnN0IGJ1ZiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGFyYWN0ZXIgb2YgdGV4dCkge1xuICAgICAgYnVmLnB1c2goYCgkeygwLCBfdXRpbC5lc2NhcGVTdHJpbmcpKGNoYXJhY3Rlcil9KSBUamApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkQ29tYiA9IGJ1Zi5qb2luKGAgJHtjb21iV2lkdGh9IDAgVGQgYCk7XG4gICAgcmV0dXJuIFwiL1R4IEJNQyBxIEJUIFwiICsgZGVmYXVsdEFwcGVhcmFuY2UgKyBgIDEgMCAwIDEgJHtoUGFkZGluZ30gJHt2UGFkZGluZ30gVG0gJHtyZW5kZXJlZENvbWJ9YCArIFwiIEVUIFEgRU1DXCI7XG4gIH1cblxuICBfZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShkZWZhdWx0QXBwZWFyYW5jZSwgdGV4dCwgZm9udCwgZm9udFNpemUsIHdpZHRoLCBoZWlnaHQsIGFsaWdubWVudCwgaFBhZGRpbmcsIHZQYWRkaW5nKSB7XG4gICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pO1xuICAgIGNvbnN0IGJ1ZiA9IFtdO1xuICAgIGNvbnN0IHRvdGFsV2lkdGggPSB3aWR0aCAtIDIgKiBoUGFkZGluZztcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgY2h1bmtzID0gdGhpcy5fc3BsaXRMaW5lKGxpbmUsIGZvbnQsIGZvbnRTaXplLCB0b3RhbFdpZHRoKTtcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IGJ1Zi5sZW5ndGggPT09IDAgPyBoUGFkZGluZyA6IDA7XG4gICAgICAgIGJ1Zi5wdXNoKHRoaXMuX3JlbmRlclRleHQoY2h1bmssIGZvbnQsIGZvbnRTaXplLCB3aWR0aCwgYWxpZ25tZW50LCBwYWRkaW5nLCAtZm9udFNpemUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZFRleHQgPSBidWYuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAwICR7aGVpZ2h0fSBUbSAke3JlbmRlcmVkVGV4dH1gICsgXCIgRVQgUSBFTUNcIjtcbiAgfVxuXG4gIF9zcGxpdExpbmUobGluZSwgZm9udCwgZm9udFNpemUsIHdpZHRoKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoIDw9IDEpIHtcbiAgICAgIHJldHVybiBbbGluZV07XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGUgPSBmb250U2l6ZSAvIDEwMDA7XG4gICAgY29uc3Qgd2hpdGVzcGFjZSA9IGZvbnQuY2hhcnNUb0dseXBocyhcIiBcIiwgdHJ1ZSlbMF0ud2lkdGggKiBzY2FsZTtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgbGFzdFNwYWNlUG9zID0gLTEsXG4gICAgICAgIHN0YXJ0Q2h1bmsgPSAwLFxuICAgICAgICBjdXJyZW50V2lkdGggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGluZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdChpKTtcblxuICAgICAgaWYgKGNoYXJhY3RlciA9PT0gXCIgXCIpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCArIHdoaXRlc3BhY2UgPiB3aWR0aCkge1xuICAgICAgICAgIGNodW5rcy5wdXNoKGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q2h1bmssIGkpKTtcbiAgICAgICAgICBzdGFydENodW5rID0gaTtcbiAgICAgICAgICBjdXJyZW50V2lkdGggPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IGk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoYXJXaWR0aCA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFyYWN0ZXIsIGZhbHNlKVswXS53aWR0aCAqIHNjYWxlO1xuXG4gICAgICAgIGlmIChjdXJyZW50V2lkdGggKyBjaGFyV2lkdGggPiB3aWR0aCkge1xuICAgICAgICAgIGlmIChsYXN0U3BhY2VQb3MgIT09IC0xKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBsYXN0U3BhY2VQb3MgKyAxKSk7XG4gICAgICAgICAgICBzdGFydENodW5rID0gaSA9IGxhc3RTcGFjZVBvcyArIDE7XG4gICAgICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMTtcbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q2h1bmssIGkpKTtcbiAgICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBpO1xuICAgICAgICAgICAgY3VycmVudFdpZHRoID0gY2hhcldpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gY2hhcldpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0Q2h1bmsgPCBsaW5lLmxlbmd0aCkge1xuICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGluZS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2h1bmtzO1xuICB9XG5cbn1cblxuY2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBudWxsO1xuICAgIHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSA9IG51bGw7XG4gICAgdGhpcy5kYXRhLmNoZWNrQm94ID0gIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5yYWRpb0J1dHRvbiA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5wdXNoQnV0dG9uID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTtcblxuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NDaGVja0JveChwYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24ocGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5wdXNoQnV0dG9uKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5wdXNoQnV0dG9uKSB7XG4gICAgICByZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgZmFsc2UsIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYW5ub3RhdGlvblN0b3JhZ2VbdGhpcy5kYXRhLmlkXSB8fCBmYWxzZTtcbiAgICAgIGxldCBhcHBlYXJhbmNlO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYXBwZWFyYW5jZSA9IHRoaXMuY2hlY2tlZEFwcGVhcmFuY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHBlYXJhbmNlID0gdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXBwZWFyYW5jZSkge1xuICAgICAgICBjb25zdCBzYXZlZEFwcGVhcmFuY2UgPSB0aGlzLmFwcGVhcmFuY2U7XG4gICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IGFwcGVhcmFuY2U7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IHNhdmVkQXBwZWFyYW5jZTtcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yTGlzdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5jaGVja0JveCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NhdmVDaGVja2JveChldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2F2ZVJhZGlvQnV0dG9uKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5zYXZlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpO1xuICB9XG5cbiAgYXN5bmMgX3NhdmVDaGVja2JveChldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgJiYgdGhpcy5kYXRhLmZpZWxkVmFsdWUgIT09IFwiT2ZmXCI7XG4gICAgY29uc3QgdmFsdWUgPSBhbm5vdGF0aW9uU3RvcmFnZVt0aGlzLmRhdGEuaWRdO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpY3QgPSBldmFsdWF0b3IueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldCh2YWx1ZSA/IHRoaXMuZGF0YS5leHBvcnRWYWx1ZSA6IFwiT2ZmXCIpO1xuXG4gICAgZGljdC5zZXQoXCJWXCIsIG5hbWUpO1xuICAgIGRpY3Quc2V0KFwiQVNcIiwgbmFtZSk7XG4gICAgZGljdC5zZXQoXCJNXCIsIGBEOiR7KDAsIF91dGlsLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7XG4gICAgY29uc3QgZW5jcnlwdCA9IGV2YWx1YXRvci54cmVmLmVuY3J5cHQ7XG4gICAgbGV0IG9yaWdpbmFsVHJhbnNmb3JtID0gbnVsbDtcblxuICAgIGlmIChlbmNyeXB0KSB7XG4gICAgICBvcmlnaW5hbFRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucmVmLm51bSwgdGhpcy5yZWYuZ2VuKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBbYCR7dGhpcy5yZWYubnVtfSAke3RoaXMucmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShkaWN0LCBidWZmZXIsIG9yaWdpbmFsVHJhbnNmb3JtKTtcbiAgICBidWZmZXIucHVzaChcIlxcbmVuZG9ialxcblwiKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBkYXRhOiBidWZmZXIuam9pbihcIlwiKVxuICAgIH1dO1xuICB9XG5cbiAgYXN5bmMgX3NhdmVSYWRpb0J1dHRvbihldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5idXR0b25WYWx1ZTtcbiAgICBjb25zdCB2YWx1ZSA9IGFubm90YXRpb25TdG9yYWdlW3RoaXMuZGF0YS5pZF07XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGljdCA9IGV2YWx1YXRvci54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KHZhbHVlID8gdGhpcy5kYXRhLmJ1dHRvblZhbHVlIDogXCJPZmZcIik7XG5cbiAgICBsZXQgcGFyZW50QnVmZmVyID0gbnVsbDtcbiAgICBjb25zdCBlbmNyeXB0ID0gZXZhbHVhdG9yLnhyZWYuZW5jcnlwdDtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGV2YWx1YXRvci54cmVmLmZldGNoKHRoaXMucGFyZW50KTtcbiAgICAgICAgbGV0IHBhcmVudFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGVuY3J5cHQpIHtcbiAgICAgICAgICBwYXJlbnRUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnBhcmVudC5udW0sIHRoaXMucGFyZW50Lmdlbik7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQuc2V0KFwiVlwiLCBuYW1lKTtcbiAgICAgICAgcGFyZW50QnVmZmVyID0gW2Ake3RoaXMucGFyZW50Lm51bX0gJHt0aGlzLnBhcmVudC5nZW59IG9ialxcbmBdO1xuICAgICAgICAoMCwgX3dyaXRlci53cml0ZURpY3QpKHBhcmVudCwgcGFyZW50QnVmZmVyLCBwYXJlbnRUcmFuc2Zvcm0pO1xuICAgICAgICBwYXJlbnRCdWZmZXIucHVzaChcIlxcbmVuZG9ialxcblwiKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgIHRoaXMucGFyZW50LnNldChcIlZcIiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGljdC5zZXQoXCJBU1wiLCBuYW1lKTtcbiAgICBkaWN0LnNldChcIk1cIiwgYEQ6JHsoMCwgX3V0aWwuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtcbiAgICBsZXQgb3JpZ2luYWxUcmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgaWYgKGVuY3J5cHQpIHtcbiAgICAgIG9yaWdpbmFsVHJhbnNmb3JtID0gZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLCB0aGlzLnJlZi5nZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IFtgJHt0aGlzLnJlZi5udW19ICR7dGhpcy5yZWYuZ2VufSBvYmpcXG5gXTtcbiAgICAoMCwgX3dyaXRlci53cml0ZURpY3QpKGRpY3QsIGJ1ZmZlciwgb3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlci5wdXNoKFwiXFxuZW5kb2JqXFxuXCIpO1xuICAgIGNvbnN0IG5ld1JlZnMgPSBbe1xuICAgICAgcmVmOiB0aGlzLnJlZixcbiAgICAgIGRhdGE6IGJ1ZmZlci5qb2luKFwiXCIpXG4gICAgfV07XG5cbiAgICBpZiAocGFyZW50QnVmZmVyICE9PSBudWxsKSB7XG4gICAgICBuZXdSZWZzLnB1c2goe1xuICAgICAgICByZWY6IHRoaXMucGFyZW50LFxuICAgICAgICBkYXRhOiBwYXJlbnRCdWZmZXIuam9pbihcIlwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1JlZnM7XG4gIH1cblxuICBfcHJvY2Vzc0NoZWNrQm94KHBhcmFtcykge1xuICAgIGNvbnN0IGN1c3RvbUFwcGVhcmFuY2UgPSBwYXJhbXMuZGljdC5nZXQoXCJBUFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY3VzdG9tQXBwZWFyYW5jZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxBcHBlYXJhbmNlID0gY3VzdG9tQXBwZWFyYW5jZS5nZXQoXCJOXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub3JtYWxBcHBlYXJhbmNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydFZhbHVlcyA9IG5vcm1hbEFwcGVhcmFuY2UuZ2V0S2V5cygpO1xuXG4gICAgaWYgKCFleHBvcnRWYWx1ZXMuaW5jbHVkZXMoXCJPZmZcIikpIHtcbiAgICAgIGV4cG9ydFZhbHVlcy5wdXNoKFwiT2ZmXCIpO1xuICAgIH1cblxuICAgIGlmIChleHBvcnRWYWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmV4cG9ydFZhbHVlID0gZXhwb3J0VmFsdWVzWzBdID09PSBcIk9mZlwiID8gZXhwb3J0VmFsdWVzWzFdIDogZXhwb3J0VmFsdWVzWzBdO1xuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCh0aGlzLmRhdGEuZXhwb3J0VmFsdWUpO1xuICAgIHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2UuZ2V0KFwiT2ZmXCIpIHx8IG51bGw7XG4gIH1cblxuICBfcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcykge1xuICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlID0gbnVsbDtcbiAgICBjb25zdCBmaWVsZFBhcmVudCA9IHBhcmFtcy5kaWN0LmdldChcIlBhcmVudFwiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShmaWVsZFBhcmVudCkgJiYgZmllbGRQYXJlbnQuaGFzKFwiVlwiKSkge1xuICAgICAgY29uc3QgZmllbGRQYXJlbnRWYWx1ZSA9IGZpZWxkUGFyZW50LmdldChcIlZcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWVsZFBhcmVudFZhbHVlKSkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmFtcy5kaWN0LmdldFJhdyhcIlBhcmVudFwiKTtcbiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRQYXJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhcHBlYXJhbmNlU3RhdGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNlU3RhdGVzLmdldChcIk5cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsQXBwZWFyYW5jZS5nZXRLZXlzKCkpIHtcbiAgICAgIGlmIChrZXkgIT09IFwiT2ZmXCIpIHtcbiAgICAgICAgdGhpcy5kYXRhLmJ1dHRvblZhbHVlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrZWRBcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKTtcbiAgICB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldChcIk9mZlwiKSB8fCBudWxsO1xuICB9XG5cbiAgX3Byb2Nlc3NQdXNoQnV0dG9uKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zLmRpY3QuaGFzKFwiQVwiKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfb2JqLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICBkZXN0RGljdDogcGFyYW1zLmRpY3QsXG4gICAgICByZXN1bHRPYmo6IHRoaXMuZGF0YSxcbiAgICAgIGRvY0Jhc2VVcmw6IHBhcmFtcy5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmxcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmRhdGEub3B0aW9ucyA9IFtdO1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdDogcGFyYW1zLmRpY3QsXG4gICAgICBrZXk6IFwiT3B0XCJcbiAgICB9KTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICBjb25zdCB4cmVmID0gcGFyYW1zLnhyZWY7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB4cmVmLmZldGNoSWZSZWYob3B0aW9uc1tpXSk7XG4gICAgICAgIGNvbnN0IGlzT3B0aW9uQXJyYXkgPSBBcnJheS5pc0FycmF5KG9wdGlvbik7XG4gICAgICAgIHRoaXMuZGF0YS5vcHRpb25zW2ldID0ge1xuICAgICAgICAgIGV4cG9ydFZhbHVlOiB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoaXNPcHRpb25BcnJheSA/IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25bMF0pIDogb3B0aW9uKSxcbiAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblsxXSkgOiBvcHRpb24pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodGhpcy5kYXRhLmZpZWxkVmFsdWUpKSB7XG4gICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IFt0aGlzLmRhdGEuZmllbGRWYWx1ZV07XG4gICAgfSBlbHNlIGlmICghdGhpcy5kYXRhLmZpZWxkVmFsdWUpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmNvbWJvID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyk7XG4gICAgdGhpcy5kYXRhLm11bHRpU2VsZWN0ID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCk7XG4gICAgdGhpcy5faGFzVGV4dCA9IHRydWU7XG4gIH1cblxufVxuXG5jbGFzcyBUZXh0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgREVGQVVMVF9JQ09OX1NJWkUgPSAyMjtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlRFWFQ7XG5cbiAgICBpZiAodGhpcy5kYXRhLmhhc0FwcGVhcmFuY2UpIHtcbiAgICAgIHRoaXMuZGF0YS5uYW1lID0gXCJOb0ljb25cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnJlY3RbMV0gPSB0aGlzLmRhdGEucmVjdFszXSAtIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgdGhpcy5kYXRhLnJlY3RbMl0gPSB0aGlzLmRhdGEucmVjdFswXSArIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgdGhpcy5kYXRhLm5hbWUgPSBkaWN0LmhhcyhcIk5hbWVcIikgPyBkaWN0LmdldChcIk5hbWVcIikubmFtZSA6IFwiTm90ZVwiO1xuICAgIH1cblxuICAgIGlmIChkaWN0LmhhcyhcIlN0YXRlXCIpKSB7XG4gICAgICB0aGlzLmRhdGEuc3RhdGUgPSBkaWN0LmdldChcIlN0YXRlXCIpIHx8IG51bGw7XG4gICAgICB0aGlzLmRhdGEuc3RhdGVNb2RlbCA9IGRpY3QuZ2V0KFwiU3RhdGVNb2RlbFwiKSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEuc3RhdGUgPSBudWxsO1xuICAgICAgdGhpcy5kYXRhLnN0YXRlTW9kZWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIExpbmtBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuTElOSztcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gZ2V0UXVhZFBvaW50cyhwYXJhbXMuZGljdCwgdGhpcy5yZWN0YW5nbGUpO1xuXG4gICAgaWYgKHF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gcXVhZFBvaW50cztcbiAgICB9XG5cbiAgICBfb2JqLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICBkZXN0RGljdDogcGFyYW1zLmRpY3QsXG4gICAgICByZXN1bHRPYmo6IHRoaXMuZGF0YSxcbiAgICAgIGRvY0Jhc2VVcmw6IHBhcmFtcy5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmxcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFBvcHVwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9QVVA7XG4gICAgbGV0IHBhcmVudEl0ZW0gPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiUGFyZW50XCIpO1xuXG4gICAgaWYgKCFwYXJlbnRJdGVtKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50U3VidHlwZSA9IHBhcmVudEl0ZW0uZ2V0KFwiU3VidHlwZVwiKTtcbiAgICB0aGlzLmRhdGEucGFyZW50VHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHBhcmVudFN1YnR5cGUpID8gcGFyZW50U3VidHlwZS5uYW1lIDogbnVsbDtcbiAgICBjb25zdCByYXdQYXJlbnQgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0UmF3KFwiUGFyZW50XCIpO1xuICAgIHRoaXMuZGF0YS5wYXJlbnRJZCA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmF3UGFyZW50KSA/IHJhd1BhcmVudC50b1N0cmluZygpIDogbnVsbDtcbiAgICBjb25zdCBydCA9IHBhcmVudEl0ZW0uZ2V0KFwiUlRcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocnQsIF91dGlsLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApKSB7XG4gICAgICBwYXJlbnRJdGVtID0gcGFyZW50SXRlbS5nZXQoXCJJUlRcIik7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRJdGVtLmhhcyhcIk1cIikpIHtcbiAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKHBhcmVudEl0ZW0uZ2V0KFwiTVwiKSk7XG4gICAgICB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSA9IHRoaXMubW9kaWZpY2F0aW9uRGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudEl0ZW0uaGFzKFwiQ1wiKSkge1xuICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb2xvcihwYXJlbnRJdGVtLmdldEFycmF5KFwiQ1wiKSk7XG4gICAgICB0aGlzLmRhdGEuY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52aWV3YWJsZSkge1xuICAgICAgY29uc3QgcGFyZW50RmxhZ3MgPSBwYXJlbnRJdGVtLmdldChcIkZcIik7XG5cbiAgICAgIGlmICh0aGlzLl9pc1ZpZXdhYmxlKHBhcmVudEZsYWdzKSkge1xuICAgICAgICB0aGlzLnNldEZsYWdzKHBhcmVudEZsYWdzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRhdGEudGl0bGUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHBhcmVudEl0ZW0uZ2V0KFwiVFwiKSB8fCBcIlwiKTtcbiAgICB0aGlzLmRhdGEuY29udGVudHMgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHBhcmVudEl0ZW0uZ2V0KFwiQ29udGVudHNcIikgfHwgXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkZSRUVURVhUO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTkU7XG4gICAgdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcyA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJMXCIpKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNxdWFyZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNRVUFSRTtcbiAgfVxuXG59XG5cbmNsYXNzIENpcmNsZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkNJUkNMRTtcbiAgfVxuXG59XG5cbmNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU7XG4gICAgY29uc3QgcmF3VmVydGljZXMgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJWZXJ0aWNlc1wiKTtcbiAgICB0aGlzLmRhdGEudmVydGljZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHJhd1ZlcnRpY2VzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgIHRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHtcbiAgICAgICAgeDogcmF3VmVydGljZXNbaV0sXG4gICAgICAgIHk6IHJhd1ZlcnRpY2VzW2kgKyAxXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgUG9seWdvbkFubm90YXRpb24gZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUdPTjtcbiAgfVxuXG59XG5cbmNsYXNzIENhcmV0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0FSRVQ7XG4gIH1cblxufVxuXG5jbGFzcyBJbmtBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5JTks7XG4gICAgY29uc3QgeHJlZiA9IHBhcmFtZXRlcnMueHJlZjtcbiAgICBjb25zdCBvcmlnaW5hbElua0xpc3RzID0gcGFyYW1ldGVycy5kaWN0LmdldEFycmF5KFwiSW5rTGlzdFwiKTtcbiAgICB0aGlzLmRhdGEuaW5rTGlzdHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG9yaWdpbmFsSW5rTGlzdHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgdGhpcy5kYXRhLmlua0xpc3RzLnB1c2goW10pO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgamogPSBvcmlnaW5hbElua0xpc3RzW2ldLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgdGhpcy5kYXRhLmlua0xpc3RzW2ldLnB1c2goe1xuICAgICAgICAgIHg6IHhyZWYuZmV0Y2hJZlJlZihvcmlnaW5hbElua0xpc3RzW2ldW2pdKSxcbiAgICAgICAgICB5OiB4cmVmLmZldGNoSWZSZWYob3JpZ2luYWxJbmtMaXN0c1tpXVtqICsgMV0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gZ2V0UXVhZFBvaW50cyhwYXJhbWV0ZXJzLmRpY3QsIHRoaXMucmVjdGFuZ2xlKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICB0aGlzLmRhdGEucXVhZFBvaW50cyA9IHF1YWRQb2ludHM7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgdGhpcy5yZWN0YW5nbGUpO1xuXG4gICAgaWYgKHF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gcXVhZFBvaW50cztcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBTcXVpZ2dseUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNRVUlHR0xZO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgdGhpcy5yZWN0YW5nbGUpO1xuXG4gICAgaWYgKHF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5xdWFkUG9pbnRzID0gcXVhZFBvaW50cztcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ7XG4gICAgY29uc3QgcXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBxdWFkUG9pbnRzO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA7XG4gIH1cblxufVxuXG5jbGFzcyBGaWxlQXR0YWNobWVudEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgX29iai5GaWxlU3BlYyhwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiRlNcIiksIHBhcmFtZXRlcnMueHJlZik7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7XG4gICAgdGhpcy5kYXRhLmZpbGUgPSBmaWxlLnNlcmlhbGl6YWJsZTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgUXVldWVPcHRpbWl6ZXIgPSBmdW5jdGlvbiBRdWV1ZU9wdGltaXplckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGFkZFN0YXRlKHBhcmVudFN0YXRlLCBwYXR0ZXJuLCBjaGVja0ZuLCBpdGVyYXRlRm4sIHByb2Nlc3NGbikge1xuICAgIHZhciBzdGF0ZSA9IHBhcmVudFN0YXRlO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGF0dGVybi5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBwYXR0ZXJuW2ldO1xuICAgICAgc3RhdGUgPSBzdGF0ZVtpdGVtXSB8fCAoc3RhdGVbaXRlbV0gPSBbXSk7XG4gICAgfVxuXG4gICAgc3RhdGVbcGF0dGVybltwYXR0ZXJuLmxlbmd0aCAtIDFdXSA9IHtcbiAgICAgIGNoZWNrRm4sXG4gICAgICBpdGVyYXRlRm4sXG4gICAgICBwcm9jZXNzRm5cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpIHtcbiAgICB2YXIgaUZpcnN0UElNWE8gPSBpRmlyc3RTYXZlICsgMjtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3NBcnJheVtpRmlyc3RQSU1YTyArIDQgKiBpXTtcbiAgICAgIHZhciBpbWFnZU1hc2sgPSBhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXTtcblxuICAgICAgaWYgKGltYWdlTWFzayAmJiBpbWFnZU1hc2sud2lkdGggPT09IDEgJiYgaW1hZ2VNYXNrLmhlaWdodCA9PT0gMSAmJiAoIWltYWdlTWFzay5kYXRhLmxlbmd0aCB8fCBpbWFnZU1hc2suZGF0YS5sZW5ndGggPT09IDEgJiYgaW1hZ2VNYXNrLmRhdGFbMF0gPT09IDApKSB7XG4gICAgICAgIGZuQXJyYXlbaUZpcnN0UElNWE8gKyA0ICogaV0gPSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50IC0gaTtcbiAgfVxuXG4gIHZhciBJbml0aWFsU3RhdGUgPSBbXTtcbiAgYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbX3V0aWwuT1BTLnNhdmUsIF91dGlsLk9QUy50cmFuc2Zvcm0sIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCwgX3V0aWwuT1BTLnJlc3RvcmVdLCBudWxsLCBmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7XG4gICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy50cmFuc2Zvcm07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnJlc3RvcmU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gZm91bmRJbmxpbmVJbWFnZUdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLID0gMTA7XG4gICAgdmFyIE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDIwMDtcbiAgICB2YXIgTUFYX1dJRFRIID0gMTAwMDtcbiAgICB2YXIgSU1BR0VfUEFERElORyA9IDE7XG4gICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICAgIHZhciBjdXJyID0gY29udGV4dC5pQ3VycjtcbiAgICB2YXIgaUZpcnN0U2F2ZSA9IGN1cnIgLSAzO1xuICAgIHZhciBpRmlyc3RUcmFuc2Zvcm0gPSBjdXJyIC0gMjtcbiAgICB2YXIgaUZpcnN0UElJWE8gPSBjdXJyIC0gMTtcbiAgICB2YXIgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKTtcblxuICAgIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSykge1xuICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICB9XG5cbiAgICB2YXIgbWF4WCA9IDA7XG4gICAgdmFyIG1hcCA9IFtdLFxuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gMDtcbiAgICB2YXIgY3VycmVudFggPSBJTUFHRV9QQURESU5HLFxuICAgICAgICBjdXJyZW50WSA9IElNQUdFX1BBRERJTkc7XG4gICAgdmFyIHE7XG5cbiAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKykge1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm0gKyAocSA8PCAyKV07XG4gICAgICB2YXIgaW1nID0gYXJnc0FycmF5W2lGaXJzdFBJSVhPICsgKHEgPDwgMildWzBdO1xuXG4gICAgICBpZiAoY3VycmVudFggKyBpbWcud2lkdGggPiBNQVhfV0lEVEgpIHtcbiAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGN1cnJlbnRYKTtcbiAgICAgICAgY3VycmVudFkgKz0gbWF4TGluZUhlaWdodCArIDIgKiBJTUFHRV9QQURESU5HO1xuICAgICAgICBjdXJyZW50WCA9IDA7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgICAgfVxuXG4gICAgICBtYXAucHVzaCh7XG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgIHk6IGN1cnJlbnRZLFxuICAgICAgICB3OiBpbWcud2lkdGgsXG4gICAgICAgIGg6IGltZy5oZWlnaHRcbiAgICAgIH0pO1xuICAgICAgY3VycmVudFggKz0gaW1nLndpZHRoICsgMiAqIElNQUdFX1BBRERJTkc7XG4gICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgobWF4TGluZUhlaWdodCwgaW1nLmhlaWdodCk7XG4gICAgfVxuXG4gICAgdmFyIGltZ1dpZHRoID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpICsgSU1BR0VfUEFERElORztcbiAgICB2YXIgaW1nSGVpZ2h0ID0gY3VycmVudFkgKyBtYXhMaW5lSGVpZ2h0ICsgSU1BR0VfUEFERElORztcbiAgICB2YXIgaW1nRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShpbWdXaWR0aCAqIGltZ0hlaWdodCAqIDQpO1xuICAgIHZhciBpbWdSb3dTaXplID0gaW1nV2lkdGggPDwgMjtcblxuICAgIGZvciAocSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICB2YXIgZGF0YSA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXS5kYXRhO1xuICAgICAgdmFyIHJvd1NpemUgPSBtYXBbcV0udyA8PCAyO1xuICAgICAgdmFyIGRhdGFPZmZzZXQgPSAwO1xuICAgICAgdmFyIG9mZnNldCA9IG1hcFtxXS54ICsgbWFwW3FdLnkgKiBpbWdXaWR0aCA8PCAyO1xuICAgICAgaW1nRGF0YS5zZXQoZGF0YS5zdWJhcnJheSgwLCByb3dTaXplKSwgb2Zmc2V0IC0gaW1nUm93U2l6ZSk7XG5cbiAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IG1hcFtxXS5oOyBrIDwga2s7IGsrKykge1xuICAgICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyByb3dTaXplKSwgb2Zmc2V0KTtcbiAgICAgICAgZGF0YU9mZnNldCArPSByb3dTaXplO1xuICAgICAgICBvZmZzZXQgKz0gaW1nUm93U2l6ZTtcbiAgICAgIH1cblxuICAgICAgaW1nRGF0YS5zZXQoZGF0YS5zdWJhcnJheShkYXRhT2Zmc2V0IC0gcm93U2l6ZSwgZGF0YU9mZnNldCksIG9mZnNldCk7XG5cbiAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgICAgICBkYXRhW29mZnNldCAtIDRdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICBkYXRhW29mZnNldCAtIDNdID0gZGF0YVtvZmZzZXQgKyAxXTtcbiAgICAgICAgZGF0YVtvZmZzZXQgLSAyXSA9IGRhdGFbb2Zmc2V0ICsgMl07XG4gICAgICAgIGRhdGFbb2Zmc2V0IC0gMV0gPSBkYXRhW29mZnNldCArIDNdO1xuICAgICAgICBkYXRhW29mZnNldCArIHJvd1NpemVdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gNF07XG4gICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSArIDFdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gM107XG4gICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSArIDJdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gMl07XG4gICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSArIDNdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gMV07XG4gICAgICAgIG9mZnNldCAtPSBpbWdSb3dTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZuQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXApO1xuICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbe1xuICAgICAgd2lkdGg6IGltZ1dpZHRoLFxuICAgICAgaGVpZ2h0OiBpbWdIZWlnaHQsXG4gICAgICBraW5kOiBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCxcbiAgICAgIGRhdGE6IGltZ0RhdGFcbiAgICB9LCBtYXBdKTtcbiAgICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG4gIH0pO1xuICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuc2F2ZSwgX3V0aWwuT1BTLnRyYW5zZm9ybSwgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgX3V0aWwuT1BTLnJlc3RvcmVdLCBudWxsLCBmdW5jdGlvbiBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAoY29udGV4dCwgaSkge1xuICAgIHZhciBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5O1xuICAgIHZhciBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gICAgc3dpdGNoIChwb3MpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMudHJhbnNmb3JtO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMucmVzdG9yZTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbWFnZU1hc2tHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gZm91bmRJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gICAgdmFyIE1JTl9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDtcbiAgICB2YXIgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwMDtcbiAgICB2YXIgTUFYX1NBTUVfSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTAwMDtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICAgIHZhciBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgIHZhciBpRmlyc3RQSU1YTyA9IGN1cnIgLSAxO1xuICAgIHZhciBjb3VudCA9IE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpO1xuICAgIGNvdW50ID0gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpO1xuXG4gICAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9NQVNLU19CTE9DSykge1xuICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICB9XG5cbiAgICB2YXIgcTtcbiAgICB2YXIgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICB2YXIgaVRyYW5zZm9ybSwgdHJhbnNmb3JtQXJncztcbiAgICB2YXIgZmlyc3RQSU1YT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE9dWzBdO1xuICAgIGNvbnN0IGZpcnN0VHJhbnNmb3JtQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzBdLFxuICAgICAgICAgIGZpcnN0VHJhbnNmb3JtQXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdLFxuICAgICAgICAgIGZpcnN0VHJhbnNmb3JtQXJnMiA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdLFxuICAgICAgICAgIGZpcnN0VHJhbnNmb3JtQXJnMyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzNdO1xuXG4gICAgaWYgKGZpcnN0VHJhbnNmb3JtQXJnMSA9PT0gZmlyc3RUcmFuc2Zvcm1BcmcyKSB7XG4gICAgICBpc1NhbWVJbWFnZSA9IHRydWU7XG4gICAgICBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtICsgNDtcbiAgICAgIHZhciBpUElNWE8gPSBpRmlyc3RQSU1YTyArIDQ7XG5cbiAgICAgIGZvciAocSA9IDE7IHEgPCBjb3VudDsgcSsrLCBpVHJhbnNmb3JtICs9IDQsIGlQSU1YTyArPSA0KSB7XG4gICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG5cbiAgICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmcxIHx8IHRyYW5zZm9ybUFyZ3NbMl0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMiB8fCB0cmFuc2Zvcm1BcmdzWzNdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzMpIHtcbiAgICAgICAgICBpZiAocSA8IE1JTl9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spIHtcbiAgICAgICAgICAgIGlzU2FtZUltYWdlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvdW50ID0gcTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1NhbWVJbWFnZSkge1xuICAgICAgY291bnQgPSBNYXRoLm1pbihjb3VudCwgTUFYX1NBTUVfSU1BR0VTX0lOX01BU0tTX0JMT0NLKTtcbiAgICAgIHZhciBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogMik7XG4gICAgICBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtO1xuXG4gICAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTtcbiAgICAgICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdO1xuICAgICAgfVxuXG4gICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQpO1xuICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtmaXJzdFBJTVhPQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzEsIGZpcnN0VHJhbnNmb3JtQXJnMiwgZmlyc3RUcmFuc2Zvcm1BcmczLCBwb3NpdGlvbnNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSBNYXRoLm1pbihjb3VudCwgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyk7XG4gICAgICB2YXIgaW1hZ2VzID0gW107XG5cbiAgICAgIGZvciAocSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtICsgKHEgPDwgMildO1xuICAgICAgICB2YXIgbWFza1BhcmFtcyA9IGFyZ3NBcnJheVtpRmlyc3RQSU1YTyArIChxIDw8IDIpXVswXTtcbiAgICAgICAgaW1hZ2VzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgICB3aWR0aDogbWFza1BhcmFtcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IG1hc2tQYXJhbXMuaGVpZ2h0LFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO1xuICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtpbWFnZXNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG4gIH0pO1xuICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuc2F2ZSwgX3V0aWwuT1BTLnRyYW5zZm9ybSwgX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICAgIHZhciBpRmlyc3RUcmFuc2Zvcm0gPSBjb250ZXh0LmlDdXJyIC0gMjtcbiAgICByZXR1cm4gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0gPT09IDAgJiYgYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMl0gPT09IDA7XG4gIH0sIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy50cmFuc2Zvcm0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY29udGV4dC5pQ3VyciAtIDI7XG4gICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTtcbiAgICAgICAgdmFyIGZpcnN0VHJhbnNmb3JtQXJnMyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzNdO1xuXG4gICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IDAgfHwgYXJnc0FycmF5W2ldWzJdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVszXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpRmlyc3RQSVhPID0gY29udGV4dC5pQ3VyciAtIDE7XG4gICAgICAgIHZhciBmaXJzdFBJWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJWE9dWzBdO1xuXG4gICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0UElYT0FyZzApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnJlc3RvcmU7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0lNQUdFU19JTl9CTE9DSyA9IDM7XG4gICAgdmFyIE1BWF9JTUFHRVNfSU5fQkxPQ0sgPSAxMDAwO1xuICAgIHZhciBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gICAgdmFyIGlGaXJzdFBJWE8gPSBjdXJyIC0gMTtcbiAgICB2YXIgZmlyc3RQSVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSVhPXVswXTtcbiAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgdmFyIGZpcnN0VHJhbnNmb3JtQXJnMyA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzNdO1xuICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpLCBNQVhfSU1BR0VTX0lOX0JMT0NLKTtcblxuICAgIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fQkxPQ0spIHtcbiAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG4gICAgfVxuXG4gICAgdmFyIHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAyKTtcbiAgICB2YXIgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybTtcblxuICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICB2YXIgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcbiAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTtcbiAgICAgIHBvc2l0aW9uc1socSA8PCAxKSArIDFdID0gdHJhbnNmb3JtQXJnc1s1XTtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IFtmaXJzdFBJWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMywgcG9zaXRpb25zXTtcbiAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCk7XG4gICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIGFyZ3MpO1xuICAgIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbiAgfSk7XG4gIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5iZWdpblRleHQsIF91dGlsLk9QUy5zZXRGb250LCBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeCwgX3V0aWwuT1BTLnNob3dUZXh0LCBfdXRpbC5PUFMuZW5kVGV4dF0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVTaG93VGV4dEdyb3VwKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gNDtcbiAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDU7XG5cbiAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmJlZ2luVGV4dDtcblxuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNldEZvbnQ7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMuc2hvd1RleHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMV07XG5cbiAgICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RTZXRGb250QXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmVuZFRleHQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbiAgfSwgZnVuY3Rpb24gKGNvbnRleHQsIGkpIHtcbiAgICB2YXIgTUlOX0NIQVJTX0lOX0JMT0NLID0gMztcbiAgICB2YXIgTUFYX0NIQVJTX0lOX0JMT0NLID0gMTAwMDtcbiAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgdmFyIGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICAgIHZhciBpRmlyc3RCZWdpblRleHQgPSBjdXJyIC0gNDtcbiAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGN1cnIgLSAzO1xuICAgIHZhciBpRmlyc3RTZXRUZXh0TWF0cml4ID0gY3VyciAtIDI7XG4gICAgdmFyIGlGaXJzdFNob3dUZXh0ID0gY3VyciAtIDE7XG4gICAgdmFyIGlGaXJzdEVuZFRleHQgPSBjdXJyO1xuICAgIHZhciBmaXJzdFNldEZvbnRBcmcwID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzBdO1xuICAgIHZhciBmaXJzdFNldEZvbnRBcmcxID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzFdO1xuICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RCZWdpblRleHQpIC8gNSksIE1BWF9DSEFSU19JTl9CTE9DSyk7XG5cbiAgICBpZiAoY291bnQgPCBNSU5fQ0hBUlNfSU5fQkxPQ0spIHtcbiAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RCZWdpblRleHQpICUgNTtcbiAgICB9XG5cbiAgICB2YXIgaUZpcnN0ID0gaUZpcnN0QmVnaW5UZXh0O1xuXG4gICAgaWYgKGlGaXJzdEJlZ2luVGV4dCA+PSA0ICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF0gPT09IGZuQXJyYXlbaUZpcnN0U2V0Rm9udF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAzXSA9PT0gZm5BcnJheVtpRmlyc3RTZXRUZXh0TWF0cml4XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDJdID09PSBmbkFycmF5W2lGaXJzdFNob3dUZXh0XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDFdID09PSBmbkFycmF5W2lGaXJzdEVuZFRleHRdICYmIGFyZ3NBcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XVswXSA9PT0gZmlyc3RTZXRGb250QXJnMCAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMV0gPT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBpRmlyc3QgLT0gNTtcbiAgICB9XG5cbiAgICB2YXIgaUVuZFRleHQgPSBpRmlyc3QgKyA0O1xuXG4gICAgZm9yICh2YXIgcSA9IDE7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICBmbkFycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICBhcmdzQXJyYXkuc3BsaWNlKGlFbmRUZXh0LCAzKTtcbiAgICAgIGlFbmRUZXh0ICs9IDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlFbmRUZXh0ICsgMTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gUXVldWVPcHRpbWl6ZXIocXVldWUpIHtcbiAgICB0aGlzLnF1ZXVlID0gcXVldWU7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgaUN1cnI6IDAsXG4gICAgICBmbkFycmF5OiBxdWV1ZS5mbkFycmF5LFxuICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICB9O1xuICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gIH1cblxuICBRdWV1ZU9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgX29wdGltaXplKCkge1xuICAgICAgY29uc3QgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICAgIGxldCBpID0gdGhpcy5sYXN0UHJvY2Vzc2VkLFxuICAgICAgICAgIGlpID0gZm5BcnJheS5sZW5ndGg7XG4gICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgbGV0IG1hdGNoID0gdGhpcy5tYXRjaDtcblxuICAgICAgaWYgKCFzdGF0ZSAmJiAhbWF0Y2ggJiYgaSArIDEgPT09IGlpICYmICFJbml0aWFsU3RhdGVbZm5BcnJheVtpXV0pIHtcbiAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaWk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgICBpZiAoaXRlcmF0ZSkge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaSA9ICgwLCBtYXRjaC5wcm9jZXNzRm4pKGNvbnRleHQsIGkgKyAxKTtcbiAgICAgICAgICBpaSA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoID0gbnVsbDtcbiAgICAgICAgICBzdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoaSA+PSBpaSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSAoc3RhdGUgfHwgSW5pdGlhbFN0YXRlKVtmbkFycmF5W2ldXTtcblxuICAgICAgICBpZiAoIXN0YXRlIHx8IEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5pQ3VyciA9IGk7XG4gICAgICAgIGkrKztcblxuICAgICAgICBpZiAoc3RhdGUuY2hlY2tGbiAmJiAhKDAsIHN0YXRlLmNoZWNrRm4pKGNvbnRleHQpKSB7XG4gICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICB0aGlzLm1hdGNoID0gbWF0Y2g7XG4gICAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSBpO1xuICAgIH0sXG5cbiAgICBwdXNoKGZuLCBhcmdzKSB7XG4gICAgICB0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChmbik7XG4gICAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuXG4gICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgIH0sXG5cbiAgICBmbHVzaCgpIHtcbiAgICAgIHdoaWxlICh0aGlzLm1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9ICgwLCB0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzZXQoKSB7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gMDtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIFF1ZXVlT3B0aW1pemVyO1xufSgpO1xuXG52YXIgTnVsbE9wdGltaXplciA9IGZ1bmN0aW9uIE51bGxPcHRpbWl6ZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBOdWxsT3B0aW1pemVyKHF1ZXVlKSB7XG4gICAgdGhpcy5xdWV1ZSA9IHF1ZXVlO1xuICB9XG5cbiAgTnVsbE9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgcHVzaChmbiwgYXJncykge1xuICAgICAgdGhpcy5xdWV1ZS5mbkFycmF5LnB1c2goZm4pO1xuICAgICAgdGhpcy5xdWV1ZS5hcmdzQXJyYXkucHVzaChhcmdzKTtcbiAgICB9LFxuXG4gICAgZmx1c2goKSB7fSxcblxuICAgIHJlc2V0KCkge31cblxuICB9O1xuICByZXR1cm4gTnVsbE9wdGltaXplcjtcbn0oKTtcblxudmFyIE9wZXJhdG9yTGlzdCA9IGZ1bmN0aW9uIE9wZXJhdG9yTGlzdENsb3N1cmUoKSB7XG4gIHZhciBDSFVOS19TSVpFID0gMTAwMDtcbiAgdmFyIENIVU5LX1NJWkVfQUJPVVQgPSBDSFVOS19TSVpFIC0gNTtcblxuICBmdW5jdGlvbiBPcGVyYXRvckxpc3QoaW50ZW50LCBzdHJlYW1TaW5rKSB7XG4gICAgdGhpcy5fc3RyZWFtU2luayA9IHN0cmVhbVNpbms7XG4gICAgdGhpcy5mbkFycmF5ID0gW107XG4gICAgdGhpcy5hcmdzQXJyYXkgPSBbXTtcblxuICAgIGlmIChzdHJlYW1TaW5rICYmIGludGVudCAhPT0gXCJvcGxpc3RcIikge1xuICAgICAgdGhpcy5vcHRpbWl6ZXIgPSBuZXcgUXVldWVPcHRpbWl6ZXIodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW1pemVyID0gbmV3IE51bGxPcHRpbWl6ZXIodGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBuZXcgU2V0KCk7XG4gICAgdGhpcy5fdG90YWxMZW5ndGggPSAwO1xuICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICB0aGlzLl9yZXNvbHZlZCA9IHN0cmVhbVNpbmsgPyBudWxsIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBPcGVyYXRvckxpc3QucHJvdG90eXBlID0ge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RoO1xuICAgIH0sXG5cbiAgICBnZXQgcmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZWQgfHwgdGhpcy5fc3RyZWFtU2luay5yZWFkeTtcbiAgICB9LFxuXG4gICAgZ2V0IHRvdGFsTGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoICsgdGhpcy5sZW5ndGg7XG4gICAgfSxcblxuICAgIGFkZE9wKGZuLCBhcmdzKSB7XG4gICAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICAgIHRoaXMud2VpZ2h0Kys7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TaW5rKSB7XG4gICAgICAgIGlmICh0aGlzLndlaWdodCA+PSBDSFVOS19TSVpFKSB7XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMud2VpZ2h0ID49IENIVU5LX1NJWkVfQUJPVVQgJiYgKGZuID09PSBfdXRpbC5PUFMucmVzdG9yZSB8fCBmbiA9PT0gX3V0aWwuT1BTLmVuZFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICAgICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLmhhcyhkZXBlbmRlbmN5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmN5KTtcbiAgICAgIHRoaXMuYWRkT3AoX3V0aWwuT1BTLmRlcGVuZGVuY3ksIFtkZXBlbmRlbmN5XSk7XG4gICAgfSxcblxuICAgIGFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgdGhpcy5hZGREZXBlbmRlbmN5KGRlcGVuZGVuY3kpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRPcExpc3Qob3BMaXN0KSB7XG4gICAgICBpZiAoIShvcExpc3QgaW5zdGFuY2VvZiBPcGVyYXRvckxpc3QpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnYWRkT3BMaXN0IC0gaWdub3JpbmcgaW52YWxpZCBcIm9wTGlzdFwiIHBhcmFtZXRlci4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygb3BMaXN0LmRlcGVuZGVuY2llcykge1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wTGlzdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHRoaXMuYWRkT3Aob3BMaXN0LmZuQXJyYXlbaV0sIG9wTGlzdC5hcmdzQXJyYXlbaV0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJUigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZuQXJyYXk6IHRoaXMuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5OiB0aGlzLmFyZ3NBcnJheSxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgZ2V0IF90cmFuc2ZlcnMoKSB7XG4gICAgICBjb25zdCB0cmFuc2ZlcnMgPSBbXTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5LFxuICAgICAgICBsZW5ndGhcbiAgICAgIH0gPSB0aGlzO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN3aXRjaCAoZm5BcnJheVtpXSkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OlxuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc0FycmF5W2ldWzBdO1xuICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICBpZiAoIWFyZy5jYWNoZWQpIHtcbiAgICAgICAgICAgICAgdHJhbnNmZXJzLnB1c2goYXJnLmRhdGEuYnVmZmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zZmVycztcbiAgICB9LFxuXG4gICAgZmx1c2gobGFzdENodW5rID0gZmFsc2UpIHtcbiAgICAgIHRoaXMub3B0aW1pemVyLmZsdXNoKCk7XG4gICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgIHRoaXMuX3RvdGFsTGVuZ3RoICs9IGxlbmd0aDtcblxuICAgICAgdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtcbiAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgICBsYXN0Q2h1bmssXG4gICAgICAgIGxlbmd0aFxuICAgICAgfSwgMSwgdGhpcy5fdHJhbnNmZXJzKTtcblxuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuZm5BcnJheS5sZW5ndGggPSAwO1xuICAgICAgdGhpcy5hcmdzQXJyYXkubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICAgIHRoaXMub3B0aW1pemVyLnJlc2V0KCk7XG4gICAgfVxuXG4gIH07XG4gIHJldHVybiBPcGVyYXRvckxpc3Q7XG59KCk7XG5cbmV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gT3BlcmF0b3JMaXN0O1xuXG4vKioqLyB9KSxcbi8qIDI3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLndyaXRlRGljdCA9IHdyaXRlRGljdDtcbmV4cG9ydHMuaW5jcmVtZW50YWxVcGRhdGUgPSBpbmNyZW1lbnRhbFVwZGF0ZTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jcnlwdG8gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIyKTtcblxuZnVuY3Rpb24gd3JpdGVEaWN0KGRpY3QsIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIGJ1ZmZlci5wdXNoKFwiPDxcIik7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgZGljdC5nZXRLZXlzKCkpIHtcbiAgICBidWZmZXIucHVzaChgIC8ke2tleX0gYCk7XG4gICAgd3JpdGVWYWx1ZShkaWN0LmdldFJhdyhrZXkpLCBidWZmZXIsIHRyYW5zZm9ybSk7XG4gIH1cblxuICBidWZmZXIucHVzaChcIj4+XCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbShzdHJlYW0sIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIHdyaXRlRGljdChzdHJlYW0uZGljdCwgYnVmZmVyLCB0cmFuc2Zvcm0pO1xuICBidWZmZXIucHVzaChcIiBzdHJlYW1cXG5cIik7XG4gIGxldCBzdHJpbmcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoc3RyZWFtLmdldEJ5dGVzKCkpO1xuXG4gIGlmICh0cmFuc2Zvcm0gIT09IG51bGwpIHtcbiAgICBzdHJpbmcgPSB0cmFuc2Zvcm0uZW5jcnlwdFN0cmluZyhzdHJpbmcpO1xuICB9XG5cbiAgYnVmZmVyLnB1c2goc3RyaW5nKTtcbiAgYnVmZmVyLnB1c2goXCJcXG5lbmRzdHJlYW1cXG5cIik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQXJyYXkoYXJyYXksIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIGJ1ZmZlci5wdXNoKFwiW1wiKTtcbiAgbGV0IGZpcnN0ID0gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IHZhbCBvZiBhcnJheSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKFwiIFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbCwgYnVmZmVyLCB0cmFuc2Zvcm0pO1xuICB9XG5cbiAgYnVmZmVyLnB1c2goXCJdXCIpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJUb1N0cmluZyh2YWx1ZSkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHJvdW5kZWRWYWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxMDApO1xuXG4gIGlmIChyb3VuZGVkVmFsdWUgJSAxMDAgPT09IDApIHtcbiAgICByZXR1cm4gKHJvdW5kZWRWYWx1ZSAvIDEwMCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGlmIChyb3VuZGVkVmFsdWUgJSAxMCA9PT0gMCkge1xuICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKDEpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoMik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFsdWUodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2YWx1ZSkpIHtcbiAgICBidWZmZXIucHVzaChgLyR7dmFsdWUubmFtZX1gKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSkge1xuICAgIGJ1ZmZlci5wdXNoKGAke3ZhbHVlLm51bX0gJHt2YWx1ZS5nZW59IFJgKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHdyaXRlQXJyYXkodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHRyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBidWZmZXIucHVzaChgKCR7KDAsIF91dGlsLmVzY2FwZVN0cmluZykodmFsdWUpfSlgKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBidWZmZXIucHVzaChudW1iZXJUb1N0cmluZyh2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHZhbHVlKSkge1xuICAgIHdyaXRlRGljdCh2YWx1ZSwgYnVmZmVyLCB0cmFuc2Zvcm0pO1xuICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkodmFsdWUpKSB7XG4gICAgd3JpdGVTdHJlYW0odmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUludChudW1iZXIsIHNpemUsIG9mZnNldCwgYnVmZmVyKSB7XG4gIGZvciAobGV0IGkgPSBzaXplICsgb2Zmc2V0IC0gMTsgaSA+IG9mZnNldCAtIDE7IGktLSkge1xuICAgIGJ1ZmZlcltpXSA9IG51bWJlciAmIDB4ZmY7XG4gICAgbnVtYmVyID4+PSA4O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIHNpemU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyaW5nKHN0cmluZywgb2Zmc2V0LCBidWZmZXIpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0cmluZy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlTUQ1KGZpbGVzaXplLCB4cmVmSW5mbykge1xuICBjb25zdCB0aW1lID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IGZpbGVuYW1lID0geHJlZkluZm8uZmlsZW5hbWUgfHwgXCJcIjtcbiAgY29uc3QgbWQ1QnVmZmVyID0gW3RpbWUudG9TdHJpbmcoKSwgZmlsZW5hbWUsIGZpbGVzaXplLnRvU3RyaW5nKCldO1xuICBsZXQgbWQ1QnVmZmVyTGVuID0gbWQ1QnVmZmVyLnJlZHVjZSgoYSwgc3RyKSA9PiBhICsgc3RyLmxlbmd0aCwgMCk7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKHhyZWZJbmZvLmluZm8pKSB7XG4gICAgbWQ1QnVmZmVyLnB1c2godmFsdWUpO1xuICAgIG1kNUJ1ZmZlckxlbiArPSB2YWx1ZS5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KG1kNUJ1ZmZlckxlbik7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIGZvciAoY29uc3Qgc3RyIG9mIG1kNUJ1ZmZlcikge1xuICAgIHdyaXRlU3RyaW5nKHN0ciwgb2Zmc2V0LCBhcnJheSk7XG4gICAgb2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKCgwLCBfY3J5cHRvLmNhbGN1bGF0ZU1ENSkoYXJyYXkpKTtcbn1cblxuZnVuY3Rpb24gaW5jcmVtZW50YWxVcGRhdGUob3JpZ2luYWxEYXRhLCB4cmVmSW5mbywgbmV3UmVmcykge1xuICBjb25zdCBuZXdYcmVmID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIGNvbnN0IHJlZkZvclhyZWZUYWJsZSA9IHhyZWZJbmZvLm5ld1JlZjtcbiAgbGV0IGJ1ZmZlciwgYmFzZU9mZnNldDtcbiAgY29uc3QgbGFzdEJ5dGUgPSBvcmlnaW5hbERhdGFbb3JpZ2luYWxEYXRhLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChsYXN0Qnl0ZSA9PT0gMHgwYSB8fCBsYXN0Qnl0ZSA9PT0gMHgwZCkge1xuICAgIGJ1ZmZlciA9IFtdO1xuICAgIGJhc2VPZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IFtcIlxcblwiXTtcbiAgICBiYXNlT2Zmc2V0ID0gb3JpZ2luYWxEYXRhLmxlbmd0aCArIDE7XG4gIH1cblxuICBuZXdYcmVmLnNldChcIlNpemVcIiwgcmVmRm9yWHJlZlRhYmxlLm51bSArIDEpO1xuICBuZXdYcmVmLnNldChcIlByZXZcIiwgeHJlZkluZm8uc3RhcnRYUmVmKTtcbiAgbmV3WHJlZi5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWFJlZlwiKSk7XG5cbiAgaWYgKHhyZWZJbmZvLnJvb3RSZWYgIT09IG51bGwpIHtcbiAgICBuZXdYcmVmLnNldChcIlJvb3RcIiwgeHJlZkluZm8ucm9vdFJlZik7XG4gIH1cblxuICBpZiAoeHJlZkluZm8uaW5mb1JlZiAhPT0gbnVsbCkge1xuICAgIG5ld1hyZWYuc2V0KFwiSW5mb1wiLCB4cmVmSW5mby5pbmZvUmVmKTtcbiAgfVxuXG4gIGlmICh4cmVmSW5mby5lbmNyeXB0ICE9PSBudWxsKSB7XG4gICAgbmV3WHJlZi5zZXQoXCJFbmNyeXB0XCIsIHhyZWZJbmZvLmVuY3J5cHQpO1xuICB9XG5cbiAgbmV3UmVmcy5wdXNoKHtcbiAgICByZWY6IHJlZkZvclhyZWZUYWJsZSxcbiAgICBkYXRhOiBcIlwiXG4gIH0pO1xuICBuZXdSZWZzID0gbmV3UmVmcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEucmVmLm51bSAtIGIucmVmLm51bTtcbiAgfSk7XG4gIGNvbnN0IHhyZWZUYWJsZURhdGEgPSBbWzAsIDEsIDB4ZmZmZl1dO1xuICBjb25zdCBpbmRleGVzID0gWzAsIDFdO1xuICBsZXQgbWF4T2Zmc2V0ID0gMDtcblxuICBmb3IgKGNvbnN0IHtcbiAgICByZWYsXG4gICAgZGF0YVxuICB9IG9mIG5ld1JlZnMpIHtcbiAgICBtYXhPZmZzZXQgPSBNYXRoLm1heChtYXhPZmZzZXQsIGJhc2VPZmZzZXQpO1xuICAgIHhyZWZUYWJsZURhdGEucHVzaChbMSwgYmFzZU9mZnNldCwgTWF0aC5taW4ocmVmLmdlbiwgMHhmZmZmKV0pO1xuICAgIGJhc2VPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgaW5kZXhlcy5wdXNoKHJlZi5udW0pO1xuICAgIGluZGV4ZXMucHVzaCgxKTtcbiAgICBidWZmZXIucHVzaChkYXRhKTtcbiAgfVxuXG4gIG5ld1hyZWYuc2V0KFwiSW5kZXhcIiwgaW5kZXhlcyk7XG5cbiAgaWYgKHhyZWZJbmZvLmZpbGVJZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3QgbWQ1ID0gY29tcHV0ZU1ENShiYXNlT2Zmc2V0LCB4cmVmSW5mbyk7XG4gICAgbmV3WHJlZi5zZXQoXCJJRFwiLCBbeHJlZkluZm8uZmlsZUlkc1swXSwgbWQ1XSk7XG4gIH1cblxuICBjb25zdCBvZmZzZXRTaXplID0gTWF0aC5jZWlsKE1hdGgubG9nMihtYXhPZmZzZXQpIC8gOCk7XG4gIGNvbnN0IHNpemVzID0gWzEsIG9mZnNldFNpemUsIDJdO1xuICBjb25zdCBzdHJ1Y3RTaXplID0gc2l6ZXNbMF0gKyBzaXplc1sxXSArIHNpemVzWzJdO1xuICBjb25zdCB0YWJsZUxlbmd0aCA9IHN0cnVjdFNpemUgKiB4cmVmVGFibGVEYXRhLmxlbmd0aDtcbiAgbmV3WHJlZi5zZXQoXCJXXCIsIHNpemVzKTtcbiAgbmV3WHJlZi5zZXQoXCJMZW5ndGhcIiwgdGFibGVMZW5ndGgpO1xuICBidWZmZXIucHVzaChgJHtyZWZGb3JYcmVmVGFibGUubnVtfSAke3JlZkZvclhyZWZUYWJsZS5nZW59IG9ialxcbmApO1xuICB3cml0ZURpY3QobmV3WHJlZiwgYnVmZmVyLCBudWxsKTtcbiAgYnVmZmVyLnB1c2goXCIgc3RyZWFtXFxuXCIpO1xuICBjb25zdCBidWZmZXJMZW4gPSBidWZmZXIucmVkdWNlKChhLCBzdHIpID0+IGEgKyBzdHIubGVuZ3RoLCAwKTtcbiAgY29uc3QgZm9vdGVyID0gYFxcbmVuZHN0cmVhbVxcbmVuZG9ialxcbnN0YXJ0eHJlZlxcbiR7YmFzZU9mZnNldH1cXG4lJUVPRlxcbmA7XG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkob3JpZ2luYWxEYXRhLmxlbmd0aCArIGJ1ZmZlckxlbiArIHRhYmxlTGVuZ3RoICsgZm9vdGVyLmxlbmd0aCk7XG4gIGFycmF5LnNldChvcmlnaW5hbERhdGEpO1xuICBsZXQgb2Zmc2V0ID0gb3JpZ2luYWxEYXRhLmxlbmd0aDtcblxuICBmb3IgKGNvbnN0IHN0ciBvZiBidWZmZXIpIHtcbiAgICB3cml0ZVN0cmluZyhzdHIsIG9mZnNldCwgYXJyYXkpO1xuICAgIG9mZnNldCArPSBzdHIubGVuZ3RoO1xuICB9XG5cbiAgZm9yIChjb25zdCBbdHlwZSwgb2JqT2Zmc2V0LCBnZW5dIG9mIHhyZWZUYWJsZURhdGEpIHtcbiAgICBvZmZzZXQgPSB3cml0ZUludCh0eXBlLCBzaXplc1swXSwgb2Zmc2V0LCBhcnJheSk7XG4gICAgb2Zmc2V0ID0gd3JpdGVJbnQob2JqT2Zmc2V0LCBzaXplc1sxXSwgb2Zmc2V0LCBhcnJheSk7XG4gICAgb2Zmc2V0ID0gd3JpdGVJbnQoZ2VuLCBzaXplc1syXSwgb2Zmc2V0LCBhcnJheSk7XG4gIH1cblxuICB3cml0ZVN0cmluZyhmb290ZXIsIG9mZnNldCwgYXJyYXkpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8qKiovIH0pLFxuLyogMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUGFydGlhbEV2YWx1YXRvciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jbWFwID0gX193X3BkZmpzX3JlcXVpcmVfXygyOSk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfZm9udHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMwKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF91bmljb2RlID0gX193X3BkZmpzX3JlcXVpcmVfXygzNik7XG5cbnZhciBfc3RhbmRhcmRfZm9udHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF9wYXR0ZXJuID0gX193X3BkZmpzX3JlcXVpcmVfXygzOSk7XG5cbnZhciBfZnVuY3Rpb24gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQwKTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9pbWFnZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2JpZGkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQyKTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfZ2x5cGhsaXN0ID0gX193X3BkZmpzX3JlcXVpcmVfXygzNCk7XG5cbnZhciBfbWV0cmljcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNDMpO1xuXG52YXIgX211cm11cmhhc2ggPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ0KTtcblxudmFyIF9vcGVyYXRvcl9saXN0ID0gX193X3BkZmpzX3JlcXVpcmVfXygyNik7XG5cbnZhciBfaW1hZ2UgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ1KTtcblxuY29uc3QgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIG1heEltYWdlU2l6ZTogLTEsXG4gIGRpc2FibGVGb250RmFjZTogZmFsc2UsXG4gIGlnbm9yZUVycm9yczogZmFsc2UsXG4gIGlzRXZhbFN1cHBvcnRlZDogdHJ1ZSxcbiAgZm9udEV4dHJhUHJvcGVydGllczogZmFsc2Vcbn0pO1xuY29uc3QgUGF0dGVyblR5cGUgPSB7XG4gIFRJTElORzogMSxcbiAgU0hBRElORzogMlxufTtcbmNvbnN0IGRlZmVycmVkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZSh2YWx1ZSwgcGFyc2luZ0FycmF5ID0gZmFsc2UpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbWF5YmVCTSA9IG5vcm1hbGl6ZUJsZW5kTW9kZSh2YWx1ZVtpXSwgdHJ1ZSk7XG5cbiAgICAgIGlmIChtYXliZUJNKSB7XG4gICAgICAgIHJldHVybiBtYXliZUJNO1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZSBBcnJheTogJHt2YWx1ZX1gKTtcbiAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuICB9XG5cbiAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2YWx1ZSkpIHtcbiAgICBpZiAocGFyc2luZ0FycmF5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuICB9XG5cbiAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgY2FzZSBcIk5vcm1hbFwiOlxuICAgIGNhc2UgXCJDb21wYXRpYmxlXCI6XG4gICAgICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xuXG4gICAgY2FzZSBcIk11bHRpcGx5XCI6XG4gICAgICByZXR1cm4gXCJtdWx0aXBseVwiO1xuXG4gICAgY2FzZSBcIlNjcmVlblwiOlxuICAgICAgcmV0dXJuIFwic2NyZWVuXCI7XG5cbiAgICBjYXNlIFwiT3ZlcmxheVwiOlxuICAgICAgcmV0dXJuIFwib3ZlcmxheVwiO1xuXG4gICAgY2FzZSBcIkRhcmtlblwiOlxuICAgICAgcmV0dXJuIFwiZGFya2VuXCI7XG5cbiAgICBjYXNlIFwiTGlnaHRlblwiOlxuICAgICAgcmV0dXJuIFwibGlnaHRlblwiO1xuXG4gICAgY2FzZSBcIkNvbG9yRG9kZ2VcIjpcbiAgICAgIHJldHVybiBcImNvbG9yLWRvZGdlXCI7XG5cbiAgICBjYXNlIFwiQ29sb3JCdXJuXCI6XG4gICAgICByZXR1cm4gXCJjb2xvci1idXJuXCI7XG5cbiAgICBjYXNlIFwiSGFyZExpZ2h0XCI6XG4gICAgICByZXR1cm4gXCJoYXJkLWxpZ2h0XCI7XG5cbiAgICBjYXNlIFwiU29mdExpZ2h0XCI6XG4gICAgICByZXR1cm4gXCJzb2Z0LWxpZ2h0XCI7XG5cbiAgICBjYXNlIFwiRGlmZmVyZW5jZVwiOlxuICAgICAgcmV0dXJuIFwiZGlmZmVyZW5jZVwiO1xuXG4gICAgY2FzZSBcIkV4Y2x1c2lvblwiOlxuICAgICAgcmV0dXJuIFwiZXhjbHVzaW9uXCI7XG5cbiAgICBjYXNlIFwiSHVlXCI6XG4gICAgICByZXR1cm4gXCJodWVcIjtcblxuICAgIGNhc2UgXCJTYXR1cmF0aW9uXCI6XG4gICAgICByZXR1cm4gXCJzYXR1cmF0aW9uXCI7XG5cbiAgICBjYXNlIFwiQ29sb3JcIjpcbiAgICAgIHJldHVybiBcImNvbG9yXCI7XG5cbiAgICBjYXNlIFwiTHVtaW5vc2l0eVwiOlxuICAgICAgcmV0dXJuIFwibHVtaW5vc2l0eVwiO1xuICB9XG5cbiAgaWYgKHBhcnNpbmdBcnJheSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgKDAsIF91dGlsLndhcm4pKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlOiAke3ZhbHVlLm5hbWV9YCk7XG4gIHJldHVybiBcInNvdXJjZS1vdmVyXCI7XG59XG5cbmNsYXNzIFRpbWVTbG90TWFuYWdlciB7XG4gIHN0YXRpYyBnZXQgVElNRV9TTE9UX0RVUkFUSU9OX01TKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIlRJTUVfU0xPVF9EVVJBVElPTl9NU1wiLCAyMCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IENIRUNLX1RJTUVfRVZFUlkoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiQ0hFQ0tfVElNRV9FVkVSWVwiLCAxMDApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgY2hlY2soKSB7XG4gICAgaWYgKCsrdGhpcy5jaGVja2VkIDwgVGltZVNsb3RNYW5hZ2VyLkNIRUNLX1RJTUVfRVZFUlkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrZWQgPSAwO1xuICAgIHJldHVybiB0aGlzLmVuZFRpbWUgPD0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuZW5kVGltZSA9IERhdGUubm93KCkgKyBUaW1lU2xvdE1hbmFnZXIuVElNRV9TTE9UX0RVUkFUSU9OX01TO1xuICAgIHRoaXMuY2hlY2tlZCA9IDA7XG4gIH1cblxufVxuXG5jbGFzcyBQYXJ0aWFsRXZhbHVhdG9yIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHhyZWYsXG4gICAgaGFuZGxlcixcbiAgICBwYWdlSW5kZXgsXG4gICAgaWRGYWN0b3J5LFxuICAgIGZvbnRDYWNoZSxcbiAgICBidWlsdEluQ01hcENhY2hlLFxuICAgIGdsb2JhbEltYWdlQ2FjaGUsXG4gICAgb3B0aW9ucyA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLmlkRmFjdG9yeSA9IGlkRmFjdG9yeTtcbiAgICB0aGlzLmZvbnRDYWNoZSA9IGZvbnRDYWNoZTtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBidWlsdEluQ01hcENhY2hlO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSA9IGdsb2JhbEltYWdlQ2FjaGU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBEZWZhdWx0UGFydGlhbEV2YWx1YXRvck9wdGlvbnM7XG4gICAgdGhpcy5wYXJzaW5nVHlwZTNGb250ID0gZmFsc2U7XG4gICAgdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kID0gdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpIHtcbiAgICBjb25zdCBwZGZGdW5jdGlvbkZhY3RvcnkgPSBuZXcgX2Z1bmN0aW9uLlBERkZ1bmN0aW9uRmFjdG9yeSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMub3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWRcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfcGRmRnVuY3Rpb25GYWN0b3J5XCIsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gIH1cblxuICBjbG9uZShuZXdPcHRpb25zID0gRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zKSB7XG4gICAgdmFyIG5ld0V2YWx1YXRvciA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgbmV3RXZhbHVhdG9yLm9wdGlvbnMgPSBuZXdPcHRpb25zO1xuICAgIHJldHVybiBuZXdFdmFsdWF0b3I7XG4gIH1cblxuICBoYXNCbGVuZE1vZGVzKHJlc291cmNlcykge1xuICAgIGlmICghKHJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvY2Vzc2VkID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gICAgaWYgKHJlc291cmNlcy5vYmpJZCkge1xuICAgICAgcHJvY2Vzc2VkLnB1dChyZXNvdXJjZXMub2JqSWQpO1xuICAgIH1cblxuICAgIHZhciBub2RlcyA9IFtyZXNvdXJjZXNdLFxuICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgdmFyIGdyYXBoaWNTdGF0ZXMgPSBub2RlLmdldChcIkV4dEdTdGF0ZVwiKTtcblxuICAgICAgaWYgKGdyYXBoaWNTdGF0ZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICAgIGZvciAobGV0IGdyYXBoaWNTdGF0ZSBvZiBncmFwaGljU3RhdGVzLmdldFJhd1ZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKGdyYXBoaWNTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZC5oYXMoZ3JhcGhpY1N0YXRlKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZ3JhcGhpY1N0YXRlID0geHJlZi5mZXRjaChncmFwaGljU3RhdGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoZ3JhcGhpY1N0YXRlKTtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghKGdyYXBoaWNTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlLm9iaklkKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWQucHV0KGdyYXBoaWNTdGF0ZS5vYmpJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm0gPSBncmFwaGljU3RhdGUuZ2V0KFwiQk1cIik7XG5cbiAgICAgICAgICBpZiAoYm0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICAgICAgICBpZiAoYm0ubmFtZSAhPT0gXCJOb3JtYWxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJtICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShibSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBibSkge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUgJiYgZWxlbWVudC5uYW1lICE9PSBcIk5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHhPYmplY3RzID0gbm9kZS5nZXQoXCJYT2JqZWN0XCIpO1xuXG4gICAgICBpZiAoISh4T2JqZWN0cyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCB4T2JqZWN0IG9mIHhPYmplY3RzLmdldFJhd1ZhbHVlcygpKSB7XG4gICAgICAgIGlmICh4T2JqZWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3NlZC5oYXMoeE9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB4T2JqZWN0ID0geHJlZi5mZXRjaCh4T2JqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoeE9iamVjdCk7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeE9iamVjdCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh4T2JqZWN0LmRpY3Qub2JqSWQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQucHV0KHhPYmplY3QuZGljdC5vYmpJZCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgeFJlc291cmNlcyA9IHhPYmplY3QuZGljdC5nZXQoXCJSZXNvdXJjZXNcIik7XG5cbiAgICAgICAgaWYgKCEoeFJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeFJlc291cmNlcy5vYmpJZCAmJiBwcm9jZXNzZWQuaGFzKHhSZXNvdXJjZXMub2JqSWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBub2Rlcy5wdXNoKHhSZXNvdXJjZXMpO1xuXG4gICAgICAgIGlmICh4UmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4UmVzb3VyY2VzLm9iaklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQnVpbHRJbkNNYXAobmFtZSkge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGNhY2hlZERhdGEpIHtcbiAgICAgIHJldHVybiBjYWNoZWREYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5oYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiRmV0Y2hCdWlsdEluQ01hcFwiLCB7XG4gICAgICBuYW1lXG4gICAgfSk7XG4gICAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICAgIHJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgcHVtcCgpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuXG4gICAgICBwdW1wKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLnNldChuYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBzbWFzaywgb3BlcmF0b3JMaXN0LCB0YXNrLCBpbml0aWFsU3RhdGUsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgdmFyIGRpY3QgPSB4b2JqLmRpY3Q7XG4gICAgdmFyIG1hdHJpeCA9IGRpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgdmFyIGJib3ggPSBkaWN0LmdldEFycmF5KFwiQkJveFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGJib3gpICYmIGJib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICBiYm94ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGJib3gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgb3B0aW9uYWxDb250ZW50ID0gbnVsbDtcblxuICAgIGlmIChkaWN0LmhhcyhcIk9DXCIpKSB7XG4gICAgICBvcHRpb25hbENvbnRlbnQgPSBhd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGRpY3QuZ2V0KFwiT0NcIiksIHJlc291cmNlcyk7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLCBbXCJPQ1wiLCBvcHRpb25hbENvbnRlbnRdKTtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXAgPSBkaWN0LmdldChcIkdyb3VwXCIpO1xuXG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICB2YXIgZ3JvdXBPcHRpb25zID0ge1xuICAgICAgICBtYXRyaXgsXG4gICAgICAgIGJib3gsXG4gICAgICAgIHNtYXNrLFxuICAgICAgICBpc29sYXRlZDogZmFsc2UsXG4gICAgICAgIGtub2Nrb3V0OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHZhciBncm91cFN1YnR5cGUgPSBncm91cC5nZXQoXCJTXCIpO1xuICAgICAgdmFyIGNvbG9yU3BhY2UgPSBudWxsO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZ3JvdXBTdWJ0eXBlLCBcIlRyYW5zcGFyZW5jeVwiKSkge1xuICAgICAgICBncm91cE9wdGlvbnMuaXNvbGF0ZWQgPSBncm91cC5nZXQoXCJJXCIpIHx8IGZhbHNlO1xuICAgICAgICBncm91cE9wdGlvbnMua25vY2tvdXQgPSBncm91cC5nZXQoXCJLXCIpIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmIChncm91cC5oYXMoXCJDU1wiKSkge1xuICAgICAgICAgIGNvbnN0IGNzID0gZ3JvdXAuZ2V0UmF3KFwiQ1NcIik7XG5cbiAgICAgICAgICBjb25zdCBjYWNoZWRDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5nZXRDYWNoZWQoY3MsIHRoaXMueHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgICAgaWYgKGNhY2hlZENvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBjYWNoZWRDb2xvclNwYWNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2xvclNwYWNlID0gYXdhaXQgdGhpcy5wYXJzZUNvbG9yU3BhY2Uoe1xuICAgICAgICAgICAgICBjcyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzbWFzayAmJiBzbWFzay5iYWNrZHJvcCkge1xuICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZSB8fCBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICBzbWFzay5iYWNrZHJvcCA9IGNvbG9yU3BhY2UuZ2V0UmdiKHNtYXNrLmJhY2tkcm9wLCAwKTtcbiAgICAgIH1cblxuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbkdyb3VwLCBbZ3JvdXBPcHRpb25zXSk7XG4gICAgfVxuXG4gICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW4sIFttYXRyaXgsIGJib3hdKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgc3RyZWFtOiB4b2JqLFxuICAgICAgdGFzayxcbiAgICAgIHJlc291cmNlczogZGljdC5nZXQoXCJSZXNvdXJjZXNcIikgfHwgcmVzb3VyY2VzLFxuICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgaW5pdGlhbFN0YXRlXG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsIFtdKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbmFsQ29udGVudCkge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQsIFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9zZW5kSW1nRGF0YShvYmpJZCwgaW1nRGF0YSwgY2FjaGVHbG9iYWxseSA9IGZhbHNlKSB7XG4gICAgY29uc3QgdHJhbnNmZXJzID0gaW1nRGF0YSA/IFtpbWdEYXRhLmRhdGEuYnVmZmVyXSA6IG51bGw7XG5cbiAgICBpZiAodGhpcy5wYXJzaW5nVHlwZTNGb250IHx8IGNhY2hlR2xvYmFsbHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuc2VuZChcImNvbW1vbm9ialwiLCBbb2JqSWQsIFwiSW1hZ2VcIiwgaW1nRGF0YV0sIHRyYW5zZmVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5zZW5kKFwib2JqXCIsIFtvYmpJZCwgdGhpcy5wYWdlSW5kZXgsIFwiSW1hZ2VcIiwgaW1nRGF0YV0sIHRyYW5zZmVycyk7XG4gIH1cblxuICBhc3luYyBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtcbiAgICByZXNvdXJjZXMsXG4gICAgaW1hZ2UsXG4gICAgaXNJbmxpbmUgPSBmYWxzZSxcbiAgICBvcGVyYXRvckxpc3QsXG4gICAgY2FjaGVLZXksXG4gICAgbG9jYWxJbWFnZUNhY2hlLFxuICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gIH0pIHtcbiAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG4gICAgY29uc3QgaW1hZ2VSZWYgPSBkaWN0Lm9iaklkO1xuICAgIHZhciB3ID0gZGljdC5nZXQoXCJXaWR0aFwiLCBcIldcIik7XG4gICAgdmFyIGggPSBkaWN0LmdldChcIkhlaWdodFwiLCBcIkhcIik7XG5cbiAgICBpZiAoISh3ICYmICgwLCBfdXRpbC5pc051bSkodykpIHx8ICEoaCAmJiAoMCwgX3V0aWwuaXNOdW0pKGgpKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgbWF4SW1hZ2VTaXplID0gdGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtcblxuICAgIGlmIChtYXhJbWFnZVNpemUgIT09IC0xICYmIHcgKiBoID4gbWF4SW1hZ2VTaXplKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJbWFnZU1hc2tcIiwgXCJJTVwiKSB8fCBmYWxzZTtcbiAgICB2YXIgaW1nRGF0YSwgYXJncztcblxuICAgIGlmIChpbWFnZU1hc2spIHtcbiAgICAgIHZhciB3aWR0aCA9IGRpY3QuZ2V0KFwiV2lkdGhcIiwgXCJXXCIpO1xuICAgICAgdmFyIGhlaWdodCA9IGRpY3QuZ2V0KFwiSGVpZ2h0XCIsIFwiSFwiKTtcbiAgICAgIHZhciBiaXRTdHJpZGVMZW5ndGggPSB3aWR0aCArIDcgPj4gMztcbiAgICAgIHZhciBpbWdBcnJheSA9IGltYWdlLmdldEJ5dGVzKGJpdFN0cmlkZUxlbmd0aCAqIGhlaWdodCwgdHJ1ZSk7XG4gICAgICB2YXIgZGVjb2RlID0gZGljdC5nZXRBcnJheShcIkRlY29kZVwiLCBcIkRcIik7XG4gICAgICBpbWdEYXRhID0gX2ltYWdlLlBERkltYWdlLmNyZWF0ZU1hc2soe1xuICAgICAgICBpbWdBcnJheSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06IGltYWdlIGluc3RhbmNlb2YgX3N0cmVhbS5EZWNvZGVTdHJlYW0sXG4gICAgICAgIGludmVyc2VEZWNvZGU6ICEhZGVjb2RlICYmIGRlY29kZVswXSA+IDBcbiAgICAgIH0pO1xuICAgICAgaW1nRGF0YS5jYWNoZWQgPSAhIWNhY2hlS2V5O1xuICAgICAgYXJncyA9IFtpbWdEYXRhXTtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBhcmdzKTtcblxuICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgIGxvY2FsSW1hZ2VDYWNoZS5zZXQoY2FjaGVLZXksIGltYWdlUmVmLCB7XG4gICAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsXG4gICAgICAgICAgYXJnc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgc29mdE1hc2sgPSBkaWN0LmdldChcIlNNYXNrXCIsIFwiU01cIikgfHwgZmFsc2U7XG4gICAgdmFyIG1hc2sgPSBkaWN0LmdldChcIk1hc2tcIikgfHwgZmFsc2U7XG4gICAgdmFyIFNNQUxMX0lNQUdFX0RJTUVOU0lPTlMgPSAyMDA7XG5cbiAgICBpZiAoaXNJbmxpbmUgJiYgIXNvZnRNYXNrICYmICFtYXNrICYmIHcgKyBoIDwgU01BTExfSU1BR0VfRElNRU5TSU9OUykge1xuICAgICAgY29uc3QgaW1hZ2VPYmogPSBuZXcgX2ltYWdlLlBERkltYWdlKHtcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICByZXM6IHJlc291cmNlcyxcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIGlzSW5saW5lLFxuICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgIH0pO1xuICAgICAgaW1nRGF0YSA9IGltYWdlT2JqLmNyZWF0ZUltYWdlRGF0YSh0cnVlKTtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIFtpbWdEYXRhXSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBvYmpJZCA9IGBpbWdfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWAsXG4gICAgICAgIGNhY2hlR2xvYmFsbHkgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpIHtcbiAgICAgIG9iaklkID0gYCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtvYmpJZH1gO1xuICAgIH0gZWxzZSBpZiAoaW1hZ2VSZWYpIHtcbiAgICAgIGNhY2hlR2xvYmFsbHkgPSB0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2hvdWxkQ2FjaGUoaW1hZ2VSZWYsIHRoaXMucGFnZUluZGV4KTtcblxuICAgICAgaWYgKGNhY2hlR2xvYmFsbHkpIHtcbiAgICAgICAgb2JqSWQgPSBgJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke29iaklkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kob2JqSWQpO1xuICAgIGFyZ3MgPSBbb2JqSWQsIHcsIGhdO1xuXG4gICAgX2ltYWdlLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgcmVzOiByZXNvdXJjZXMsXG4gICAgICBpbWFnZSxcbiAgICAgIGlzSW5saW5lLFxuICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgIH0pLnRoZW4oaW1hZ2VPYmogPT4ge1xuICAgICAgaW1nRGF0YSA9IGltYWdlT2JqLmNyZWF0ZUltYWdlRGF0YShmYWxzZSk7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEob2JqSWQsIGltZ0RhdGEsIGNhY2hlR2xvYmFsbHkpO1xuICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFVuYWJsZSB0byBkZWNvZGUgaW1hZ2UgXCIke29iaklkfVwiOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKG9iaklkLCBudWxsLCBjYWNoZUdsb2JhbGx5KTtcbiAgICB9KTtcblxuICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsIGFyZ3MpO1xuXG4gICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICBsb2NhbEltYWdlQ2FjaGUuc2V0KGNhY2hlS2V5LCBpbWFnZVJlZiwge1xuICAgICAgICBmbjogX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LFxuICAgICAgICBhcmdzXG4gICAgICB9KTtcblxuICAgICAgaWYgKGltYWdlUmVmKSB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFpc0lubGluZSwgXCJDYW5ub3QgY2FjaGUgYW4gaW5saW5lIGltYWdlIGdsb2JhbGx5LlwiKTtcbiAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZFBhZ2VJbmRleChpbWFnZVJlZiwgdGhpcy5wYWdlSW5kZXgpO1xuXG4gICAgICAgIGlmIChjYWNoZUdsb2JhbGx5KSB7XG4gICAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoaW1hZ2VSZWYsIHtcbiAgICAgICAgICAgIG9iaklkLFxuICAgICAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCxcbiAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBoYW5kbGVTTWFzayhzbWFzaywgcmVzb3VyY2VzLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlciwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHtcbiAgICB2YXIgc21hc2tDb250ZW50ID0gc21hc2suZ2V0KFwiR1wiKTtcbiAgICB2YXIgc21hc2tPcHRpb25zID0ge1xuICAgICAgc3VidHlwZTogc21hc2suZ2V0KFwiU1wiKS5uYW1lLFxuICAgICAgYmFja2Ryb3A6IHNtYXNrLmdldChcIkJDXCIpXG4gICAgfTtcbiAgICB2YXIgdHJhbnNmZXJPYmogPSBzbWFzay5nZXQoXCJUUlwiKTtcblxuICAgIGlmICgoMCwgX2Z1bmN0aW9uLmlzUERGRnVuY3Rpb24pKHRyYW5zZmVyT2JqKSkge1xuICAgICAgY29uc3QgdHJhbnNmZXJGbiA9IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodHJhbnNmZXJPYmopO1xuXG4gICAgICB2YXIgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgdmFyIHRtcCA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgdG1wWzBdID0gaSAvIDI1NTtcbiAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7XG4gICAgICAgIHRyYW5zZmVyTWFwW2ldID0gdG1wWzBdICogMjU1IHwgMDtcbiAgICAgIH1cblxuICAgICAgc21hc2tPcHRpb25zLnRyYW5zZmVyTWFwID0gdHJhbnNmZXJNYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRGb3JtWE9iamVjdChyZXNvdXJjZXMsIHNtYXNrQ29udGVudCwgc21hc2tPcHRpb25zLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG4gIH1cblxuICBoYW5kbGVUcmFuc2ZlckZ1bmN0aW9uKHRyKSB7XG4gICAgbGV0IHRyYW5zZmVyQXJyYXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cikpIHtcbiAgICAgIHRyYW5zZmVyQXJyYXkgPSB0cjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfZnVuY3Rpb24uaXNQREZGdW5jdGlvbikodHIpKSB7XG4gICAgICB0cmFuc2ZlckFycmF5ID0gW3RyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmZXJNYXBzID0gW107XG4gICAgbGV0IG51bUZucyA9IDAsXG4gICAgICAgIG51bUVmZmVjdGZ1bEZucyA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRyYW5zZmVyQXJyYXkpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyT2JqID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZW50cnkpO1xuICAgICAgbnVtRm5zKys7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0cmFuc2Zlck9iaiwgXCJJZGVudGl0eVwiKSkge1xuICAgICAgICB0cmFuc2Zlck1hcHMucHVzaChudWxsKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKCEoMCwgX2Z1bmN0aW9uLmlzUERGRnVuY3Rpb24pKHRyYW5zZmVyT2JqKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJhbnNmZXJGbiA9IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodHJhbnNmZXJPYmopO1xuXG4gICAgICBjb25zdCB0cmFuc2Zlck1hcCA9IG5ldyBVaW50OEFycmF5KDI1NiksXG4gICAgICAgICAgICB0bXAgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDI1NjsgaisrKSB7XG4gICAgICAgIHRtcFswXSA9IGogLyAyNTU7XG4gICAgICAgIHRyYW5zZmVyRm4odG1wLCAwLCB0bXAsIDApO1xuICAgICAgICB0cmFuc2Zlck1hcFtqXSA9IHRtcFswXSAqIDI1NSB8IDA7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZmVyTWFwcy5wdXNoKHRyYW5zZmVyTWFwKTtcbiAgICAgIG51bUVmZmVjdGZ1bEZucysrO1xuICAgIH1cblxuICAgIGlmICghKG51bUZucyA9PT0gMSB8fCBudW1GbnMgPT09IDQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobnVtRWZmZWN0ZnVsRm5zID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmZXJNYXBzO1xuICB9XG5cbiAgaGFuZGxlVGlsaW5nVHlwZShmbiwgYXJncywgcmVzb3VyY2VzLCBwYXR0ZXJuLCBwYXR0ZXJuRGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrKSB7XG4gICAgY29uc3QgdGlsaW5nT3BMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuXG4gICAgY29uc3QgcGF0dGVyblJlc291cmNlcyA9IF9wcmltaXRpdmVzLkRpY3QubWVyZ2Uoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgZGljdEFycmF5OiBbcGF0dGVybkRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpLCByZXNvdXJjZXNdXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgc3RyZWFtOiBwYXR0ZXJuLFxuICAgICAgdGFzayxcbiAgICAgIHJlc291cmNlczogcGF0dGVyblJlc291cmNlcyxcbiAgICAgIG9wZXJhdG9yTGlzdDogdGlsaW5nT3BMaXN0XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKDAsIF9wYXR0ZXJuLmdldFRpbGluZ1BhdHRlcm5JUikoe1xuICAgICAgICBmbkFycmF5OiB0aWxpbmdPcExpc3QuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5OiB0aWxpbmdPcExpc3QuYXJnc0FycmF5XG4gICAgICB9LCBwYXR0ZXJuRGljdCwgYXJncyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodGlsaW5nUGF0dGVybklSKSB7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jaWVzKHRpbGluZ09wTGlzdC5kZXBlbmRlbmNpZXMpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGZuLCB0aWxpbmdQYXR0ZXJuSVIpO1xuICAgIH0sIHJlYXNvbiA9PiB7XG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclRpbGluZ1BhdHRlcm5cbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGZvbnRBcmdzLCBmb250UmVmLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlKSB7XG4gICAgdmFyIGZvbnROYW1lLFxuICAgICAgICBmb250U2l6ZSA9IDA7XG5cbiAgICBpZiAoZm9udEFyZ3MpIHtcbiAgICAgIGZvbnRBcmdzID0gZm9udEFyZ3Muc2xpY2UoKTtcbiAgICAgIGZvbnROYW1lID0gZm9udEFyZ3NbMF0ubmFtZTtcbiAgICAgIGZvbnRTaXplID0gZm9udEFyZ3NbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubG9hZEZvbnQoZm9udE5hbWUsIGZvbnRSZWYsIHJlc291cmNlcykudGhlbih0cmFuc2xhdGVkID0+IHtcbiAgICAgIGlmICghdHJhbnNsYXRlZC5mb250LmlzVHlwZTNGb250KSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZC5sb2FkVHlwZTNEYXRhKHRoaXMsIHJlc291cmNlcywgdGFzaykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmNpZXModHJhbnNsYXRlZC50eXBlM0RlcGVuZGVuY2llcyk7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZFR5cGUzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgICBsb2FkZWROYW1lOiBcImdfZm9udF9lcnJvclwiLFxuICAgICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBUeXBlMyBmb250IGxvYWQgZXJyb3I6ICR7cmVhc29ufWApLFxuICAgICAgICAgIGRpY3Q6IHRyYW5zbGF0ZWQuZm9udCxcbiAgICAgICAgICBleHRyYVByb3BlcnRpZXM6IHRoaXMub3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSkudGhlbih0cmFuc2xhdGVkID0+IHtcbiAgICAgIHN0YXRlLmZvbnQgPSB0cmFuc2xhdGVkLmZvbnQ7XG4gICAgICBzdGF0ZS5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgc3RhdGUuZm9udE5hbWUgPSBmb250TmFtZTtcbiAgICAgIHRyYW5zbGF0ZWQuc2VuZCh0aGlzLmhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVRleHQoY2hhcnMsIHN0YXRlKSB7XG4gICAgY29uc3QgZm9udCA9IHN0YXRlLmZvbnQ7XG4gICAgY29uc3QgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgIGlmIChmb250LmRhdGEpIHtcbiAgICAgIGNvbnN0IGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgaWYgKGlzQWRkVG9QYXRoU2V0IHx8IHN0YXRlLmZpbGxDb2xvclNwYWNlLm5hbWUgPT09IFwiUGF0dGVyblwiIHx8IGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgUGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIHRoaXMuaGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBocztcbiAgfVxuXG4gIGVuc3VyZVN0YXRlRm9udChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5mb250KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVhc29uID0gbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLlwiKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250U3RhdGVcbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBlbnN1cmVTdGF0ZUZvbnQ6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgcmVhc29uO1xuICB9XG5cbiAgYXN5bmMgc2V0R1N0YXRlKHtcbiAgICByZXNvdXJjZXMsXG4gICAgZ1N0YXRlLFxuICAgIG9wZXJhdG9yTGlzdCxcbiAgICBjYWNoZUtleSxcbiAgICB0YXNrLFxuICAgIHN0YXRlTWFuYWdlcixcbiAgICBsb2NhbEdTdGF0ZUNhY2hlLFxuICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gIH0pIHtcbiAgICBjb25zdCBnU3RhdGVSZWYgPSBnU3RhdGUub2JqSWQ7XG4gICAgbGV0IGlzU2ltcGxlR1N0YXRlID0gdHJ1ZTtcbiAgICB2YXIgZ1N0YXRlT2JqID0gW107XG4gICAgdmFyIGdTdGF0ZUtleXMgPSBnU3RhdGUuZ2V0S2V5cygpO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBnU3RhdGVLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGdTdGF0ZUtleXNbaV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGdTdGF0ZS5nZXQoa2V5KTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcIlR5cGVcIjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgY2FzZSBcIlJJXCI6XG4gICAgICAgIGNhc2UgXCJGTFwiOlxuICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgY2FzZSBcImNhXCI6XG4gICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiRm9udFwiOlxuICAgICAgICAgIGlzU2ltcGxlR1N0YXRlID0gZmFsc2U7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXRGb250KHJlc291cmNlcywgbnVsbCwgdmFsdWVbMF0sIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBbbG9hZGVkTmFtZSwgdmFsdWVbMV1dXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQk1cIjpcbiAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlNNYXNrXCI6XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlLCBcIk5vbmVcIikpIHtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIGZhbHNlXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWUpKSB7XG4gICAgICAgICAgICBpc1NpbXBsZUdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNNYXNrKHZhbHVlLCByZXNvdXJjZXMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRydWVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSB0aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odmFsdWUpO1xuICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRyYW5zZmVyTWFwc10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJPUFwiOlxuICAgICAgICBjYXNlIFwib3BcIjpcbiAgICAgICAgY2FzZSBcIk9QTVwiOlxuICAgICAgICBjYXNlIFwiQkdcIjpcbiAgICAgICAgY2FzZSBcIkJHMlwiOlxuICAgICAgICBjYXNlIFwiVUNSXCI6XG4gICAgICAgIGNhc2UgXCJVQ1IyXCI6XG4gICAgICAgIGNhc2UgXCJUUjJcIjpcbiAgICAgICAgY2FzZSBcIkhUXCI6XG4gICAgICAgIGNhc2UgXCJTTVwiOlxuICAgICAgICBjYXNlIFwiU0FcIjpcbiAgICAgICAgY2FzZSBcIkFJU1wiOlxuICAgICAgICBjYXNlIFwiVEtcIjpcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJncmFwaGljIHN0YXRlIG9wZXJhdG9yIFwiICsga2V5KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciBcIiArIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZ1N0YXRlT2JqLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtnU3RhdGVPYmpdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2ltcGxlR1N0YXRlKSB7XG4gICAgICAgIGxvY2FsR1N0YXRlQ2FjaGUuc2V0KGNhY2hlS2V5LCBnU3RhdGVSZWYsIGdTdGF0ZU9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRm9udChmb250TmFtZSwgZm9udCwgcmVzb3VyY2VzKSB7XG4gICAgY29uc3QgZXJyb3JGb250ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe1xuICAgICAgICBsb2FkZWROYW1lOiBcImdfZm9udF9lcnJvclwiLFxuICAgICAgICBmb250OiBuZXcgX2ZvbnRzLkVycm9yRm9udChgRm9udCBcIiR7Zm9udE5hbWV9XCIgaXMgbm90IGF2YWlsYWJsZS5gKSxcbiAgICAgICAgZGljdDogZm9udCxcbiAgICAgICAgZXh0cmFQcm9wZXJ0aWVzOiB0aGlzLm9wdGlvbnMuZm9udEV4dHJhUHJvcGVydGllc1xuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICB2YXIgZm9udFJlZixcbiAgICAgICAgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgIGlmIChmb250KSB7XG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdUaGUgXCJmb250XCIgb2JqZWN0IHNob3VsZCBiZSBhIHJlZmVyZW5jZS4nKTtcbiAgICAgIH1cblxuICAgICAgZm9udFJlZiA9IGZvbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmb250UmVzID0gcmVzb3VyY2VzLmdldChcIkZvbnRcIik7XG5cbiAgICAgIGlmIChmb250UmVzKSB7XG4gICAgICAgIGZvbnRSZWYgPSBmb250UmVzLmdldFJhdyhmb250TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFmb250UmVmKSB7XG4gICAgICBjb25zdCBwYXJ0aWFsTXNnID0gYEZvbnQgXCIke2ZvbnROYW1lIHx8IGZvbnQgJiYgZm9udC50b1N0cmluZygpfVwiIGlzIG5vdCBhdmFpbGFibGVgO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMgJiYgIXRoaXMucGFyc2luZ1R5cGUzRm9udCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7cGFydGlhbE1zZ30uYCk7XG4gICAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udE1pc3NpbmdcbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGAke3BhcnRpYWxNc2d9IC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuYCk7XG4gICAgICBmb250UmVmID0gUGFydGlhbEV2YWx1YXRvci5mYWxsYmFja0ZvbnREaWN0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvbnRDYWNoZS5oYXMoZm9udFJlZikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoZm9udFJlZik7XG4gICAgfVxuXG4gICAgZm9udCA9IHhyZWYuZmV0Y2hJZlJlZihmb250UmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZm9udCkpIHtcbiAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICB9XG5cbiAgICBpZiAoZm9udC50cmFuc2xhdGVkKSB7XG4gICAgICByZXR1cm4gZm9udC50cmFuc2xhdGVkO1xuICAgIH1cblxuICAgIHZhciBmb250Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB2YXIgcHJlRXZhbHVhdGVkRm9udCA9IHRoaXMucHJlRXZhbHVhdGVGb250KGZvbnQpO1xuICAgIGNvbnN0IHtcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBoYXNoXG4gICAgfSA9IHByZUV2YWx1YXRlZEZvbnQ7XG4gICAgdmFyIGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZiksXG4gICAgICAgIGZvbnRJRDtcblxuICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgIGZvbnRJRCA9IGBmJHtmb250UmVmLnRvU3RyaW5nKCl9YDtcbiAgICB9XG5cbiAgICBpZiAoaGFzaCAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXNjcmlwdG9yKSkge1xuICAgICAgaWYgKCFkZXNjcmlwdG9yLmZvbnRBbGlhc2VzKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuZm9udEFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm9udEFsaWFzZXMgPSBkZXNjcmlwdG9yLmZvbnRBbGlhc2VzO1xuXG4gICAgICBpZiAoZm9udEFsaWFzZXNbaGFzaF0pIHtcbiAgICAgICAgdmFyIGFsaWFzRm9udFJlZiA9IGZvbnRBbGlhc2VzW2hhc2hdLmFsaWFzUmVmO1xuXG4gICAgICAgIGlmIChmb250UmVmSXNSZWYgJiYgYWxpYXNGb250UmVmICYmIHRoaXMuZm9udENhY2hlLmhhcyhhbGlhc0ZvbnRSZWYpKSB7XG4gICAgICAgICAgdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoZm9udFJlZiwgYWxpYXNGb250UmVmKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb250QWxpYXNlc1toYXNoXSA9IHtcbiAgICAgICAgICBmb250SUQ6IHRoaXMuaWRGYWN0b3J5LmNyZWF0ZUZvbnRJZCgpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0uYWxpYXNSZWYgPSBmb250UmVmO1xuICAgICAgfVxuXG4gICAgICBmb250SUQgPSBmb250QWxpYXNlc1toYXNoXS5mb250SUQ7XG4gICAgfVxuXG4gICAgaWYgKGZvbnRSZWZJc1JlZikge1xuICAgICAgdGhpcy5mb250Q2FjaGUucHV0KGZvbnRSZWYsIGZvbnRDYXBhYmlsaXR5LnByb21pc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZvbnRJRCkge1xuICAgICAgICBmb250SUQgPSB0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb250Q2FjaGUucHV0KGBpZF8ke2ZvbnRJRH1gLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmb250SUQgJiYgZm9udElELnN0YXJ0c1dpdGgoXCJmXCIpLCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpO1xuICAgIGZvbnQubG9hZGVkTmFtZSA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7Zm9udElEfWA7XG4gICAgZm9udC50cmFuc2xhdGVkID0gZm9udENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB2YXIgdHJhbnNsYXRlZFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgdHJhbnNsYXRlZFByb21pc2UgPSB0aGlzLnRyYW5zbGF0ZUZvbnQocHJlRXZhbHVhdGVkRm9udCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJhbnNsYXRlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG5cbiAgICB0cmFuc2xhdGVkUHJvbWlzZS50aGVuKHRyYW5zbGF0ZWRGb250ID0+IHtcbiAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5mb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciB4cmVmRm9udFN0YXRzID0geHJlZi5zdGF0cy5mb250VHlwZXM7XG4gICAgICAgIHhyZWZGb250U3RhdHNbdHJhbnNsYXRlZEZvbnQuZm9udFR5cGVdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe1xuICAgICAgICBsb2FkZWROYW1lOiBmb250LmxvYWRlZE5hbWUsXG4gICAgICAgIGZvbnQ6IHRyYW5zbGF0ZWRGb250LFxuICAgICAgICBkaWN0OiBmb250LFxuICAgICAgICBleHRyYVByb3BlcnRpZXM6IHRoaXMub3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzXG4gICAgICB9KSk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRUcmFuc2xhdGVcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm9udEZpbGUzID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmdldChcIkZvbnRGaWxlM1wiKTtcbiAgICAgICAgdmFyIHN1YnR5cGUgPSBmb250RmlsZTMgJiYgZm9udEZpbGUzLmdldChcIlN1YnR5cGVcIik7XG4gICAgICAgIHZhciBmb250VHlwZSA9ICgwLCBfZm9udHMuZ2V0Rm9udFR5cGUpKHByZUV2YWx1YXRlZEZvbnQudHlwZSwgc3VidHlwZSAmJiBzdWJ0eXBlLm5hbWUpO1xuICAgICAgICB2YXIgeHJlZkZvbnRTdGF0cyA9IHhyZWYuc3RhdHMuZm9udFR5cGVzO1xuICAgICAgICB4cmVmRm9udFN0YXRzW2ZvbnRUeXBlXSA9IHRydWU7XG4gICAgICB9IGNhdGNoIChleCkge31cblxuICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe1xuICAgICAgICBsb2FkZWROYW1lOiBmb250LmxvYWRlZE5hbWUsXG4gICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uLm1lc3NhZ2UgOiByZWFzb24pLFxuICAgICAgICBkaWN0OiBmb250LFxuICAgICAgICBleHRyYVByb3BlcnRpZXM6IHRoaXMub3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzXG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvbnRDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBidWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncywgcGFyc2luZ1RleHQgPSBmYWxzZSkge1xuICAgIHZhciBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IFtdO1xuICAgIH1cblxuICAgIGlmIChsYXN0SW5kZXggPCAwIHx8IG9wZXJhdG9yTGlzdC5mbkFycmF5W2xhc3RJbmRleF0gIT09IF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoKSB7XG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yIFwiJHtmbn1cIiBpbnNpZGUgb2YgYSB0ZXh0IG9iamVjdC5gKTtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zYXZlLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuXG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5yZXN0b3JlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9wQXJncyA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXlbbGFzdEluZGV4XTtcbiAgICAgIG9wQXJnc1swXS5wdXNoKGZuKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG9wQXJnc1sxXSwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VDb2xvclNwYWNlKHtcbiAgICBjcyxcbiAgICByZXNvdXJjZXMsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIHJldHVybiBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlQXN5bmMoe1xuICAgICAgY3MsXG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JDb2xvclNwYWNlXG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYHBhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVDb2xvck4ob3BlcmF0b3JMaXN0LCBmbiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2ssIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgdmFyIHBhdHRlcm5OYW1lID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBwYXR0ZXJuO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHBhdHRlcm5OYW1lKSAmJiAocGF0dGVybiA9IHBhdHRlcm5zLmdldChwYXR0ZXJuTmFtZS5uYW1lKSkpIHtcbiAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShwYXR0ZXJuKSA/IHBhdHRlcm4uZGljdCA6IHBhdHRlcm47XG4gICAgICB2YXIgdHlwZU51bSA9IGRpY3QuZ2V0KFwiUGF0dGVyblR5cGVcIik7XG5cbiAgICAgIGlmICh0eXBlTnVtID09PSBQYXR0ZXJuVHlwZS5USUxJTkcpIHtcbiAgICAgICAgdmFyIGNvbG9yID0gY3MuYmFzZSA/IGNzLmJhc2UuZ2V0UmdiKGFyZ3MsIDApIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZShmbiwgY29sb3IsIHJlc291cmNlcywgcGF0dGVybiwgZGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZU51bSA9PT0gUGF0dGVyblR5cGUuU0hBRElORykge1xuICAgICAgICB2YXIgc2hhZGluZyA9IGRpY3QuZ2V0KFwiU2hhZGluZ1wiKTtcbiAgICAgICAgdmFyIG1hdHJpeCA9IGRpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgICAgIHBhdHRlcm4gPSBfcGF0dGVybi5QYXR0ZXJuLnBhcnNlU2hhZGluZyhzaGFkaW5nLCBtYXRyaXgsIHRoaXMueHJlZiwgcmVzb3VyY2VzLCB0aGlzLmhhbmRsZXIsIHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHBhdHRlcm4uZ2V0SVIoKSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuVHlwZTogJHt0eXBlTnVtfWApO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuTmFtZTogJHtwYXR0ZXJuTmFtZX1gKTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGNvbnRlbnRQcm9wZXJ0aWVzLCByZXNvdXJjZXMpIHtcbiAgICBsZXQgb3B0aW9uYWxDb250ZW50O1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNvbnRlbnRQcm9wZXJ0aWVzKSkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHJlc291cmNlcy5nZXQoXCJQcm9wZXJ0aWVzXCIpO1xuICAgICAgb3B0aW9uYWxDb250ZW50ID0gcHJvcGVydGllcy5nZXQoY29udGVudFByb3BlcnRpZXMubmFtZSk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjb250ZW50UHJvcGVydGllcykpIHtcbiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGNvbnRlbnRQcm9wZXJ0aWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25hbENvbnRlbnRUeXBlID0gb3B0aW9uYWxDb250ZW50LmdldChcIlR5cGVcIikubmFtZTtcblxuICAgIGlmIChvcHRpb25hbENvbnRlbnRUeXBlID09PSBcIk9DR1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICBpZDogb3B0aW9uYWxDb250ZW50Lm9iaklkXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9uYWxDb250ZW50VHlwZSA9PT0gXCJPQ01EXCIpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsQ29udGVudEdyb3VwcyA9IG9wdGlvbmFsQ29udGVudC5nZXQoXCJPQ0dzXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9wdGlvbmFsQ29udGVudEdyb3VwcykpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBJZHMgPSBbXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpKSB7XG4gICAgICAgICAgb3B0aW9uYWxDb250ZW50LmdldChcIk9DR3NcIikuZm9yRWFjaChvY2cgPT4ge1xuICAgICAgICAgICAgZ3JvdXBJZHMucHVzaChvY2cudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBJZHMucHVzaChvcHRpb25hbENvbnRlbnRHcm91cHMub2JqSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4cHJlc3Npb24gPSBudWxsO1xuXG4gICAgICAgIGlmIChvcHRpb25hbENvbnRlbnQuZ2V0KFwiVkVcIikpIHtcbiAgICAgICAgICBleHByZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogb3B0aW9uYWxDb250ZW50VHlwZSxcbiAgICAgICAgICBpZHM6IGdyb3VwSWRzLFxuICAgICAgICAgIHBvbGljeTogKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob3B0aW9uYWxDb250ZW50LmdldChcIlBcIikpID8gb3B0aW9uYWxDb250ZW50LmdldChcIlBcIikubmFtZSA6IG51bGwsXG4gICAgICAgICAgZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9wdGlvbmFsQ29udGVudEdyb3VwcykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICAgIGlkOiBvcHRpb25hbENvbnRlbnRHcm91cHMudG9TdHJpbmcoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICBzdHJlYW0sXG4gICAgdGFzayxcbiAgICByZXNvdXJjZXMsXG4gICAgb3BlcmF0b3JMaXN0LFxuICAgIGluaXRpYWxTdGF0ZSA9IG51bGxcbiAgfSkge1xuICAgIHJlc291cmNlcyA9IHJlc291cmNlcyB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSB8fCBuZXcgRXZhbFN0YXRlKCk7XG5cbiAgICBpZiAoIW9wZXJhdG9yTGlzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXRPcGVyYXRvckxpc3Q6IG1pc3NpbmcgXCJvcGVyYXRvckxpc3RcIiBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IHBhcnNpbmdUZXh0ID0gZmFsc2U7XG4gICAgY29uc3QgbG9jYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEltYWdlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbENvbG9yU3BhY2VDYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxDb2xvclNwYWNlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbEdTdGF0ZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEdTdGF0ZUNhY2hlKCk7XG5cbiAgICB2YXIgeG9ianMgPSByZXNvdXJjZXMuZ2V0KFwiWE9iamVjdFwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgdmFyIHBhdHRlcm5zID0gcmVzb3VyY2VzLmdldChcIlBhdHRlcm5cIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcblxuICAgIHZhciBzdGF0ZU1hbmFnZXIgPSBuZXcgU3RhdGVNYW5hZ2VyKGluaXRpYWxTdGF0ZSk7XG4gICAgdmFyIHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgIHZhciB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG5cbiAgICBmdW5jdGlvbiBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKGFyZ3VtZW50KSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwcmVwcm9jZXNzb3Iuc2F2ZWRTdGF0ZXNEZXB0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5yZXN0b3JlLCBbXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIFByb21pc2UuYWxsKFtwcm9taXNlLCBvcGVyYXRvckxpc3QucmVhZHldKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9O1xuXG4gICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgIHRpbWVTbG90TWFuYWdlci5yZXNldCgpO1xuICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgb3BlcmF0aW9uID0ge30sXG4gICAgICAgICAgaSxcbiAgICAgICAgICBpaSxcbiAgICAgICAgICBjcyxcbiAgICAgICAgICBuYW1lO1xuXG4gICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgIG9wZXJhdGlvbi5hcmdzID0gbnVsbDtcblxuICAgICAgICBpZiAoIXByZXByb2Nlc3Nvci5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgIHZhciBmbiA9IG9wZXJhdGlvbi5mbjtcblxuICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxvY2FsSW1hZ2UgPSBsb2NhbEltYWdlQ2FjaGUuZ2V0QnlOYW1lKG5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChsb2NhbEltYWdlKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGxvY2FsSW1hZ2UuZm4sIGxvY2FsSW1hZ2UuYXJncyk7XG4gICAgICAgICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHtcbiAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHhvYmopO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChsb2NhbEltYWdlLmZuLCBsb2NhbEltYWdlLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxJbWFnZSA9IHNlbGYuZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKHhvYmosIHNlbGYucGFnZUluZGV4KTtcblxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3koZ2xvYmFsSW1hZ2Uub2JqSWQpO1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGdsb2JhbEltYWdlLmZuLCBnbG9iYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBcIkltYWdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgaW1hZ2U6IHhvYmosXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gXCJQU1wiKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFNcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7dHlwZS5uYW1lfWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yWE9iamVjdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gYXJnc1sxXTtcbiAgICAgICAgICAgIG5leHQoc2VsZi5oYW5kbGVTZXRGb250KHJlc291cmNlcywgYXJncywgbnVsbCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIuc3RhdGUpLnRoZW4oZnVuY3Rpb24gKGxvYWRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kobG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZTpcbiAgICAgICAgICAgIHZhciBjYWNoZUtleSA9IGFyZ3NbMF0uY2FjaGVLZXk7XG5cbiAgICAgICAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShjYWNoZUtleSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgaW1hZ2U6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGlzSW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICBsb2NhbEltYWdlQ2FjaGUsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYXJyID0gYXJnc1swXTtcbiAgICAgICAgICAgIHZhciBjb21iaW5lZEdseXBocyA9IFtdO1xuICAgICAgICAgICAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICB2YXIgYXJySXRlbSA9IGFycltpXTtcblxuICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShhcnJJdGVtKSkge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGNvbWJpbmVkR2x5cGhzLCBzZWxmLmhhbmRsZVRleHQoYXJySXRlbSwgc3RhdGUpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNOdW0pKGFyckl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY29tYmluZWRHbHlwaHMucHVzaChhcnJJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzWzBdID0gY29tYmluZWRHbHlwaHM7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMubmV4dExpbmUpO1xuICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2hvd1RleHQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nLCBbYXJncy5zaGlmdCgpXSk7XG4gICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nLCBbYXJncy5zaGlmdCgpXSk7XG4gICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29uc3QgY2FjaGVkQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKGFyZ3NbMF0sIHhyZWYsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTtcblxuICAgICAgICAgICAgICBpZiAoY2FjaGVkQ29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNhY2hlZENvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuZXh0KHNlbGYucGFyc2VDb2xvclNwYWNlKHtcbiAgICAgICAgICAgICAgICBjczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBjb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCBjYWNoZWRDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5nZXRDYWNoZWQoYXJnc1swXSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgICAgICAgIGlmIChjYWNoZWRDb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjYWNoZWRDb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbmV4dChzZWxmLnBhcnNlQ29sb3JTcGFjZSh7XG4gICAgICAgICAgICAgICAgY3M6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgICAgICBjcyA9IHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZTtcbiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yOlxuICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtcbiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbEdyYXk6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOlxuICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtcbiAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTjpcbiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuXG4gICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gXCJQYXR0ZXJuXCIpIHtcbiAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaywgbG9jYWxDb2xvclNwYWNlQ2FjaGUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck46XG4gICAgICAgICAgICBjcyA9IHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlO1xuXG4gICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gXCJQYXR0ZXJuXCIpIHtcbiAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hhZGluZ0ZpbGw6XG4gICAgICAgICAgICB2YXIgc2hhZGluZ1JlcyA9IHJlc291cmNlcy5nZXQoXCJTaGFkaW5nXCIpO1xuXG4gICAgICAgICAgICBpZiAoIXNoYWRpbmdSZXMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNoYWRpbmcgPSBzaGFkaW5nUmVzLmdldChhcmdzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIXNoYWRpbmcpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gc2hhZGluZyBvYmplY3QgZm91bmRcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzaGFkaW5nRmlsbCA9IF9wYXR0ZXJuLlBhdHRlcm4ucGFyc2VTaGFkaW5nKHNoYWRpbmcsIG51bGwsIHhyZWYsIHJlc291cmNlcywgc2VsZi5oYW5kbGVyLCBzZWxmLl9wZGZGdW5jdGlvbkZhY3RvcnksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTtcblxuICAgICAgICAgICAgdmFyIHBhdHRlcm5JUiA9IHNoYWRpbmdGaWxsLmdldElSKCk7XG4gICAgICAgICAgICBhcmdzID0gW3BhdHRlcm5JUl07XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaGFkaW5nRmlsbDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgICAgbmFtZSA9IGFyZ3NbMF0ubmFtZTtcblxuICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxHU3RhdGVPYmogPSBsb2NhbEdTdGF0ZUNhY2hlLmdldEJ5TmFtZShuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmoubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtsb2NhbEdTdGF0ZU9ial0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkge1xuICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJHU3RhdGUgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGV4dEdTdGF0ZSA9IHJlc291cmNlcy5nZXQoXCJFeHRHU3RhdGVcIik7XG5cbiAgICAgICAgICAgICAgaWYgKCEoZXh0R1N0YXRlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJFeHRHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBnU3RhdGUgPSBleHRHU3RhdGUuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmICghKGdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2VsZi5zZXRHU3RhdGUoe1xuICAgICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICBnU3RhdGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBuYW1lLFxuICAgICAgICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgICAgIGxvY2FsR1N0YXRlQ2FjaGUsXG4gICAgICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlR1N0YXRlLCByZWplY3RHU3RhdGUpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JFeHRHU3RhdGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzI6XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzM6XG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgIHNlbGYuYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIHBhcnNpbmdUZXh0KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubWFya1BvaW50OlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1hcmtQb2ludFByb3BzOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luQ29tcGF0OlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZENvbXBhdDpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6XG4gICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgRXhwZWN0ZWQgbmFtZSBmb3IgYmVnaW5NYXJrZWRDb250ZW50UHJvcHMgYXJnMD0ke2FyZ3NbMF19YCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXJnc1swXS5uYW1lID09PSBcIk9DXCIpIHtcbiAgICAgICAgICAgICAgbmV4dChzZWxmLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGFyZ3NbMV0sIHJlc291cmNlcykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLCBbXCJPQ1wiLCBkYXRhXSk7XG4gICAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvck1hcmtlZENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhcmdzID0gW2FyZ3NbMF0ubmFtZV07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50OlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoYXJncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiBcIiArIGZuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXCIke3Rhc2submFtZX1cIiBgICsgYHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRUZXh0Q29udGVudCh7XG4gICAgc3RyZWFtLFxuICAgIHRhc2ssXG4gICAgcmVzb3VyY2VzLFxuICAgIHN0YXRlTWFuYWdlciA9IG51bGwsXG4gICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IGZhbHNlLFxuICAgIGNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZSxcbiAgICBzaW5rLFxuICAgIHNlZW5TdHlsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gIH0pIHtcbiAgICByZXNvdXJjZXMgPSByZXNvdXJjZXMgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICBzdGF0ZU1hbmFnZXIgPSBzdGF0ZU1hbmFnZXIgfHwgbmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKCkpO1xuICAgIHZhciBXaGl0ZXNwYWNlUmVnZXhwID0gL1xccy9nO1xuICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH07XG4gICAgdmFyIHRleHRDb250ZW50SXRlbSA9IHtcbiAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgIHN0cjogW10sXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHZlcnRpY2FsOiBmYWxzZSxcbiAgICAgIGxhc3RBZHZhbmNlV2lkdGg6IDAsXG4gICAgICBsYXN0QWR2YW5jZUhlaWdodDogMCxcbiAgICAgIHRleHRBZHZhbmNlU2NhbGU6IDAsXG4gICAgICBzcGFjZVdpZHRoOiAwLFxuICAgICAgZmFrZVNwYWNlTWluOiBJbmZpbml0eSxcbiAgICAgIGZha2VNdWx0aVNwYWNlTWluOiBJbmZpbml0eSxcbiAgICAgIGZha2VNdWx0aVNwYWNlTWF4OiAtMCxcbiAgICAgIHRleHRSdW5CcmVha0FsbG93ZWQ6IGZhbHNlLFxuICAgICAgdHJhbnNmb3JtOiBudWxsLFxuICAgICAgZm9udE5hbWU6IG51bGxcbiAgICB9O1xuICAgIHZhciBTUEFDRV9GQUNUT1IgPSAwLjM7XG4gICAgdmFyIE1VTFRJX1NQQUNFX0ZBQ1RPUiA9IDEuNTtcbiAgICB2YXIgTVVMVElfU1BBQ0VfRkFDVE9SX01BWCA9IDQ7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgIHZhciB4b2JqcyA9IG51bGw7XG4gICAgY29uc3QgZW1wdHlYT2JqZWN0Q2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsSW1hZ2VDYWNoZSgpO1xuICAgIGNvbnN0IGVtcHR5R1N0YXRlQ2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsR1N0YXRlQ2FjaGUoKTtcbiAgICB2YXIgcHJlcHJvY2Vzc29yID0gbmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihzdHJlYW0sIHhyZWYsIHN0YXRlTWFuYWdlcik7XG4gICAgdmFyIHRleHRTdGF0ZTtcblxuICAgIGZ1bmN0aW9uIGVuc3VyZVRleHRDb250ZW50SXRlbSgpIHtcbiAgICAgIGlmICh0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRleHRDb250ZW50SXRlbTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnQgPSB0ZXh0U3RhdGUuZm9udDtcblxuICAgICAgaWYgKCEoZm9udC5sb2FkZWROYW1lIGluIHNlZW5TdHlsZXMpKSB7XG4gICAgICAgIHNlZW5TdHlsZXNbZm9udC5sb2FkZWROYW1lXSA9IHRydWU7XG4gICAgICAgIHRleHRDb250ZW50LnN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0ge1xuICAgICAgICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFsbGJhY2tOYW1lLFxuICAgICAgICAgIGFzY2VudDogZm9udC5hc2NlbnQsXG4gICAgICAgICAgZGVzY2VudDogZm9udC5kZXNjZW50LFxuICAgICAgICAgIHZlcnRpY2FsOiBmb250LnZlcnRpY2FsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRleHRDb250ZW50SXRlbS5mb250TmFtZSA9IGZvbnQubG9hZGVkTmFtZTtcbiAgICAgIHZhciB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTtcblxuICAgICAgaWYgKGZvbnQuaXNUeXBlM0ZvbnQgJiYgdGV4dFN0YXRlLmZvbnRTaXplIDw9IDEgJiYgISgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKHRleHRTdGF0ZS5mb250TWF0cml4LCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCkpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgaWYgKGdseXBoSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIHRzbVszXSAqPSBnbHlwaEhlaWdodCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0cm0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUuY3RtLCBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUudGV4dE1hdHJpeCwgdHNtKSk7XG5cbiAgICAgIHRleHRDb250ZW50SXRlbS50cmFuc2Zvcm0gPSB0cm07XG5cbiAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gTWF0aC5zcXJ0KHRybVsyXSAqIHRybVsyXSArIHRybVszXSAqIHRybVszXSk7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gTWF0aC5zcXJ0KHRybVswXSAqIHRybVswXSArIHRybVsxXSAqIHRybVsxXSk7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0udmVydGljYWwgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgYSA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXTtcbiAgICAgIHZhciBiID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzFdO1xuICAgICAgdmFyIHNjYWxlTGluZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICBhID0gdGV4dFN0YXRlLmN0bVswXTtcbiAgICAgIGIgPSB0ZXh0U3RhdGUuY3RtWzFdO1xuICAgICAgdmFyIHNjYWxlQ3RtWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlID0gc2NhbGVDdG1YICogc2NhbGVMaW5lWDtcbiAgICAgIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoID0gMDtcbiAgICAgIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodCA9IDA7XG4gICAgICB2YXIgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCAvIDEwMDAgKiB0ZXh0U3RhdGUuZm9udFNpemU7XG5cbiAgICAgIGlmIChzcGFjZVdpZHRoKSB7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmZha2VTcGFjZU1pbiA9IHNwYWNlV2lkdGggKiBTUEFDRV9GQUNUT1I7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbiA9IHNwYWNlV2lkdGggKiBNVUxUSV9TUEFDRV9GQUNUT1I7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCA9IHNwYWNlV2lkdGggKiBNVUxUSV9TUEFDRV9GQUNUT1JfTUFYO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCA9ICFmb250LmlzTW9ub3NwYWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlV2lkdGggPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZVNwYWNlTWluID0gSW5maW5pdHk7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbiA9IEluZmluaXR5O1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNYXggPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRleHRDb250ZW50SXRlbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICBpaSA9IHN0ci5sZW5ndGgsXG4gICAgICAgICAgY29kZTtcblxuICAgICAgd2hpbGUgKGkgPCBpaSAmJiAoY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpKSA+PSAweDIwICYmIGNvZGUgPD0gMHg3Zikge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpIDwgaWkgPyBzdHIucmVwbGFjZShXaGl0ZXNwYWNlUmVnZXhwLCBcIiBcIikgOiBzdHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuQmlkaVRyYW5zZm9ybSh0ZXh0Q2h1bmspIHtcbiAgICAgIHZhciBzdHIgPSB0ZXh0Q2h1bmsuc3RyLmpvaW4oXCJcIik7XG4gICAgICB2YXIgYmlkaVJlc3VsdCA9ICgwLCBfYmlkaS5iaWRpKShzdHIsIC0xLCB0ZXh0Q2h1bmsudmVydGljYWwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RyOiBub3JtYWxpemVXaGl0ZXNwYWNlID8gcmVwbGFjZVdoaXRlc3BhY2UoYmlkaVJlc3VsdC5zdHIpIDogYmlkaVJlc3VsdC5zdHIsXG4gICAgICAgIGRpcjogYmlkaVJlc3VsdC5kaXIsXG4gICAgICAgIHdpZHRoOiB0ZXh0Q2h1bmsud2lkdGgsXG4gICAgICAgIGhlaWdodDogdGV4dENodW5rLmhlaWdodCxcbiAgICAgICAgdHJhbnNmb3JtOiB0ZXh0Q2h1bmsudHJhbnNmb3JtLFxuICAgICAgICBmb250TmFtZTogdGV4dENodW5rLmZvbnROYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZm9udE5hbWUsIGZvbnRSZWYpIHtcbiAgICAgIHJldHVybiBzZWxmLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgdGV4dFN0YXRlLmZvbnQgPSB0cmFuc2xhdGVkLmZvbnQ7XG4gICAgICAgIHRleHRTdGF0ZS5mb250TWF0cml4ID0gdHJhbnNsYXRlZC5mb250LmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFRleHRDb250ZW50SXRlbShjaGFycykge1xuICAgICAgdmFyIGZvbnQgPSB0ZXh0U3RhdGUuZm9udDtcbiAgICAgIHZhciB0ZXh0Q2h1bmsgPSBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgIHZhciB3aWR0aCA9IDA7XG4gICAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICAgIHZhciBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHMoY2hhcnMpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaV07XG4gICAgICAgIHZhciBnbHlwaFdpZHRoID0gbnVsbDtcblxuICAgICAgICBpZiAoZm9udC52ZXJ0aWNhbCAmJiBnbHlwaC52bWV0cmljKSB7XG4gICAgICAgICAgZ2x5cGhXaWR0aCA9IGdseXBoLnZtZXRyaWNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdseXBoVW5pY29kZSA9IGdseXBoLnVuaWNvZGU7XG4gICAgICAgIHZhciBOb3JtYWxpemVkVW5pY29kZXMgPSAoMCwgX3VuaWNvZGUuZ2V0Tm9ybWFsaXplZFVuaWNvZGVzKSgpO1xuXG4gICAgICAgIGlmIChOb3JtYWxpemVkVW5pY29kZXNbZ2x5cGhVbmljb2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZ2x5cGhVbmljb2RlID0gTm9ybWFsaXplZFVuaWNvZGVzW2dseXBoVW5pY29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBnbHlwaFVuaWNvZGUgPSAoMCwgX3VuaWNvZGUucmV2ZXJzZUlmUnRsKShnbHlwaFVuaWNvZGUpO1xuICAgICAgICB2YXIgY2hhclNwYWNpbmcgPSB0ZXh0U3RhdGUuY2hhclNwYWNpbmc7XG5cbiAgICAgICAgaWYgKGdseXBoLmlzU3BhY2UpIHtcbiAgICAgICAgICB2YXIgd29yZFNwYWNpbmcgPSB0ZXh0U3RhdGUud29yZFNwYWNpbmc7XG4gICAgICAgICAgY2hhclNwYWNpbmcgKz0gd29yZFNwYWNpbmc7XG5cbiAgICAgICAgICBpZiAod29yZFNwYWNpbmcgPiAwKSB7XG4gICAgICAgICAgICBhZGRGYWtlU3BhY2VzKHdvcmRTcGFjaW5nLCB0ZXh0Q2h1bmsuc3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdHggPSAwO1xuICAgICAgICB2YXIgdHkgPSAwO1xuXG4gICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgIHZhciB3MCA9IGdseXBoV2lkdGggKiB0ZXh0U3RhdGUuZm9udE1hdHJpeFswXTtcbiAgICAgICAgICB0eCA9ICh3MCAqIHRleHRTdGF0ZS5mb250U2l6ZSArIGNoYXJTcGFjaW5nKSAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlO1xuICAgICAgICAgIHdpZHRoICs9IHR4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB3MSA9IGdseXBoV2lkdGggKiB0ZXh0U3RhdGUuZm9udE1hdHJpeFswXTtcbiAgICAgICAgICB0eSA9IHcxICogdGV4dFN0YXRlLmZvbnRTaXplICsgY2hhclNwYWNpbmc7XG4gICAgICAgICAgaGVpZ2h0ICs9IHR5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgodHgsIHR5KTtcbiAgICAgICAgdGV4dENodW5rLnN0ci5wdXNoKGdseXBoVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICB0ZXh0Q2h1bmsubGFzdEFkdmFuY2VXaWR0aCA9IHdpZHRoO1xuICAgICAgICB0ZXh0Q2h1bmsud2lkdGggKz0gd2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0Q2h1bmsubGFzdEFkdmFuY2VIZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRleHRDaHVuay5oZWlnaHQgKz0gTWF0aC5hYnMoaGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleHRDaHVuaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRGYWtlU3BhY2VzKHdpZHRoLCBzdHJCdWYpIHtcbiAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAod2lkdGggPCB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNaW4pIHtcbiAgICAgICAgc3RyQnVmLnB1c2goXCIgXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmYWtlU3BhY2VzID0gTWF0aC5yb3VuZCh3aWR0aCAvIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoKTtcblxuICAgICAgd2hpbGUgKGZha2VTcGFjZXMtLSA+IDApIHtcbiAgICAgICAgc3RyQnVmLnB1c2goXCIgXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCkge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKj0gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICo9IHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlO1xuICAgICAgfVxuXG4gICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENvbnRlbnRJdGVtKSk7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ2h1bmsoKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSB0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGg7XG5cbiAgICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAgIHNpbmsuZW5xdWV1ZSh0ZXh0Q29udGVudCwgbGVuZ3RoKTtcbiAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMgPSBbXTtcbiAgICAgICAgdGV4dENvbnRlbnQuc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdGltZVNsb3RNYW5hZ2VyID0gbmV3IFRpbWVTbG90TWFuYWdlcigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIHNpbmsucmVhZHldKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9O1xuXG4gICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgIHRpbWVTbG90TWFuYWdlci5yZXNldCgpO1xuICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgb3BlcmF0aW9uID0ge30sXG4gICAgICAgICAgYXJncyA9IFtdO1xuXG4gICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgIGFyZ3MubGVuZ3RoID0gMDtcbiAgICAgICAgb3BlcmF0aW9uLmFyZ3MgPSBhcmdzO1xuXG4gICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dFN0YXRlID0gc3RhdGVNYW5hZ2VyLnN0YXRlO1xuICAgICAgICB2YXIgZm4gPSBvcGVyYXRpb24uZm47XG4gICAgICAgIGFyZ3MgPSBvcGVyYXRpb24uYXJncztcbiAgICAgICAgdmFyIGFkdmFuY2UsIGRpZmY7XG5cbiAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnROYW1lQXJnID0gYXJnc1swXS5uYW1lLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplQXJnID0gYXJnc1sxXTtcblxuICAgICAgICAgICAgaWYgKHRleHRTdGF0ZS5mb250ICYmIGZvbnROYW1lQXJnID09PSB0ZXh0U3RhdGUuZm9udE5hbWUgJiYgZm9udFNpemVBcmcgPT09IHRleHRTdGF0ZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5mb250TmFtZSA9IGZvbnROYW1lQXJnO1xuICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZm9udFNpemVBcmc7XG4gICAgICAgICAgICBuZXh0KGhhbmRsZVNldEZvbnQoZm9udE5hbWVBcmcsIG51bGwpKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0UmlzZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEhTY2FsZTpcbiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dEhTY2FsZSA9IGFyZ3NbMF0gLyAxMDA7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmc6XG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLmxlYWRpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVGV4dDpcbiAgICAgICAgICAgIHZhciBpc1NhbWVUZXh0TGluZSA9ICF0ZXh0U3RhdGUuZm9udCA/IGZhbHNlIDogKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsID8gYXJnc1swXSA6IGFyZ3NbMV0pID09PSAwO1xuICAgICAgICAgICAgYWR2YW5jZSA9IGFyZ3NbMF0gLSBhcmdzWzFdO1xuXG4gICAgICAgICAgICBpZiAoY29tYmluZVRleHRJdGVtcyAmJiBpc1NhbWVUZXh0TGluZSAmJiB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgJiYgYWR2YW5jZSA+IDAgJiYgYWR2YW5jZSA8PSB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNYXgpIHtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYXJnc1swXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoO1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IGFyZ3NbMV0gLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQ7XG4gICAgICAgICAgICAgIGRpZmYgPSBhcmdzWzBdIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlV2lkdGggLSAoYXJnc1sxXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodCk7XG4gICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OlxuICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dE1hdHJpeCA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgIGFkdmFuY2UgPSB0ZXh0U3RhdGUuY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcblxuICAgICAgICAgICAgaWYgKGNvbWJpbmVUZXh0SXRlbXMgJiYgYWR2YW5jZSAhPT0gbnVsbCAmJiB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgJiYgYWR2YW5jZS52YWx1ZSA+IDAgJiYgYWR2YW5jZS52YWx1ZSA8PSB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNYXgpIHtcbiAgICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGFkdmFuY2Uud2lkdGgsIGFkdmFuY2UuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2Uud2lkdGggLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aDtcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhZHZhbmNlLmhlaWdodCAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodDtcbiAgICAgICAgICAgICAgZGlmZiA9IGFkdmFuY2Uud2lkdGggLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aCAtIChhZHZhbmNlLmhlaWdodCAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZUhlaWdodCk7XG4gICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnNldFRleHRNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nOlxuICAgICAgICAgICAgdGV4dFN0YXRlLmNoYXJTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmc6XG4gICAgICAgICAgICB0ZXh0U3RhdGUud29yZFNwYWNpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpdGVtcyA9IGFyZ3NbMF07XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbXNbal0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShpdGVtc1tqXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShpdGVtc1tqXSkpIHtcbiAgICAgICAgICAgICAgICBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICBhZHZhbmNlID0gaXRlbXNbal0gKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgIHZhciBicmVha1RleHRSdW4gPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYWR2YW5jZTtcbiAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICBicmVha1RleHRSdW4gPSB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCAmJiBhZHZhbmNlID4gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4O1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYWR2YW5jZSA9IC1hZHZhbmNlO1xuICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYWR2YW5jZSAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgob2Zmc2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrVGV4dFJ1biA9IHRleHRDb250ZW50SXRlbS50ZXh0UnVuQnJlYWtBbGxvd2VkICYmIGFkdmFuY2UgPiB0ZXh0Q29udGVudEl0ZW0uZmFrZU11bHRpU3BhY2VNYXg7XG5cbiAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtUZXh0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCArPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFkdmFuY2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgICBhZGRGYWtlU3BhY2VzKGFkdmFuY2UsIHRleHRDb250ZW50SXRlbS5zdHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnVpbGRUZXh0Q29udGVudEl0ZW0oYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7XG4gICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgdGV4dFN0YXRlLndvcmRTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludFhPYmplY3Q6XG4gICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuXG4gICAgICAgICAgICBpZiAoIXhvYmpzKSB7XG4gICAgICAgICAgICAgIHhvYmpzID0gcmVzb3VyY2VzLmdldChcIlhPYmplY3RcIikgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChuYW1lICYmIGVtcHR5WE9iamVjdENhY2hlLmdldEJ5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHtcbiAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlSZWYoeG9iaikpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgIT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgZW1wdHlYT2JqZWN0Q2FjaGUuc2V0KG5hbWUsIHhvYmouZGljdC5vYmpJZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgY29uc3QgeE9ialN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoY3VycmVudFN0YXRlKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF0cml4ID0geG9iai5kaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgIHhPYmpTdGF0ZU1hbmFnZXIudHJhbnNmb3JtKG1hdHJpeCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2lua1dyYXBwZXIgPSB7XG4gICAgICAgICAgICAgICAgZW5xdWV1ZUludm9rZWQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgZW5xdWV1ZShjaHVuaywgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlSW52b2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2luay5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpbmsucmVhZHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyOiB4T2JqU3RhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgICAgICAgICBzaW5rOiBzaW5rV3JhcHBlcixcbiAgICAgICAgICAgICAgICBzZWVuU3R5bGVzXG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghc2lua1dyYXBwZXIuZW5xdWV1ZUludm9rZWQpIHtcbiAgICAgICAgICAgICAgICAgIGVtcHR5WE9iamVjdENhY2hlLnNldChuYW1lLCB4b2JqLmRpY3Qub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgIH0sIHJlamVjdFhPYmplY3QpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChuYW1lICYmIGVtcHR5R1N0YXRlQ2FjaGUuZ2V0QnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlR1N0YXRlLCByZWplY3RHU3RhdGUpIHtcbiAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKGV4dEdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIShnU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZUZvbnQgPSBnU3RhdGUuZ2V0KFwiRm9udFwiKTtcblxuICAgICAgICAgICAgICBpZiAoIWdTdGF0ZUZvbnQpIHtcbiAgICAgICAgICAgICAgICBlbXB0eUdTdGF0ZUNhY2hlLnNldChuYW1lLCBnU3RhdGUub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVHU3RhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udFNpemUgPSBnU3RhdGVGb250WzFdO1xuICAgICAgICAgICAgICBoYW5kbGVTZXRGb250KG51bGwsIGdTdGF0ZUZvbnRbMF0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGggPj0gc2luay5kZXNpcmVkU2l6ZSkge1xuICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgIG5leHQoZGVmZXJyZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXCIke3Rhc2submFtZX1cIiBgICsgYHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgfVxuXG4gIGV4dHJhY3REYXRhU3RydWN0dXJlcyhkaWN0LCBiYXNlRGljdCwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IGNpZFRvR2lkQnl0ZXM7XG4gICAgdmFyIHRvVW5pY29kZSA9IGRpY3QuZ2V0KFwiVG9Vbmljb2RlXCIpIHx8IGJhc2VEaWN0LmdldChcIlRvVW5pY29kZVwiKTtcbiAgICB2YXIgdG9Vbmljb2RlUHJvbWlzZSA9IHRvVW5pY29kZSA/IHRoaXMucmVhZFRvVW5pY29kZSh0b1VuaWNvZGUpIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIHZhciBjaWRTeXN0ZW1JbmZvID0gZGljdC5nZXQoXCJDSURTeXN0ZW1JbmZvXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY2lkU3lzdGVtSW5mbykpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvID0ge1xuICAgICAgICAgIHJlZ2lzdHJ5OiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNpZFN5c3RlbUluZm8uZ2V0KFwiUmVnaXN0cnlcIikpLFxuICAgICAgICAgIG9yZGVyaW5nOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNpZFN5c3RlbUluZm8uZ2V0KFwiT3JkZXJpbmdcIikpLFxuICAgICAgICAgIHN1cHBsZW1lbnQ6IGNpZFN5c3RlbUluZm8uZ2V0KFwiU3VwcGxlbWVudFwiKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY2lkVG9HaWRNYXAgPSBkaWN0LmdldChcIkNJRFRvR0lETWFwXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjaWRUb0dpZE1hcCkpIHtcbiAgICAgICAgY2lkVG9HaWRCeXRlcyA9IGNpZFRvR2lkTWFwLmdldEJ5dGVzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRpZmZlcmVuY2VzID0gW107XG4gICAgdmFyIGJhc2VFbmNvZGluZ05hbWUgPSBudWxsO1xuICAgIHZhciBlbmNvZGluZztcblxuICAgIGlmIChkaWN0LmhhcyhcIkVuY29kaW5nXCIpKSB7XG4gICAgICBlbmNvZGluZyA9IGRpY3QuZ2V0KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShlbmNvZGluZykpIHtcbiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLmdldChcIkJhc2VFbmNvZGluZ1wiKTtcbiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VFbmNvZGluZ05hbWUpID8gYmFzZUVuY29kaW5nTmFtZS5uYW1lIDogbnVsbDtcblxuICAgICAgICBpZiAoZW5jb2RpbmcuaGFzKFwiRGlmZmVyZW5jZXNcIikpIHtcbiAgICAgICAgICB2YXIgZGlmZkVuY29kaW5nID0gZW5jb2RpbmcuZ2V0KFwiRGlmZmVyZW5jZXNcIik7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGRpZmZFbmNvZGluZy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHhyZWYuZmV0Y2hJZlJlZihkaWZmRW5jb2Rpbmdbal0pO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShkYXRhKSkge1xuICAgICAgICAgICAgICBpbmRleCA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRhdGEpKSB7XG4gICAgICAgICAgICAgIGRpZmZlcmVuY2VzW2luZGV4KytdID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZGF0YX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRW5jb2RpbmcgaXMgbm90IGEgTmFtZSBub3IgYSBEaWN0XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSAhPT0gXCJNYWNSb21hbkVuY29kaW5nXCIgJiYgYmFzZUVuY29kaW5nTmFtZSAhPT0gXCJNYWNFeHBlcnRFbmNvZGluZ1wiICYmIGJhc2VFbmNvZGluZ05hbWUgIT09IFwiV2luQW5zaUVuY29kaW5nXCIpIHtcbiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJhc2VFbmNvZGluZ05hbWUpIHtcbiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nID0gKDAsIF9lbmNvZGluZ3MuZ2V0RW5jb2RpbmcpKGJhc2VFbmNvZGluZ05hbWUpLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljKTtcbiAgICAgIHZhciBpc05vbnN5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHMuRm9udEZsYWdzLk5vbnN5bWJvbGljKTtcbiAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgICBpZiAocHJvcGVydGllcy50eXBlID09PSBcIlRydWVUeXBlXCIgJiYgIWlzTm9uc3ltYm9saWNGb250KSB7XG4gICAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5XaW5BbnNpRW5jb2Rpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1N5bWJvbGljRm9udCkge1xuICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuTWFjUm9tYW5FbmNvZGluZztcblxuICAgICAgICBpZiAoIXByb3BlcnRpZXMuZmlsZSkge1xuICAgICAgICAgIGlmICgvU3ltYm9sL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3ltYm9sU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHN8V2luZ2RpbmdzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5kaWZmZXJlbmNlcyA9IGRpZmZlcmVuY2VzO1xuICAgIHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSA9IGJhc2VFbmNvZGluZ05hbWU7XG4gICAgcHJvcGVydGllcy5oYXNFbmNvZGluZyA9ICEhYmFzZUVuY29kaW5nTmFtZSB8fCBkaWZmZXJlbmNlcy5sZW5ndGggPiAwO1xuICAgIHByb3BlcnRpZXMuZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHRvVW5pY29kZVByb21pc2UudGhlbihyZWFkVG9Vbmljb2RlID0+IHtcbiAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gcmVhZFRvVW5pY29kZTtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgIH0pLnRoZW4oYnVpbHRUb1VuaWNvZGUgPT4ge1xuICAgICAgcHJvcGVydGllcy50b1VuaWNvZGUgPSBidWlsdFRvVW5pY29kZTtcblxuICAgICAgaWYgKGNpZFRvR2lkQnl0ZXMpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRUb0dpZE1hcCA9IHRoaXMucmVhZENpZFRvR2lkTWFwKGNpZFRvR2lkQnl0ZXMsIGJ1aWx0VG9Vbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSk7XG4gIH1cblxuICBfYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMsIGZvcmNlR2x5cGhzID0gZmFsc2UpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghcHJvcGVydGllcy5jb21wb3NpdGUsIFwiTXVzdCBiZSBhIHNpbXBsZSBmb250LlwiKTtcbiAgICBjb25zdCB0b1VuaWNvZGUgPSBbXTtcbiAgICBjb25zdCBlbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCk7XG4gICAgY29uc3QgYmFzZUVuY29kaW5nTmFtZSA9IHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZTtcbiAgICBjb25zdCBkaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJjb2RlIGluIGRpZmZlcmVuY2VzKSB7XG4gICAgICBjb25zdCBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyY29kZV07XG5cbiAgICAgIGlmIChnbHlwaE5hbWUgPT09IFwiLm5vdGRlZlwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbmNvZGluZ1tjaGFyY29kZV0gPSBnbHlwaE5hbWU7XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJjb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICBsZXQgZ2x5cGhOYW1lID0gZW5jb2RpbmdbY2hhcmNvZGVdO1xuXG4gICAgICBpZiAoZ2x5cGhOYW1lID09PSBcIlwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgY29kZSA9IDA7XG5cbiAgICAgICAgc3dpdGNoIChnbHlwaE5hbWVbMF0pIHtcbiAgICAgICAgICBjYXNlIFwiR1wiOlxuICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGdseXBoTmFtZS5zdWJzdHJpbmcoMSksIDE2KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPT09IDUpIHtcbiAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGdseXBoTmFtZS5zdWJzdHJpbmcoMSksIDE2KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ1wiOlxuICAgICAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgICAgICBpZiAoZ2x5cGhOYW1lLmxlbmd0aCA+PSAzICYmIGdseXBoTmFtZS5sZW5ndGggPD0gNCkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RlU3RyID0gZ2x5cGhOYW1lLnN1YnN0cmluZygxKTtcblxuICAgICAgICAgICAgICBpZiAoZm9yY2VHbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gcGFyc2VJbnQoY29kZVN0ciwgMTYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29kZSA9ICtjb2RlU3RyO1xuXG4gICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oY29kZSkgJiYgTnVtYmVyLmlzSW50ZWdlcihwYXJzZUludChjb2RlU3RyLCAxNikpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkU2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvZGUgPSB1bmljb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA+IDAgJiYgY29kZSA8PSAweDEwZmZmZiAmJiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpKSB7XG4gICAgICAgICAgaWYgKGJhc2VFbmNvZGluZ05hbWUgJiYgY29kZSA9PT0gK2NoYXJjb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoYmFzZUVuY29kaW5nTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmcgJiYgKGdseXBoTmFtZSA9IGJhc2VFbmNvZGluZ1tjaGFyY29kZV0pKSB7XG4gICAgICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZShnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcCh0b1VuaWNvZGUpO1xuICB9XG5cbiAgYnVpbGRUb1VuaWNvZGUocHJvcGVydGllcykge1xuICAgIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgPSAhIXByb3BlcnRpZXMudG9Vbmljb2RlICYmIHByb3BlcnRpZXMudG9Vbmljb2RlLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzLmNvbXBvc2l0ZSAmJiBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7XG4gICAgICAgIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgPSB0aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocHJvcGVydGllcy50b1VuaWNvZGUpO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5ID09PSBcIkFkb2JlXCIgJiYgKHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJHQjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiQ05TMVwiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJKYXBhbjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiS29yZWExXCIpKSkge1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ucmVnaXN0cnk7XG4gICAgICBjb25zdCBvcmRlcmluZyA9IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZztcblxuICAgICAgY29uc3QgdWNzMkNNYXBOYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQocmVnaXN0cnkgKyBcIi1cIiArIG9yZGVyaW5nICsgXCItVUNTMlwiKTtcblxuICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgIGVuY29kaW5nOiB1Y3MyQ01hcE5hbWUsXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAodWNzMkNNYXApIHtcbiAgICAgICAgY29uc3QgY01hcCA9IHByb3BlcnRpZXMuY01hcDtcbiAgICAgICAgY29uc3QgdG9Vbmljb2RlID0gW107XG4gICAgICAgIGNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhcmNvZGUsIGNpZCkge1xuICAgICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdWNzMiA9IHVjczJDTWFwLmxvb2t1cChjaWQpO1xuXG4gICAgICAgICAgaWYgKHVjczIpIHtcbiAgICAgICAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCh1Y3MyLmNoYXJDb2RlQXQoMCkgPDwgOCkgKyB1Y3MyLmNoYXJDb2RlQXQoMSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcCh0b1VuaWNvZGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX2ZvbnRzLklkZW50aXR5VG9Vbmljb2RlTWFwKHByb3BlcnRpZXMuZmlyc3RDaGFyLCBwcm9wZXJ0aWVzLmxhc3RDaGFyKSk7XG4gIH1cblxuICByZWFkVG9Vbmljb2RlKHRvVW5pY29kZSkge1xuICAgIHZhciBjbWFwT2JqID0gdG9Vbmljb2RlO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNtYXBPYmopKSB7XG4gICAgICByZXR1cm4gX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgZW5jb2Rpbmc6IGNtYXBPYmosXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICBpZiAoY21hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkge1xuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4ZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY21hcE9iaikpIHtcbiAgICAgIHJldHVybiBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY21hcE9iaixcbiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLFxuICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjbWFwKSB7XG4gICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfZm9udHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCwgMHhmZmZmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXAgPSBuZXcgQXJyYXkoY21hcC5sZW5ndGgpO1xuICAgICAgICBjbWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCB0b2tlbikge1xuICAgICAgICAgIHZhciBzdHIgPSBbXTtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdG9rZW4ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgIHZhciB3MSA9IHRva2VuLmNoYXJDb2RlQXQoaykgPDwgOCB8IHRva2VuLmNoYXJDb2RlQXQoayArIDEpO1xuXG4gICAgICAgICAgICBpZiAoKHcxICYgMHhmODAwKSAhPT0gMHhkODAwKSB7XG4gICAgICAgICAgICAgIHN0ci5wdXNoKHcxKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGsgKz0gMjtcbiAgICAgICAgICAgIHZhciB3MiA9IHRva2VuLmNoYXJDb2RlQXQoaykgPDwgOCB8IHRva2VuLmNoYXJDb2RlQXQoayArIDEpO1xuICAgICAgICAgICAgc3RyLnB1c2goKCh3MSAmIDB4M2ZmKSA8PCAxMCkgKyAodzIgJiAweDNmZikgKyAweDEwMDAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXBbY2hhckNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBfZm9udHMuVG9Vbmljb2RlTWFwKG1hcCk7XG4gICAgICB9LCByZWFzb24gPT4ge1xuICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRUb1VuaWNvZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICByZWFkQ2lkVG9HaWRNYXAoZ2x5cGhzRGF0YSwgdG9Vbmljb2RlKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZ2x5cGhzRGF0YS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICB2YXIgZ2x5cGhJRCA9IGdseXBoc0RhdGFbaisrXSA8PCA4IHwgZ2x5cGhzRGF0YVtqXTtcbiAgICAgIGNvbnN0IGNvZGUgPSBqID4+IDE7XG5cbiAgICAgIGlmIChnbHlwaElEID09PSAwICYmICF0b1VuaWNvZGUuaGFzKGNvZGUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbY29kZV0gPSBnbHlwaElEO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBleHRyYWN0V2lkdGhzKGRpY3QsIGRlc2NyaXB0b3IsIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICB2YXIgZ2x5cGhzV2lkdGhzID0gW107XG4gICAgdmFyIGRlZmF1bHRXaWR0aCA9IDA7XG4gICAgdmFyIGdseXBoc1ZNZXRyaWNzID0gW107XG4gICAgdmFyIGRlZmF1bHRWTWV0cmljcztcbiAgICB2YXIgaSwgaWksIGosIGpqLCBzdGFydCwgY29kZSwgd2lkdGhzO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcyhcIkRXXCIpID8gZGljdC5nZXQoXCJEV1wiKSA6IDEwMDA7XG4gICAgICB3aWR0aHMgPSBkaWN0LmdldChcIldcIik7XG5cbiAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpKytdKTtcbiAgICAgICAgICBjb2RlID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2RlKSkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb2RlLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW3N0YXJ0KytdID0geHJlZi5mZXRjaElmUmVmKGNvZGVbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzWysraV0pO1xuXG4gICAgICAgICAgICBmb3IgKGogPSBzdGFydDsgaiA8PSBjb2RlOyBqKyspIHtcbiAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW2pdID0gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLnZlcnRpY2FsKSB7XG4gICAgICAgIHZhciB2bWV0cmljcyA9IGRpY3QuZ2V0QXJyYXkoXCJEVzJcIikgfHwgWzg4MCwgLTEwMDBdO1xuICAgICAgICBkZWZhdWx0Vk1ldHJpY3MgPSBbdm1ldHJpY3NbMV0sIGRlZmF1bHRXaWR0aCAqIDAuNSwgdm1ldHJpY3NbMF1dO1xuICAgICAgICB2bWV0cmljcyA9IGRpY3QuZ2V0KFwiVzJcIik7XG5cbiAgICAgICAgaWYgKHZtZXRyaWNzKSB7XG4gICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB2bWV0cmljcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBzdGFydCA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpKytdKTtcbiAgICAgICAgICAgIGNvZGUgPSB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbaV0pO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2RlKSkge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvZGUubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW3N0YXJ0KytdID0gW3hyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqKytdKSwgeHJlZi5mZXRjaElmUmVmKGNvZGVbal0pXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHZtZXRyaWMgPSBbeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pLCB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSksIHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKV07XG5cbiAgICAgICAgICAgICAgZm9yIChqID0gc3RhcnQ7IGogPD0gY29kZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbal0gPSB2bWV0cmljO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdENoYXIgPSBwcm9wZXJ0aWVzLmZpcnN0Q2hhcjtcbiAgICAgIHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpO1xuXG4gICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgIGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGdseXBoc1dpZHRoc1tqKytdID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0V2lkdGggPSBwYXJzZUZsb2F0KGRlc2NyaXB0b3IuZ2V0KFwiTWlzc2luZ1dpZHRoXCIpKSB8fCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGJhc2VGb250TmFtZSA9IGRpY3QuZ2V0KFwiQmFzZUZvbnRcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VGb250TmFtZSkpIHtcbiAgICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGJhc2VGb250TmFtZS5uYW1lKTtcbiAgICAgICAgICBnbHlwaHNXaWR0aHMgPSB0aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG1ldHJpY3Mud2lkdGhzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBkZWZhdWx0V2lkdGggPSBtZXRyaWNzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc01vbm9zcGFjZSA9IHRydWU7XG4gICAgdmFyIGZpcnN0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG5cbiAgICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgIHZhciBnbHlwaFdpZHRoID0gZ2x5cGhzV2lkdGhzW2dseXBoXTtcblxuICAgICAgaWYgKCFnbHlwaFdpZHRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpcnN0V2lkdGgpIHtcbiAgICAgICAgZmlyc3RXaWR0aCA9IGdseXBoV2lkdGg7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RXaWR0aCAhPT0gZ2x5cGhXaWR0aCkge1xuICAgICAgICBpc01vbm9zcGFjZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNNb25vc3BhY2UpIHtcbiAgICAgIHByb3BlcnRpZXMuZmxhZ3MgfD0gX2ZvbnRzLkZvbnRGbGFncy5GaXhlZFBpdGNoO1xuICAgIH1cblxuICAgIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoID0gZGVmYXVsdFdpZHRoO1xuICAgIHByb3BlcnRpZXMud2lkdGhzID0gZ2x5cGhzV2lkdGhzO1xuICAgIHByb3BlcnRpZXMuZGVmYXVsdFZNZXRyaWNzID0gZGVmYXVsdFZNZXRyaWNzO1xuICAgIHByb3BlcnRpZXMudm1ldHJpY3MgPSBnbHlwaHNWTWV0cmljcztcbiAgfVxuXG4gIGlzU2VyaWZGb250KGJhc2VGb250TmFtZSkge1xuICAgIHZhciBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgIHJldHVybiBmb250TmFtZVdvU3R5bGUgaW4gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTZXJpZkZvbnRzKSgpIHx8IGZvbnROYW1lV29TdHlsZS5zZWFyY2goL3NlcmlmL2dpKSAhPT0gLTE7XG4gIH1cblxuICBnZXRCYXNlRm9udE1ldHJpY3MobmFtZSkge1xuICAgIHZhciBkZWZhdWx0V2lkdGggPSAwO1xuICAgIHZhciB3aWR0aHMgPSBbXTtcbiAgICB2YXIgbW9ub3NwYWNlID0gZmFsc2U7XG4gICAgdmFyIHN0ZEZvbnRNYXAgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN0ZEZvbnRNYXApKCk7XG4gICAgdmFyIGxvb2t1cE5hbWUgPSBzdGRGb250TWFwW25hbWVdIHx8IG5hbWU7XG4gICAgdmFyIE1ldHJpY3MgPSAoMCwgX21ldHJpY3MuZ2V0TWV0cmljcykoKTtcblxuICAgIGlmICghKGxvb2t1cE5hbWUgaW4gTWV0cmljcykpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VyaWZGb250KG5hbWUpKSB7XG4gICAgICAgIGxvb2t1cE5hbWUgPSBcIlRpbWVzLVJvbWFuXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb29rdXBOYW1lID0gXCJIZWx2ZXRpY2FcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZ2x5cGhXaWR0aHMgPSBNZXRyaWNzW2xvb2t1cE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc051bSkoZ2x5cGhXaWR0aHMpKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBnbHlwaFdpZHRocztcbiAgICAgIG1vbm9zcGFjZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRocyA9IGdseXBoV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIG1vbm9zcGFjZSxcbiAgICAgIHdpZHRoc1xuICAgIH07XG4gIH1cblxuICBidWlsZENoYXJDb2RlVG9XaWR0aCh3aWR0aHNCeUdseXBoTmFtZSwgcHJvcGVydGllcykge1xuICAgIHZhciB3aWR0aHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBkaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgdmFyIGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgICBmb3IgKHZhciBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICBpZiAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXSkge1xuICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyQ29kZSBpbiBlbmNvZGluZyAmJiB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dKSB7XG4gICAgICAgIHdpZHRoc1tjaGFyQ29kZV0gPSB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGhzO1xuICB9XG5cbiAgcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICB2YXIgYmFzZURpY3QgPSBkaWN0O1xuICAgIHZhciB0eXBlID0gZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmb250IFN1YnR5cGVcIik7XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvc2l0ZSA9IGZhbHNlO1xuICAgIHZhciB1aW50OGFycmF5O1xuXG4gICAgaWYgKHR5cGUubmFtZSA9PT0gXCJUeXBlMFwiKSB7XG4gICAgICB2YXIgZGYgPSBkaWN0LmdldChcIkRlc2NlbmRhbnRGb250c1wiKTtcblxuICAgICAgaWYgKCFkZikge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgfVxuXG4gICAgICBkaWN0ID0gQXJyYXkuaXNBcnJheShkZikgPyB0aGlzLnhyZWYuZmV0Y2hJZlJlZihkZlswXSkgOiBkZjtcbiAgICAgIHR5cGUgPSBkaWN0LmdldChcIlN1YnR5cGVcIik7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmb250IFN1YnR5cGVcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbXBvc2l0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkaWN0LmdldChcIkZvbnREZXNjcmlwdG9yXCIpO1xuXG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIHZhciBoYXNoID0gbmV3IF9tdXJtdXJoYXNoLk11cm11ckhhc2gzXzY0KCk7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBiYXNlRGljdC5nZXRSYXcoXCJFbmNvZGluZ1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVuY29kaW5nKSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbmNvZGluZykpIHtcbiAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVuY29kaW5nLmdldFJhd1ZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgICAgdmFyIGRpZmZMZW5ndGggPSBlbnRyeS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgZGlmZkJ1ZiA9IG5ldyBBcnJheShkaWZmTGVuZ3RoKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkaWZmTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgdmFyIGRpZmZFbnRyeSA9IGVudHJ5W2pdO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS5uYW1lO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoZGlmZkVudHJ5KSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGRpZmZFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBkaWZmQnVmW2pdID0gZGlmZkVudHJ5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBkaWN0LmdldChcIkZpcnN0Q2hhclwiKSB8fCAwO1xuICAgICAgY29uc3QgbGFzdENoYXIgPSBkaWN0LmdldChcIkxhc3RDaGFyXCIpIHx8IChjb21wb3NpdGUgPyAweGZmZmYgOiAweGZmKTtcbiAgICAgIGhhc2gudXBkYXRlKGAke2ZpcnN0Q2hhcn0tJHtsYXN0Q2hhcn1gKTtcbiAgICAgIHZhciB0b1VuaWNvZGUgPSBkaWN0LmdldChcIlRvVW5pY29kZVwiKSB8fCBiYXNlRGljdC5nZXQoXCJUb1VuaWNvZGVcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHRvVW5pY29kZSkpIHtcbiAgICAgICAgdmFyIHN0cmVhbSA9IHRvVW5pY29kZS5zdHIgfHwgdG9Vbmljb2RlO1xuICAgICAgICB1aW50OGFycmF5ID0gc3RyZWFtLmJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KHN0cmVhbS5idWZmZXIuYnVmZmVyLCAwLCBzdHJlYW0uYnVmZmVyTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KHN0cmVhbS5ieXRlcy5idWZmZXIsIHN0cmVhbS5zdGFydCwgc3RyZWFtLmVuZCAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgIGhhc2gudXBkYXRlKHVpbnQ4YXJyYXkpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgIGhhc2gudXBkYXRlKHRvVW5pY29kZS5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpIHx8IGJhc2VEaWN0LmdldChcIldpZHRoc1wiKTtcblxuICAgICAgaWYgKHdpZHRocykge1xuICAgICAgICB1aW50OGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KHdpZHRocykuYnVmZmVyKTtcbiAgICAgICAgaGFzaC51cGRhdGUodWludDhhcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBkaWN0LFxuICAgICAgYmFzZURpY3QsXG4gICAgICBjb21wb3NpdGUsXG4gICAgICB0eXBlOiB0eXBlLm5hbWUsXG4gICAgICBoYXNoOiBoYXNoID8gaGFzaC5oZXhkaWdlc3QoKSA6IFwiXCJcbiAgICB9O1xuICB9XG5cbiAgdHJhbnNsYXRlRm9udChwcmVFdmFsdWF0ZWRGb250KSB7XG4gICAgdmFyIGJhc2VEaWN0ID0gcHJlRXZhbHVhdGVkRm9udC5iYXNlRGljdDtcbiAgICB2YXIgZGljdCA9IHByZUV2YWx1YXRlZEZvbnQuZGljdDtcbiAgICB2YXIgY29tcG9zaXRlID0gcHJlRXZhbHVhdGVkRm9udC5jb21wb3NpdGU7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcmVFdmFsdWF0ZWRGb250LmRlc2NyaXB0b3I7XG4gICAgdmFyIHR5cGUgPSBwcmVFdmFsdWF0ZWRGb250LnR5cGU7XG4gICAgdmFyIG1heENoYXJJbmRleCA9IGNvbXBvc2l0ZSA/IDB4ZmZmZiA6IDB4ZmY7XG4gICAgdmFyIHByb3BlcnRpZXM7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gZGljdC5nZXQoXCJGaXJzdENoYXJcIikgfHwgMDtcbiAgICBjb25zdCBsYXN0Q2hhciA9IGRpY3QuZ2V0KFwiTGFzdENoYXJcIikgfHwgbWF4Q2hhckluZGV4O1xuXG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICBpZiAodHlwZSA9PT0gXCJUeXBlM1wiKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdChudWxsKTtcbiAgICAgICAgZGVzY3JpcHRvci5zZXQoXCJGb250TmFtZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldCh0eXBlKSk7XG4gICAgICAgIGRlc2NyaXB0b3Iuc2V0KFwiRm9udEJCb3hcIiwgZGljdC5nZXRBcnJheShcIkZvbnRCQm94XCIpIHx8IFswLCAwLCAwLCAwXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoXCJCYXNlRm9udFwiKTtcblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VGb250TmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2VGb250TmFtZSA9IGJhc2VGb250TmFtZS5uYW1lLnJlcGxhY2UoL1ssX10vZywgXCItXCIpO1xuICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGJhc2VGb250TmFtZSk7XG4gICAgICAgIHZhciBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICB2YXIgZmxhZ3MgPSAodGhpcy5pc1NlcmlmRm9udChmb250TmFtZVdvU3R5bGUpID8gX2ZvbnRzLkZvbnRGbGFncy5TZXJpZiA6IDApIHwgKG1ldHJpY3MubW9ub3NwYWNlID8gX2ZvbnRzLkZvbnRGbGFncy5GaXhlZFBpdGNoIDogMCkgfCAoKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTeW1ib2xzRm9udHMpKClbZm9udE5hbWVXb1N0eWxlXSA/IF9mb250cy5Gb250RmxhZ3MuU3ltYm9saWMgOiBfZm9udHMuRm9udEZsYWdzLk5vbnN5bWJvbGljKTtcbiAgICAgICAgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIG5hbWU6IGJhc2VGb250TmFtZSxcbiAgICAgICAgICB3aWR0aHM6IG1ldHJpY3Mud2lkdGhzLFxuICAgICAgICAgIGRlZmF1bHRXaWR0aDogbWV0cmljcy5kZWZhdWx0V2lkdGgsXG4gICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgZmlyc3RDaGFyLFxuICAgICAgICAgIGxhc3RDaGFyXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihuZXdQcm9wZXJ0aWVzID0+IHtcbiAgICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgbGV0IGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHdpZHRocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIGdseXBoV2lkdGhzW2orK10gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IGdseXBoV2lkdGhzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IHRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobWV0cmljcy53aWR0aHMsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLkZvbnQoYmFzZUZvbnROYW1lLCBudWxsLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZvbnROYW1lID0gZGVzY3JpcHRvci5nZXQoXCJGb250TmFtZVwiKTtcbiAgICB2YXIgYmFzZUZvbnQgPSBkaWN0LmdldChcIkJhc2VGb250XCIpO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9udE5hbWUpKSB7XG4gICAgICBmb250TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShiYXNlRm9udCkpIHtcbiAgICAgIGJhc2VGb250ID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoYmFzZUZvbnQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlICE9PSBcIlR5cGUzXCIpIHtcbiAgICAgIHZhciBmb250TmFtZVN0ciA9IGZvbnROYW1lICYmIGZvbnROYW1lLm5hbWU7XG4gICAgICB2YXIgYmFzZUZvbnRTdHIgPSBiYXNlRm9udCAmJiBiYXNlRm9udC5uYW1lO1xuXG4gICAgICBpZiAoZm9udE5hbWVTdHIgIT09IGJhc2VGb250U3RyKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgVGhlIEZvbnREZXNjcmlwdG9yXFwncyBGb250TmFtZSBpcyBcIiR7Zm9udE5hbWVTdHJ9XCIgYnV0IGAgKyBgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBGb250XFwncyBCYXNlRm9udCBcIiR7YmFzZUZvbnRTdHJ9XCIuYCk7XG5cbiAgICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIGJhc2VGb250U3RyLnN0YXJ0c1dpdGgoZm9udE5hbWVTdHIpKSB7XG4gICAgICAgICAgZm9udE5hbWUgPSBiYXNlRm9udDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvbnROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmb250IG5hbWVcIik7XG4gICAgfVxuXG4gICAgdmFyIGZvbnRGaWxlID0gZGVzY3JpcHRvci5nZXQoXCJGb250RmlsZVwiLCBcIkZvbnRGaWxlMlwiLCBcIkZvbnRGaWxlM1wiKTtcblxuICAgIGlmIChmb250RmlsZSkge1xuICAgICAgaWYgKGZvbnRGaWxlLmRpY3QpIHtcbiAgICAgICAgdmFyIHN1YnR5cGUgPSBmb250RmlsZS5kaWN0LmdldChcIlN1YnR5cGVcIik7XG5cbiAgICAgICAgaWYgKHN1YnR5cGUpIHtcbiAgICAgICAgICBzdWJ0eXBlID0gc3VidHlwZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxlbmd0aDEgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDFcIik7XG4gICAgICAgIHZhciBsZW5ndGgyID0gZm9udEZpbGUuZGljdC5nZXQoXCJMZW5ndGgyXCIpO1xuICAgICAgICB2YXIgbGVuZ3RoMyA9IGZvbnRGaWxlLmRpY3QuZ2V0KFwiTGVuZ3RoM1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgdHlwZSxcbiAgICAgIG5hbWU6IGZvbnROYW1lLm5hbWUsXG4gICAgICBzdWJ0eXBlLFxuICAgICAgZmlsZTogZm9udEZpbGUsXG4gICAgICBsZW5ndGgxLFxuICAgICAgbGVuZ3RoMixcbiAgICAgIGxlbmd0aDMsXG4gICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgY29tcG9zaXRlLFxuICAgICAgZml4ZWRQaXRjaDogZmFsc2UsXG4gICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KFwiRm9udE1hdHJpeFwiKSB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCxcbiAgICAgIGZpcnN0Q2hhcjogZmlyc3RDaGFyIHx8IDAsXG4gICAgICBsYXN0Q2hhcjogbGFzdENoYXIgfHwgbWF4Q2hhckluZGV4LFxuICAgICAgYmJveDogZGVzY3JpcHRvci5nZXRBcnJheShcIkZvbnRCQm94XCIpLFxuICAgICAgYXNjZW50OiBkZXNjcmlwdG9yLmdldChcIkFzY2VudFwiKSxcbiAgICAgIGRlc2NlbnQ6IGRlc2NyaXB0b3IuZ2V0KFwiRGVzY2VudFwiKSxcbiAgICAgIHhIZWlnaHQ6IGRlc2NyaXB0b3IuZ2V0KFwiWEhlaWdodFwiKSxcbiAgICAgIGNhcEhlaWdodDogZGVzY3JpcHRvci5nZXQoXCJDYXBIZWlnaHRcIiksXG4gICAgICBmbGFnczogZGVzY3JpcHRvci5nZXQoXCJGbGFnc1wiKSxcbiAgICAgIGl0YWxpY0FuZ2xlOiBkZXNjcmlwdG9yLmdldChcIkl0YWxpY0FuZ2xlXCIpLFxuICAgICAgaXNUeXBlM0ZvbnQ6IGZhbHNlXG4gICAgfTtcbiAgICB2YXIgY01hcFByb21pc2U7XG5cbiAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICB2YXIgY2lkRW5jb2RpbmcgPSBiYXNlRGljdC5nZXQoXCJFbmNvZGluZ1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNpZEVuY29kaW5nKSkge1xuICAgICAgICBwcm9wZXJ0aWVzLmNpZEVuY29kaW5nID0gY2lkRW5jb2RpbmcubmFtZTtcbiAgICAgIH1cblxuICAgICAgY01hcFByb21pc2UgPSBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY01hcCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmNNYXAgPSBjTWFwO1xuICAgICAgICBwcm9wZXJ0aWVzLnZlcnRpY2FsID0gcHJvcGVydGllcy5jTWFwLnZlcnRpY2FsO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNNYXBQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNNYXBQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKTtcbiAgICB9KS50aGVuKG5ld1Byb3BlcnRpZXMgPT4ge1xuICAgICAgdGhpcy5leHRyYWN0V2lkdGhzKGRpY3QsIGRlc2NyaXB0b3IsIG5ld1Byb3BlcnRpZXMpO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJUeXBlM1wiKSB7XG4gICAgICAgIG5ld1Byb3BlcnRpZXMuaXNUeXBlM0ZvbnQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIGhhbmRsZXIpIHtcbiAgICBmdW5jdGlvbiBidWlsZFBhdGgoZm9udENoYXIpIHtcbiAgICAgIGlmIChmb250LnJlbmRlcmVyLmhhc0J1aWx0UGF0aChmb250Q2hhcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLnNlbmQoXCJjb21tb25vYmpcIiwgW2Ake2ZvbnQubG9hZGVkTmFtZX1fcGF0aF8ke2ZvbnRDaGFyfWAsIFwiRm9udFBhdGhcIiwgZm9udC5yZW5kZXJlci5nZXRQYXRoSnMoZm9udENoYXIpXSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgIGJ1aWxkUGF0aChnbHlwaC5mb250Q2hhcik7XG4gICAgICBjb25zdCBhY2NlbnQgPSBnbHlwaC5hY2NlbnQ7XG5cbiAgICAgIGlmIChhY2NlbnQgJiYgYWNjZW50LmZvbnRDaGFyKSB7XG4gICAgICAgIGJ1aWxkUGF0aChhY2NlbnQuZm9udENoYXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXQgZmFsbGJhY2tGb250RGljdCgpIHtcbiAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoKTtcbiAgICBkaWN0LnNldChcIkJhc2VGb250XCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiUERGSlMtRmFsbGJhY2tGb250XCIpKTtcbiAgICBkaWN0LnNldChcIlR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGYWxsYmFja1R5cGVcIikpO1xuICAgIGRpY3Quc2V0KFwiU3VidHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZhbGxiYWNrVHlwZVwiKSk7XG4gICAgZGljdC5zZXQoXCJFbmNvZGluZ1wiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIldpbkFuc2lFbmNvZGluZ1wiKSk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZmFsbGJhY2tGb250RGljdFwiLCBkaWN0KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFydGlhbEV2YWx1YXRvciA9IFBhcnRpYWxFdmFsdWF0b3I7XG5cbmNsYXNzIFRyYW5zbGF0ZWRGb250IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGxvYWRlZE5hbWUsXG4gICAgZm9udCxcbiAgICBkaWN0LFxuICAgIGV4dHJhUHJvcGVydGllcyA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmxvYWRlZE5hbWUgPSBsb2FkZWROYW1lO1xuICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLl9leHRyYVByb3BlcnRpZXMgPSBleHRyYVByb3BlcnRpZXM7XG4gICAgdGhpcy50eXBlM0xvYWRlZCA9IG51bGw7XG4gICAgdGhpcy50eXBlM0RlcGVuZGVuY2llcyA9IGZvbnQuaXNUeXBlM0ZvbnQgPyBuZXcgU2V0KCkgOiBudWxsO1xuICAgIHRoaXMuc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgc2VuZChoYW5kbGVyKSB7XG4gICAgaWYgKHRoaXMuc2VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VudCA9IHRydWU7XG4gICAgaGFuZGxlci5zZW5kKFwiY29tbW9ub2JqXCIsIFt0aGlzLmxvYWRlZE5hbWUsIFwiRm9udFwiLCB0aGlzLmZvbnQuZXhwb3J0RGF0YSh0aGlzLl9leHRyYVByb3BlcnRpZXMpXSk7XG4gIH1cblxuICBmYWxsYmFjayhoYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzLmZvbnQuZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgIGNvbnN0IGdseXBocyA9IHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzO1xuICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHModGhpcy5mb250LCBnbHlwaHMsIGhhbmRsZXIpO1xuICB9XG5cbiAgbG9hZFR5cGUzRGF0YShldmFsdWF0b3IsIHJlc291cmNlcywgdGFzaykge1xuICAgIGlmICh0aGlzLnR5cGUzTG9hZGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhIFR5cGUzIGZvbnQuXCIpO1xuICAgIH1cblxuICAgIHZhciB0eXBlM09wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGV2YWx1YXRvci5vcHRpb25zKTtcbiAgICB0eXBlM09wdGlvbnMuaWdub3JlRXJyb3JzID0gZmFsc2U7XG4gICAgdmFyIHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHR5cGUzT3B0aW9ucyk7XG4gICAgdHlwZTNFdmFsdWF0b3IucGFyc2luZ1R5cGUzRm9udCA9IHRydWU7XG4gICAgY29uc3QgdHJhbnNsYXRlZEZvbnQgPSB0aGlzLmZvbnQsXG4gICAgICAgICAgdHlwZTNEZXBlbmRlbmNpZXMgPSB0aGlzLnR5cGUzRGVwZW5kZW5jaWVzO1xuICAgIHZhciBsb2FkQ2hhclByb2NzUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHZhciBjaGFyUHJvY3MgPSB0aGlzLmRpY3QuZ2V0KFwiQ2hhclByb2NzXCIpO1xuICAgIHZhciBmb250UmVzb3VyY2VzID0gdGhpcy5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXM7XG4gICAgdmFyIGNoYXJQcm9jT3BlcmF0b3JMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJQcm9jcy5nZXRLZXlzKCkpIHtcbiAgICAgIGxvYWRDaGFyUHJvY3NQcm9taXNlID0gbG9hZENoYXJQcm9jc1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBnbHlwaFN0cmVhbSA9IGNoYXJQcm9jcy5nZXQoa2V5KTtcbiAgICAgICAgdmFyIG9wZXJhdG9yTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgICAgcmV0dXJuIHR5cGUzRXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgc3RyZWFtOiBnbHlwaFN0cmVhbSxcbiAgICAgICAgICB0YXNrLFxuICAgICAgICAgIHJlc291cmNlczogZm9udFJlc291cmNlcyxcbiAgICAgICAgICBvcGVyYXRvckxpc3RcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IG9wZXJhdG9yTGlzdC5nZXRJUigpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIG9wZXJhdG9yTGlzdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIHR5cGUzRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFR5cGUzIGZvbnQgcmVzb3VyY2UgXCIke2tleX1cIiBpcyBub3QgYXZhaWxhYmxlLmApO1xuICAgICAgICAgIGNvbnN0IGR1bW15T3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgICAgICAgIGNoYXJQcm9jT3BlcmF0b3JMaXN0W2tleV0gPSBkdW1teU9wZXJhdG9yTGlzdC5nZXRJUigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudHlwZTNMb2FkZWQgPSBsb2FkQ2hhclByb2NzUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyYW5zbGF0ZWRGb250LmNoYXJQcm9jT3BlcmF0b3JMaXN0ID0gY2hhclByb2NPcGVyYXRvckxpc3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ7XG4gIH1cblxufVxuXG5jbGFzcyBTdGF0ZU1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuc3RhdGVTdGFjayA9IFtdO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICB2YXIgb2xkID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTtcbiAgICB0aGlzLnN0YXRlID0gb2xkLmNsb25lKCk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIHZhciBwcmV2ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBwcmV2O1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybShhcmdzKSB7XG4gICAgdGhpcy5zdGF0ZS5jdG0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSwgYXJncyk7XG4gIH1cblxufVxuXG5jbGFzcyBUZXh0U3RhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN0bSA9IG5ldyBGbG9hdDMyQXJyYXkoX3V0aWwuSURFTlRJVFlfTUFUUklYKTtcbiAgICB0aGlzLmZvbnROYW1lID0gbnVsbDtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnQgPSBudWxsO1xuICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgIHRoaXMudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICB0aGlzLndvcmRTcGFjaW5nID0gMDtcbiAgICB0aGlzLmxlYWRpbmcgPSAwO1xuICAgIHRoaXMudGV4dEhTY2FsZSA9IDE7XG4gICAgdGhpcy50ZXh0UmlzZSA9IDA7XG4gIH1cblxuICBzZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICB2YXIgbSA9IHRoaXMudGV4dE1hdHJpeDtcbiAgICBtWzBdID0gYTtcbiAgICBtWzFdID0gYjtcbiAgICBtWzJdID0gYztcbiAgICBtWzNdID0gZDtcbiAgICBtWzRdID0gZTtcbiAgICBtWzVdID0gZjtcbiAgfVxuXG4gIHNldFRleHRMaW5lTWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICB2YXIgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgbVswXSA9IGE7XG4gICAgbVsxXSA9IGI7XG4gICAgbVsyXSA9IGM7XG4gICAgbVszXSA9IGQ7XG4gICAgbVs0XSA9IGU7XG4gICAgbVs1XSA9IGY7XG4gIH1cblxuICB0cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICB2YXIgbSA9IHRoaXMudGV4dE1hdHJpeDtcbiAgICBtWzRdID0gbVswXSAqIHggKyBtWzJdICogeSArIG1bNF07XG4gICAgbVs1XSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICB9XG5cbiAgdHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoeCwgeSkge1xuICAgIHZhciBtID0gdGhpcy50ZXh0TGluZU1hdHJpeDtcbiAgICBtWzRdID0gbVswXSAqIHggKyBtWzJdICogeSArIG1bNF07XG4gICAgbVs1XSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICB9XG5cbiAgY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgdmFyIGZvbnQgPSB0aGlzLmZvbnQ7XG5cbiAgICBpZiAoIWZvbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBtID0gdGhpcy50ZXh0TGluZU1hdHJpeDtcblxuICAgIGlmICghKGEgPT09IG1bMF0gJiYgYiA9PT0gbVsxXSAmJiBjID09PSBtWzJdICYmIGQgPT09IG1bM10pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdHhEaWZmID0gZSAtIG1bNF0sXG4gICAgICAgIHR5RGlmZiA9IGYgLSBtWzVdO1xuXG4gICAgaWYgKGZvbnQudmVydGljYWwgJiYgdHhEaWZmICE9PSAwIHx8ICFmb250LnZlcnRpY2FsICYmIHR5RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHR4LFxuICAgICAgICB0eSxcbiAgICAgICAgZGVub21pbmF0b3IgPSBhICogZCAtIGIgKiBjO1xuXG4gICAgaWYgKGZvbnQudmVydGljYWwpIHtcbiAgICAgIHR4ID0gLXR5RGlmZiAqIGMgLyBkZW5vbWluYXRvcjtcbiAgICAgIHR5ID0gdHlEaWZmICogYSAvIGRlbm9taW5hdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eCA9IHR4RGlmZiAqIGQgLyBkZW5vbWluYXRvcjtcbiAgICAgIHR5ID0gLXR4RGlmZiAqIGIgLyBkZW5vbWluYXRvcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHR4LFxuICAgICAgaGVpZ2h0OiB0eSxcbiAgICAgIHZhbHVlOiBmb250LnZlcnRpY2FsID8gdHkgOiB0eFxuICAgIH07XG4gIH1cblxuICBjYWxjUmVuZGVyTWF0cml4KGN0bSkge1xuICAgIHZhciB0c20gPSBbdGhpcy5mb250U2l6ZSAqIHRoaXMudGV4dEhTY2FsZSwgMCwgMCwgdGhpcy5mb250U2l6ZSwgMCwgdGhpcy50ZXh0UmlzZV07XG4gICAgcmV0dXJuIF91dGlsLlV0aWwudHJhbnNmb3JtKGN0bSwgX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy50ZXh0TWF0cml4LCB0c20pKTtcbiAgfVxuXG4gIGNhcnJpYWdlUmV0dXJuKCkge1xuICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgdGhpcy50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgdmFyIGNsb25lID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICBjbG9uZS50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7XG4gICAgY2xvbmUudGV4dExpbmVNYXRyaXggPSB0aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgY2xvbmUuZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeC5zbGljZSgpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG59XG5cbmNsYXNzIEV2YWxTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3RtID0gbmV3IEZsb2F0MzJBcnJheShfdXRpbC5JREVOVElUWV9NQVRSSVgpO1xuICAgIHRoaXMuZm9udCA9IG51bGw7XG4gICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgdGhpcy5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O1xuICAgIHRoaXMuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gIH1cblxufVxuXG5jbGFzcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ige1xuICBzdGF0aWMgZ2V0IG9wTWFwKCkge1xuICAgIGNvbnN0IGdldE9QTWFwID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHQudyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lV2lkdGgsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkogPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGluZUNhcCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuaiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lSm9pbixcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuTSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRNaXRlckxpbWl0LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5kID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldERhc2gsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnJpID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFJlbmRlcmluZ0ludGVudCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuaSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGbGF0bmVzcyxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuZ3MgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0R1N0YXRlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5xID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNhdmUsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlEgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMucmVzdG9yZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuY20gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMudHJhbnNmb3JtLFxuICAgICAgICBudW1BcmdzOiA2LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5tID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1vdmVUbyxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQubCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5saW5lVG8sXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuY3VydmVUbyxcbiAgICAgICAgbnVtQXJnczogNixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQudiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvMixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQueSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvMyxcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuaCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVBhdGgsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnJlID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnJlY3RhbmdsZSxcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuUyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuY2xvc2VTdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmYgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZmlsbCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdFtcImYqXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVvRmlsbCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsU3Ryb2tlLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdFtcIkIqXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVvRmlsbFN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuYiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUZpbGxTdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiYipcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuY2xvc2VFT0ZpbGxTdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0Lm4gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kUGF0aCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbGlwLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdFtcIlcqXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVvQ2xpcCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQlQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5UZXh0LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5FVCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRUZXh0LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UYyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZyxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHcgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlR6ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEhTY2FsZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVEwgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZyxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVGYgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Rm9udCxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHIgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRzID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRSaXNlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UZCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5tb3ZlVGV4dCxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVEQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UbSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4LFxuICAgICAgICBudW1BcmdzOiA2LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdFtcIlQqXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm5leHRMaW5lLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UaiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zaG93VGV4dCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVEogPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiJ1wiXSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdFsnXCInXSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dCxcbiAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuZDAgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Q2hhcldpZHRoLFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5kMSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsXG4gICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkNTID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2UsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmNzID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5TQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICB9O1xuICAgICAgdC5TQ04gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JOLFxuICAgICAgICBudW1BcmdzOiAzMyxcbiAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICB9O1xuICAgICAgdC5zYyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3IsXG4gICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHQuc2NuID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDb2xvck4sXG4gICAgICAgIG51bUFyZ3M6IDMzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgIH07XG4gICAgICB0LkcgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlR3JheSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuZyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsR3JheSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuUkcgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3IsXG4gICAgICAgIG51bUFyZ3M6IDMsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnJnID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcixcbiAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuSyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDTVlLQ29sb3IsXG4gICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmsgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENNWUtDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuc2ggPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2hhZGluZ0ZpbGwsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJJID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luSW5saW5lSW1hZ2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LklEID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luSW1hZ2VEYXRhLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5FSSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRG8gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMucGFpbnRYT2JqZWN0LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5NUCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5tYXJrUG9pbnQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkRQID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1hcmtQb2ludFByb3BzLFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CTUMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5NYXJrZWRDb250ZW50LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CREMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkVNQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CWCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbkNvbXBhdCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRVggPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kQ29tcGF0LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CTSA9IG51bGw7XG4gICAgICB0LkJEID0gbnVsbDtcbiAgICAgIHQudHJ1ZSA9IG51bGw7XG4gICAgICB0LmZhID0gbnVsbDtcbiAgICAgIHQuZmFsID0gbnVsbDtcbiAgICAgIHQuZmFscyA9IG51bGw7XG4gICAgICB0LmZhbHNlID0gbnVsbDtcbiAgICAgIHQubnUgPSBudWxsO1xuICAgICAgdC5udWwgPSBudWxsO1xuICAgICAgdC5udWxsID0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJvcE1hcFwiLCBnZXRPUE1hcCgpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTUFYX0lOVkFMSURfUEFUSF9PUFMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTUFYX0lOVkFMSURfUEFUSF9PUFNcIiwgMjApO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpIHtcbiAgICB0aGlzLnBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICBsZXhlcjogbmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtLCBFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLFxuICAgICAgeHJlZlxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGVNYW5hZ2VyID0gc3RhdGVNYW5hZ2VyO1xuICAgIHRoaXMubm9uUHJvY2Vzc2VkQXJncyA9IFtdO1xuICAgIHRoaXMuX251bUludmFsaWRQYXRoT1BTID0gMDtcbiAgfVxuXG4gIGdldCBzYXZlZFN0YXRlc0RlcHRoKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aDtcbiAgfVxuXG4gIHJlYWQob3BlcmF0aW9uKSB7XG4gICAgdmFyIGFyZ3MgPSBvcGVyYXRpb24uYXJncztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5wYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQpIHtcbiAgICAgICAgdmFyIGNtZCA9IG9iai5jbWQ7XG4gICAgICAgIHZhciBvcFNwZWMgPSBFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXBbY21kXTtcblxuICAgICAgICBpZiAoIW9wU3BlYykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5rbm93biBjb21tYW5kIFwiJHtjbWR9XCIuYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZm4gPSBvcFNwZWMuaWQ7XG4gICAgICAgIHZhciBudW1BcmdzID0gb3BTcGVjLm51bUFyZ3M7XG4gICAgICAgIHZhciBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDtcblxuICAgICAgICBpZiAoIW9wU3BlYy52YXJpYWJsZUFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJnc0xlbmd0aCAhPT0gbnVtQXJncykge1xuICAgICAgICAgICAgdmFyIG5vblByb2Nlc3NlZEFyZ3MgPSB0aGlzLm5vblByb2Nlc3NlZEFyZ3M7XG5cbiAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoID4gbnVtQXJncykge1xuICAgICAgICAgICAgICBub25Qcm9jZXNzZWRBcmdzLnB1c2goYXJncy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgYXJnc0xlbmd0aC0tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aCA8IG51bUFyZ3MgJiYgbm9uUHJvY2Vzc2VkQXJncy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQobm9uUHJvY2Vzc2VkQXJncy5wb3AoKSk7XG4gICAgICAgICAgICAgIGFyZ3NMZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXJnc0xlbmd0aCA8IG51bUFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxNc2cgPSBgY29tbWFuZCAke2NtZH06IGV4cGVjdGVkICR7bnVtQXJnc30gYXJncywgYCArIGBidXQgcmVjZWl2ZWQgJHthcmdzTGVuZ3RofSBhcmdzLmA7XG5cbiAgICAgICAgICAgIGlmIChmbiA+PSBfdXRpbC5PUFMubW92ZVRvICYmIGZuIDw9IF91dGlsLk9QUy5lbmRQYXRoICYmICsrdGhpcy5fbnVtSW52YWxpZFBhdGhPUFMgPiBFdmFsdWF0b3JQcmVwcm9jZXNzb3IuTUFYX0lOVkFMSURfUEFUSF9PUFMpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkICR7cGFydGlhbE1zZ31gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBTa2lwcGluZyAke3BhcnRpYWxNc2d9YCk7XG5cbiAgICAgICAgICAgIGlmIChhcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFyZ3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBDb21tYW5kICR7Y21kfTogZXhwZWN0ZWQgWzAsICR7bnVtQXJnc31dIGFyZ3MsIGAgKyBgYnV0IHJlY2VpdmVkICR7YXJnc0xlbmd0aH0gYXJncy5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpO1xuICAgICAgICBvcGVyYXRpb24uZm4gPSBmbjtcbiAgICAgICAgb3BlcmF0aW9uLmFyZ3MgPSBhcmdzO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iaiA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iaiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCkge1xuICAgICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MucHVzaChvYmopO1xuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVG9vIG1hbnkgYXJndW1lbnRzXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgY2FzZSBfdXRpbC5PUFMuc2F2ZTpcbiAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIuc2F2ZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBfdXRpbC5PUFMucmVzdG9yZTpcbiAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBfdXRpbC5PUFMudHJhbnNmb3JtOlxuICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0oYXJncyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ01hcEZhY3RvcnkgPSBleHBvcnRzLklkZW50aXR5Q01hcCA9IGV4cG9ydHMuQ01hcCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIEJVSUxUX0lOX0NNQVBTID0gW1wiQWRvYmUtR0IxLVVDUzJcIiwgXCJBZG9iZS1DTlMxLVVDUzJcIiwgXCJBZG9iZS1KYXBhbjEtVUNTMlwiLCBcIkFkb2JlLUtvcmVhMS1VQ1MyXCIsIFwiNzgtRVVDLUhcIiwgXCI3OC1FVUMtVlwiLCBcIjc4LUhcIiwgXCI3OC1SS1NKLUhcIiwgXCI3OC1SS1NKLVZcIiwgXCI3OC1WXCIsIFwiNzhtcy1SS1NKLUhcIiwgXCI3OG1zLVJLU0otVlwiLCBcIjgzcHYtUktTSi1IXCIsIFwiOTBtcy1SS1NKLUhcIiwgXCI5MG1zLVJLU0otVlwiLCBcIjkwbXNwLVJLU0otSFwiLCBcIjkwbXNwLVJLU0otVlwiLCBcIjkwcHYtUktTSi1IXCIsIFwiOTBwdi1SS1NKLVZcIiwgXCJBZGQtSFwiLCBcIkFkZC1SS1NKLUhcIiwgXCJBZGQtUktTSi1WXCIsIFwiQWRkLVZcIiwgXCJBZG9iZS1DTlMxLTBcIiwgXCJBZG9iZS1DTlMxLTFcIiwgXCJBZG9iZS1DTlMxLTJcIiwgXCJBZG9iZS1DTlMxLTNcIiwgXCJBZG9iZS1DTlMxLTRcIiwgXCJBZG9iZS1DTlMxLTVcIiwgXCJBZG9iZS1DTlMxLTZcIiwgXCJBZG9iZS1HQjEtMFwiLCBcIkFkb2JlLUdCMS0xXCIsIFwiQWRvYmUtR0IxLTJcIiwgXCJBZG9iZS1HQjEtM1wiLCBcIkFkb2JlLUdCMS00XCIsIFwiQWRvYmUtR0IxLTVcIiwgXCJBZG9iZS1KYXBhbjEtMFwiLCBcIkFkb2JlLUphcGFuMS0xXCIsIFwiQWRvYmUtSmFwYW4xLTJcIiwgXCJBZG9iZS1KYXBhbjEtM1wiLCBcIkFkb2JlLUphcGFuMS00XCIsIFwiQWRvYmUtSmFwYW4xLTVcIiwgXCJBZG9iZS1KYXBhbjEtNlwiLCBcIkFkb2JlLUtvcmVhMS0wXCIsIFwiQWRvYmUtS29yZWExLTFcIiwgXCJBZG9iZS1Lb3JlYTEtMlwiLCBcIkI1LUhcIiwgXCJCNS1WXCIsIFwiQjVwYy1IXCIsIFwiQjVwYy1WXCIsIFwiQ05TLUVVQy1IXCIsIFwiQ05TLUVVQy1WXCIsIFwiQ05TMS1IXCIsIFwiQ05TMS1WXCIsIFwiQ05TMi1IXCIsIFwiQ05TMi1WXCIsIFwiRVRISy1CNS1IXCIsIFwiRVRISy1CNS1WXCIsIFwiRVRlbi1CNS1IXCIsIFwiRVRlbi1CNS1WXCIsIFwiRVRlbm1zLUI1LUhcIiwgXCJFVGVubXMtQjUtVlwiLCBcIkVVQy1IXCIsIFwiRVVDLVZcIiwgXCJFeHQtSFwiLCBcIkV4dC1SS1NKLUhcIiwgXCJFeHQtUktTSi1WXCIsIFwiRXh0LVZcIiwgXCJHQi1FVUMtSFwiLCBcIkdCLUVVQy1WXCIsIFwiR0ItSFwiLCBcIkdCLVZcIiwgXCJHQkstRVVDLUhcIiwgXCJHQkstRVVDLVZcIiwgXCJHQksySy1IXCIsIFwiR0JLMkstVlwiLCBcIkdCS3AtRVVDLUhcIiwgXCJHQktwLUVVQy1WXCIsIFwiR0JULUVVQy1IXCIsIFwiR0JULUVVQy1WXCIsIFwiR0JULUhcIiwgXCJHQlQtVlwiLCBcIkdCVHBjLUVVQy1IXCIsIFwiR0JUcGMtRVVDLVZcIiwgXCJHQnBjLUVVQy1IXCIsIFwiR0JwYy1FVUMtVlwiLCBcIkhcIiwgXCJIS2RsYS1CNS1IXCIsIFwiSEtkbGEtQjUtVlwiLCBcIkhLZGxiLUI1LUhcIiwgXCJIS2RsYi1CNS1WXCIsIFwiSEtnY2NzLUI1LUhcIiwgXCJIS2djY3MtQjUtVlwiLCBcIkhLbTMxNC1CNS1IXCIsIFwiSEttMzE0LUI1LVZcIiwgXCJIS200NzEtQjUtSFwiLCBcIkhLbTQ3MS1CNS1WXCIsIFwiSEtzY3MtQjUtSFwiLCBcIkhLc2NzLUI1LVZcIiwgXCJIYW5rYWt1XCIsIFwiSGlyYWdhbmFcIiwgXCJLU0MtRVVDLUhcIiwgXCJLU0MtRVVDLVZcIiwgXCJLU0MtSFwiLCBcIktTQy1Kb2hhYi1IXCIsIFwiS1NDLUpvaGFiLVZcIiwgXCJLU0MtVlwiLCBcIktTQ21zLVVIQy1IXCIsIFwiS1NDbXMtVUhDLUhXLUhcIiwgXCJLU0Ntcy1VSEMtSFctVlwiLCBcIktTQ21zLVVIQy1WXCIsIFwiS1NDcGMtRVVDLUhcIiwgXCJLU0NwYy1FVUMtVlwiLCBcIkthdGFrYW5hXCIsIFwiTldQLUhcIiwgXCJOV1AtVlwiLCBcIlJLU0otSFwiLCBcIlJLU0otVlwiLCBcIlJvbWFuXCIsIFwiVW5pQ05TLVVDUzItSFwiLCBcIlVuaUNOUy1VQ1MyLVZcIiwgXCJVbmlDTlMtVVRGMTYtSFwiLCBcIlVuaUNOUy1VVEYxNi1WXCIsIFwiVW5pQ05TLVVURjMyLUhcIiwgXCJVbmlDTlMtVVRGMzItVlwiLCBcIlVuaUNOUy1VVEY4LUhcIiwgXCJVbmlDTlMtVVRGOC1WXCIsIFwiVW5pR0ItVUNTMi1IXCIsIFwiVW5pR0ItVUNTMi1WXCIsIFwiVW5pR0ItVVRGMTYtSFwiLCBcIlVuaUdCLVVURjE2LVZcIiwgXCJVbmlHQi1VVEYzMi1IXCIsIFwiVW5pR0ItVVRGMzItVlwiLCBcIlVuaUdCLVVURjgtSFwiLCBcIlVuaUdCLVVURjgtVlwiLCBcIlVuaUpJUy1VQ1MyLUhcIiwgXCJVbmlKSVMtVUNTMi1IVy1IXCIsIFwiVW5pSklTLVVDUzItSFctVlwiLCBcIlVuaUpJUy1VQ1MyLVZcIiwgXCJVbmlKSVMtVVRGMTYtSFwiLCBcIlVuaUpJUy1VVEYxNi1WXCIsIFwiVW5pSklTLVVURjMyLUhcIiwgXCJVbmlKSVMtVVRGMzItVlwiLCBcIlVuaUpJUy1VVEY4LUhcIiwgXCJVbmlKSVMtVVRGOC1WXCIsIFwiVW5pSklTMjAwNC1VVEYxNi1IXCIsIFwiVW5pSklTMjAwNC1VVEYxNi1WXCIsIFwiVW5pSklTMjAwNC1VVEYzMi1IXCIsIFwiVW5pSklTMjAwNC1VVEYzMi1WXCIsIFwiVW5pSklTMjAwNC1VVEY4LUhcIiwgXCJVbmlKSVMyMDA0LVVURjgtVlwiLCBcIlVuaUpJU1Byby1VQ1MyLUhXLVZcIiwgXCJVbmlKSVNQcm8tVUNTMi1WXCIsIFwiVW5pSklTUHJvLVVURjgtVlwiLCBcIlVuaUpJU1gwMjEzLVVURjMyLUhcIiwgXCJVbmlKSVNYMDIxMy1VVEYzMi1WXCIsIFwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUhcIiwgXCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItVlwiLCBcIlVuaUtTLVVDUzItSFwiLCBcIlVuaUtTLVVDUzItVlwiLCBcIlVuaUtTLVVURjE2LUhcIiwgXCJVbmlLUy1VVEYxNi1WXCIsIFwiVW5pS1MtVVRGMzItSFwiLCBcIlVuaUtTLVVURjMyLVZcIiwgXCJVbmlLUy1VVEY4LUhcIiwgXCJVbmlLUy1VVEY4LVZcIiwgXCJWXCIsIFwiV1AtU3ltYm9sXCJdO1xuY29uc3QgTUFYX01BUF9SQU5HRSA9IDIgKiogMjQgLSAxO1xuXG5jbGFzcyBDTWFwIHtcbiAgY29uc3RydWN0b3IoYnVpbHRJbkNNYXAgPSBmYWxzZSkge1xuICAgIHRoaXMuY29kZXNwYWNlUmFuZ2VzID0gW1tdLCBbXSwgW10sIFtdXTtcbiAgICB0aGlzLm51bUNvZGVzcGFjZVJhbmdlcyA9IDA7XG4gICAgdGhpcy5fbWFwID0gW107XG4gICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICB0aGlzLnZlcnRpY2FsID0gZmFsc2U7XG4gICAgdGhpcy51c2VDTWFwID0gbnVsbDtcbiAgICB0aGlzLmJ1aWx0SW5DTWFwID0gYnVpbHRJbkNNYXA7XG4gIH1cblxuICBhZGRDb2Rlc3BhY2VSYW5nZShuLCBsb3csIGhpZ2gpIHtcbiAgICB0aGlzLmNvZGVzcGFjZVJhbmdlc1tuIC0gMV0ucHVzaChsb3csIGhpZ2gpO1xuICAgIHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKys7XG4gIH1cblxuICBtYXBDaWRSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuXCIpO1xuICAgIH1cblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgICAgdGhpcy5fbWFwW2xvdysrXSA9IGRzdExvdysrO1xuICAgIH1cbiAgfVxuXG4gIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICBpZiAoaGlnaCAtIGxvdyA+IE1BWF9NQVBfUkFOR0UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm1hcEJmUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuXCIpO1xuICAgIH1cblxuICAgIHZhciBsYXN0Qnl0ZSA9IGRzdExvdy5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93O1xuICAgICAgZHN0TG93ID0gZHN0TG93LnN1YnN0cmluZygwLCBsYXN0Qnl0ZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGRzdExvdy5jaGFyQ29kZUF0KGxhc3RCeXRlKSArIDEpO1xuICAgIH1cbiAgfVxuXG4gIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHtcbiAgICBpZiAoaGlnaCAtIGxvdyA+IE1BWF9NQVBfUkFOR0UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm1hcEJmUmFuZ2VUb0FycmF5IC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpaSA9IGFycmF5Lmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaSA8IGlpKSB7XG4gICAgICB0aGlzLl9tYXBbbG93XSA9IGFycmF5W2krK107XG4gICAgICArK2xvdztcbiAgICB9XG4gIH1cblxuICBtYXBPbmUoc3JjLCBkc3QpIHtcbiAgICB0aGlzLl9tYXBbc3JjXSA9IGRzdDtcbiAgfVxuXG4gIGxvb2t1cChjb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtjb2RlXTtcbiAgfVxuXG4gIGNvbnRhaW5zKGNvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuICAgIGNvbnN0IGxlbmd0aCA9IG1hcC5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoIDw9IDB4MTAwMDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hcFtpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soaSwgbWFwW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGkgaW4gbWFwKSB7XG4gICAgICAgIGNhbGxiYWNrKGksIG1hcFtpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhckNvZGVPZih2YWx1ZSkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcblxuICAgIGlmIChtYXAubGVuZ3RoIDw9IDB4MTAwMDApIHtcbiAgICAgIHJldHVybiBtYXAuaW5kZXhPZih2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBtYXApIHtcbiAgICAgIGlmIChtYXBbY2hhckNvZGVdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY2hhckNvZGUgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGdldE1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xuICB9XG5cbiAgcmVhZENoYXJDb2RlKHN0ciwgb2Zmc2V0LCBvdXQpIHtcbiAgICBsZXQgYyA9IDA7XG4gICAgY29uc3QgY29kZXNwYWNlUmFuZ2VzID0gdGhpcy5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICBmb3IgKGxldCBuID0gMCwgbm4gPSBjb2Rlc3BhY2VSYW5nZXMubGVuZ3RoOyBuIDwgbm47IG4rKykge1xuICAgICAgYyA9IChjIDw8IDggfCBzdHIuY2hhckNvZGVBdChvZmZzZXQgKyBuKSkgPj4+IDA7XG4gICAgICBjb25zdCBjb2Rlc3BhY2VSYW5nZSA9IGNvZGVzcGFjZVJhbmdlc1tuXTtcblxuICAgICAgZm9yIChsZXQgayA9IDAsIGtrID0gY29kZXNwYWNlUmFuZ2UubGVuZ3RoOyBrIDwga2s7KSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IGNvZGVzcGFjZVJhbmdlW2srK107XG4gICAgICAgIGNvbnN0IGhpZ2ggPSBjb2Rlc3BhY2VSYW5nZVtrKytdO1xuXG4gICAgICAgIGlmIChjID49IGxvdyAmJiBjIDw9IGhpZ2gpIHtcbiAgICAgICAgICBvdXQuY2hhcmNvZGUgPSBjO1xuICAgICAgICAgIG91dC5sZW5ndGggPSBuICsgMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBvdXQuY2hhcmNvZGUgPSAwO1xuICAgIG91dC5sZW5ndGggPSAxO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc0lkZW50aXR5Q01hcCgpIHtcbiAgICBpZiAoISh0aGlzLm5hbWUgPT09IFwiSWRlbnRpdHktSFwiIHx8IHRoaXMubmFtZSA9PT0gXCJJZGVudGl0eS1WXCIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX21hcC5sZW5ndGggIT09IDB4MTAwMDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDB4MTAwMDA7IGkrKykge1xuICAgICAgaWYgKHRoaXMuX21hcFtpXSAhPT0gaSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5leHBvcnRzLkNNYXAgPSBDTWFwO1xuXG5jbGFzcyBJZGVudGl0eUNNYXAgZXh0ZW5kcyBDTWFwIHtcbiAgY29uc3RydWN0b3IodmVydGljYWwsIG4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmVydGljYWwgPSB2ZXJ0aWNhbDtcbiAgICB0aGlzLmFkZENvZGVzcGFjZVJhbmdlKG4sIDAsIDB4ZmZmZik7XG4gIH1cblxuICBtYXBDaWRSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkUmFuZ2VcIik7XG4gIH1cblxuICBtYXBCZlJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlXCIpO1xuICB9XG5cbiAgbWFwQmZSYW5nZVRvQXJyYXkobG93LCBoaWdoLCBhcnJheSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXlcIik7XG4gIH1cblxuICBtYXBPbmUoc3JjLCBkc3QpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZVwiKTtcbiAgfVxuXG4gIGxvb2t1cChjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA8PSAweGZmZmYgPyBjb2RlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgY29udGFpbnMoY29kZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpICYmIGNvZGUgPD0gMHhmZmZmO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDB4ZmZmZjsgaSsrKSB7XG4gICAgICBjYWxsYmFjayhpLCBpKTtcbiAgICB9XG4gIH1cblxuICBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlIDw9IDB4ZmZmZiA/IHZhbHVlIDogLTE7XG4gIH1cblxuICBnZXRNYXAoKSB7XG4gICAgY29uc3QgbWFwID0gbmV3IEFycmF5KDB4MTAwMDApO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmOyBpKyspIHtcbiAgICAgIG1hcFtpXSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIDB4MTAwMDA7XG4gIH1cblxuICBnZXQgaXNJZGVudGl0eUNNYXAoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcFwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuSWRlbnRpdHlDTWFwID0gSWRlbnRpdHlDTWFwO1xuXG52YXIgQmluYXJ5Q01hcFJlYWRlciA9IGZ1bmN0aW9uIEJpbmFyeUNNYXBSZWFkZXJDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBoZXhUb0ludChhLCBzaXplKSB7XG4gICAgdmFyIG4gPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICBuID0gbiA8PCA4IHwgYVtpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbiA+Pj4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhleFRvU3RyKGEsIHNpemUpIHtcbiAgICBpZiAoc2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYVswXSwgYVsxXSk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbMF0sIGFbMV0sIGFbMl0sIGFbM10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGEuc3ViYXJyYXkoMCwgc2l6ZSArIDEpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEhleChhLCBiLCBzaXplKSB7XG4gICAgdmFyIGMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjICs9IGFbaV0gKyBiW2ldO1xuICAgICAgYVtpXSA9IGMgJiAyNTU7XG4gICAgICBjID4+PSA4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluY0hleChhLCBzaXplKSB7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMCAmJiBjID4gMDsgaS0tKSB7XG4gICAgICBjICs9IGFbaV07XG4gICAgICBhW2ldID0gYyAmIDI1NTtcbiAgICAgIGMgPj49IDg7XG4gICAgfVxuICB9XG5cbiAgdmFyIE1BWF9OVU1fU0laRSA9IDE2O1xuICB2YXIgTUFYX0VOQ09ERURfTlVNX1NJWkUgPSAxOTtcblxuICBmdW5jdGlvbiBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuZW5kID0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy50bXBCdWYgPSBuZXcgVWludDhBcnJheShNQVhfRU5DT0RFRF9OVU1fU0laRSk7XG4gIH1cblxuICBCaW5hcnlDTWFwU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICByZWFkQnl0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXTtcbiAgICB9LFxuXG4gICAgcmVhZE51bWJlcigpIHtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciBsYXN0O1xuXG4gICAgICBkbyB7XG4gICAgICAgIHZhciBiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXG4gICAgICAgIGlmIChiIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdCA9ICEoYiAmIDB4ODApO1xuICAgICAgICBuID0gbiA8PCA3IHwgYiAmIDB4N2Y7XG4gICAgICB9IHdoaWxlICghbGFzdCk7XG5cbiAgICAgIHJldHVybiBuO1xuICAgIH0sXG5cbiAgICByZWFkU2lnbmVkKCkge1xuICAgICAgdmFyIG4gPSB0aGlzLnJlYWROdW1iZXIoKTtcbiAgICAgIHJldHVybiBuICYgMSA/IH4obiA+Pj4gMSkgOiBuID4+PiAxO1xuICAgIH0sXG5cbiAgICByZWFkSGV4KG51bSwgc2l6ZSkge1xuICAgICAgbnVtLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplICsgMSkpO1xuICAgICAgdGhpcy5wb3MgKz0gc2l6ZSArIDE7XG4gICAgfSxcblxuICAgIHJlYWRIZXhOdW1iZXIobnVtLCBzaXplKSB7XG4gICAgICB2YXIgbGFzdDtcbiAgICAgIHZhciBzdGFjayA9IHRoaXMudG1wQnVmLFxuICAgICAgICAgIHNwID0gMDtcblxuICAgICAgZG8ge1xuICAgICAgICB2YXIgYiA9IHRoaXMucmVhZEJ5dGUoKTtcblxuICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3QgPSAhKGIgJiAweDgwKTtcbiAgICAgICAgc3RhY2tbc3ArK10gPSBiICYgMHg3ZjtcbiAgICAgIH0gd2hpbGUgKCFsYXN0KTtcblxuICAgICAgdmFyIGkgPSBzaXplLFxuICAgICAgICAgIGJ1ZmZlciA9IDAsXG4gICAgICAgICAgYnVmZmVyU2l6ZSA9IDA7XG5cbiAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlclNpemUgPCA4ICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBidWZmZXIgPSBzdGFja1stLXNwXSA8PCBidWZmZXJTaXplIHwgYnVmZmVyO1xuICAgICAgICAgIGJ1ZmZlclNpemUgKz0gNztcbiAgICAgICAgfVxuXG4gICAgICAgIG51bVtpXSA9IGJ1ZmZlciAmIDI1NTtcbiAgICAgICAgaS0tO1xuICAgICAgICBidWZmZXIgPj49IDg7XG4gICAgICAgIGJ1ZmZlclNpemUgLT0gODtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVhZEhleFNpZ25lZChudW0sIHNpemUpIHtcbiAgICAgIHRoaXMucmVhZEhleE51bWJlcihudW0sIHNpemUpO1xuICAgICAgdmFyIHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDtcbiAgICAgIHZhciBjID0gMDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICAgIGMgPSAoYyAmIDEpIDw8IDggfCBudW1baV07XG4gICAgICAgIG51bVtpXSA9IGMgPj4gMSBeIHNpZ247XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmcoKSB7XG4gICAgICB2YXIgbGVuID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICB2YXIgcyA9IFwiXCI7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZE51bWJlcigpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gIH07XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0JpbmFyeUNNYXAoZGF0YSwgY01hcCwgZXh0ZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBuZXcgQmluYXJ5Q01hcFN0cmVhbShkYXRhKTtcbiAgICAgIHZhciBoZWFkZXIgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgIGNNYXAudmVydGljYWwgPSAhIShoZWFkZXIgJiAxKTtcbiAgICAgIHZhciB1c2VDTWFwID0gbnVsbDtcbiAgICAgIHZhciBzdGFydCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICB2YXIgZW5kID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTtcbiAgICAgIHZhciBjaGFyID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTtcbiAgICAgIHZhciBjaGFyQ29kZSA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoTUFYX05VTV9TSVpFKTtcbiAgICAgIHZhciBjb2RlO1xuICAgICAgdmFyIGI7XG5cbiAgICAgIHdoaWxlICgoYiA9IHN0cmVhbS5yZWFkQnl0ZSgpKSA+PSAwKSB7XG4gICAgICAgIHZhciB0eXBlID0gYiA+PiA1O1xuXG4gICAgICAgIGlmICh0eXBlID09PSA3KSB7XG4gICAgICAgICAgc3dpdGNoIChiICYgMHgxZikge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBzdHJlYW0ucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICB1c2VDTWFwID0gc3RyZWFtLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7XG4gICAgICAgIHZhciBkYXRhU2l6ZSA9IGIgJiAxNTtcblxuICAgICAgICBpZiAoZGF0YVNpemUgKyAxID4gTUFYX05VTV9TSVpFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvY2Vzc0JpbmFyeUNNYXA6IEludmFsaWQgZGF0YVNpemUuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHVjczJEYXRhU2l6ZSA9IDE7XG4gICAgICAgIHZhciBzdWJpdGVtc0NvdW50ID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgY01hcC5hZGRDb2Rlc3BhY2VSYW5nZShkYXRhU2l6ZSArIDEsIGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgZGF0YVNpemUpLCBjb2RlKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcih0bXAsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWRTaWduZWQoKSArIChjb2RlICsgMSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnQuc2V0KGVuZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICAgIGNNYXAubWFwQ2lkUmFuZ2UoaGV4VG9JbnQoc3RhcnQsIGRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCBkYXRhU2l6ZSksIGNvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgaW5jSGV4KGNoYXIsIHVjczJEYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaW5jSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4U2lnbmVkKHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBhZGRIZXgoY2hhckNvZGUsIHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcInByb2Nlc3NCaW5hcnlDTWFwOiBVbmtub3duIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VDTWFwKSB7XG4gICAgICAgIHJlc29sdmUoZXh0ZW5kKHVzZUNNYXApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGNNYXApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gQmluYXJ5Q01hcFJlYWRlcigpIHt9XG5cbiAgQmluYXJ5Q01hcFJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgcHJvY2VzczogcHJvY2Vzc0JpbmFyeUNNYXBcbiAgfTtcbiAgcmV0dXJuIEJpbmFyeUNNYXBSZWFkZXI7XG59KCk7XG5cbnZhciBDTWFwRmFjdG9yeSA9IGZ1bmN0aW9uIENNYXBGYWN0b3J5Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gc3RyVG9JbnQoc3RyKSB7XG4gICAgdmFyIGEgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEgPSBhIDw8IDggfCBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSA+Pj4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFN0cmluZyhvYmopIHtcbiAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy5cIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0SW50KG9iaikge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LlwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUJmQ2hhcihjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRiZmNoYXJcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBzcmMgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGJmcmFuZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8ICgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICB2YXIgZHN0TG93ID0gTnVtYmVyLmlzSW50ZWdlcihvYmopID8gU3RyaW5nLmZyb21DaGFyQ29kZShvYmopIDogb2JqO1xuICAgICAgICBjTWFwLm1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJbXCIpKSB7XG4gICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcIl1cIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgIGFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNNYXAubWFwQmZSYW5nZVRvQXJyYXkobG93LCBoaWdoLCBhcnJheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGJmIHJhbmdlLlwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2lkQ2hhcihjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRjaWRjaGFyXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICB2YXIgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICB2YXIgZHN0ID0gb2JqO1xuICAgICAgY01hcC5tYXBPbmUoc3JjLCBkc3QpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRU9GKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kY2lkcmFuZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIHZhciBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICB2YXIgZHN0TG93ID0gb2JqO1xuICAgICAgY01hcC5tYXBDaWRSYW5nZShsb3csIGhpZ2gsIGRzdExvdyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRjb2Rlc3BhY2VyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGhpZ2ggPSBzdHJUb0ludChvYmopO1xuICAgICAgY01hcC5hZGRDb2Rlc3BhY2VSYW5nZShvYmoubGVuZ3RoLCBsb3csIGhpZ2gpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLlwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV01vZGUoY01hcCwgbGV4ZXIpIHtcbiAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICBjTWFwLnZlcnRpY2FsID0gISFvYmo7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShjTWFwLCBsZXhlcikge1xuICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopICYmICgwLCBfdXRpbC5pc1N0cmluZykob2JqLm5hbWUpKSB7XG4gICAgICBjTWFwLm5hbWUgPSBvYmoubmFtZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICB2YXIgcHJldmlvdXM7XG4gICAgdmFyIGVtYmVkZGVkVXNlQ01hcDtcblxuICAgIG9iakxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikpIHtcbiAgICAgICAgICBpZiAob2JqLm5hbWUgPT09IFwiV01vZGVcIikge1xuICAgICAgICAgICAgcGFyc2VXTW9kZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChvYmoubmFtZSA9PT0gXCJDTWFwTmFtZVwiKSB7XG4gICAgICAgICAgICBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91cyA9IG9iajtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaikpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9iai5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbmRjbWFwXCI6XG4gICAgICAgICAgICAgIGJyZWFrIG9iakxvb3A7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ1c2VjbWFwXCI6XG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwcmV2aW91cykpIHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZFVzZUNNYXAgPSBwcmV2aW91cy5uYW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNvZGVzcGFjZXJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luYmZjaGFyXCI6XG4gICAgICAgICAgICAgIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZGNoYXJcIjpcbiAgICAgICAgICAgICAgcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmJmcmFuZ2VcIjpcbiAgICAgICAgICAgICAgcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZHJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGNNYXAgZGF0YTogXCIgKyBleCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXNlQ01hcCAmJiBlbWJlZGRlZFVzZUNNYXApIHtcbiAgICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7XG4gICAgfVxuXG4gICAgaWYgKHVzZUNNYXApIHtcbiAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY01hcCk7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAodXNlQ01hcCwgZmV0Y2hCdWlsdEluQ01hcCkudGhlbihmdW5jdGlvbiAobmV3Q01hcCkge1xuICAgICAgY01hcC51c2VDTWFwID0gbmV3Q01hcDtcblxuICAgICAgaWYgKGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID09PSAwKSB7XG4gICAgICAgIHZhciB1c2VDb2Rlc3BhY2VSYW5nZXMgPSBjTWFwLnVzZUNNYXAuY29kZXNwYWNlUmFuZ2VzO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXNlQ29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY01hcC5jb2Rlc3BhY2VSYW5nZXNbaV0gPSB1c2VDb2Rlc3BhY2VSYW5nZXNbaV0uc2xpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlcztcbiAgICAgIH1cblxuICAgICAgY01hcC51c2VDTWFwLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFjTWFwLmNvbnRhaW5zKGtleSkpIHtcbiAgICAgICAgICBjTWFwLm1hcE9uZShrZXksIGNNYXAudXNlQ01hcC5sb29rdXAoa2V5KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNNYXA7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVCdWlsdEluQ01hcChuYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKSB7XG4gICAgaWYgKG5hbWUgPT09IFwiSWRlbnRpdHktSFwiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBJZGVudGl0eUNNYXAoZmFsc2UsIDIpKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09IFwiSWRlbnRpdHktVlwiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBJZGVudGl0eUNNYXAodHJ1ZSwgMikpO1xuICAgIH1cblxuICAgIGlmICghQlVJTFRfSU5fQ01BUFMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmtub3duIENNYXAgbmFtZTogXCIgKyBuYW1lKSk7XG4gICAgfVxuXG4gICAgaWYgKCFmZXRjaEJ1aWx0SW5DTWFwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQnVpbHQtaW4gQ01hcCBwYXJhbWV0ZXJzIGFyZSBub3QgcHJvdmlkZWQuXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmV0Y2hCdWlsdEluQ01hcChuYW1lKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICB2YXIgY01hcERhdGEgPSBkYXRhLmNNYXBEYXRhLFxuICAgICAgICAgIGNvbXByZXNzaW9uVHlwZSA9IGRhdGEuY29tcHJlc3Npb25UeXBlO1xuICAgICAgdmFyIGNNYXAgPSBuZXcgQ01hcCh0cnVlKTtcblxuICAgICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDTWFwUmVhZGVyKCkucHJvY2VzcyhjTWFwRGF0YSwgY01hcCwgZnVuY3Rpb24gKHVzZUNNYXApIHtcbiAgICAgICAgICByZXR1cm4gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wcmVzc2lvblR5cGUgPT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgICB2YXIgbGV4ZXIgPSBuZXcgX3BhcnNlci5MZXhlcihuZXcgX3N0cmVhbS5TdHJlYW0oY01hcERhdGEpKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlQ01hcChjTWFwLCBsZXhlciwgZmV0Y2hCdWlsdEluQ01hcCwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJUT0RPOiBPbmx5IEJJTkFSWS9OT05FIENNYXAgY29tcHJlc3Npb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC5cIikpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBjcmVhdGUocGFyYW1zKSB7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBwYXJhbXMuZW5jb2Rpbmc7XG4gICAgICB2YXIgZmV0Y2hCdWlsdEluQ01hcCA9IHBhcmFtcy5mZXRjaEJ1aWx0SW5DTWFwO1xuICAgICAgdmFyIHVzZUNNYXAgPSBwYXJhbXMudXNlQ01hcDtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVuY29kaW5nKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAoZW5jb2RpbmcubmFtZSwgZmV0Y2hCdWlsdEluQ01hcCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZW5jb2RpbmcpKSB7XG4gICAgICAgIHZhciBjTWFwID0gbmV3IENNYXAoKTtcbiAgICAgICAgdmFyIGxleGVyID0gbmV3IF9wYXJzZXIuTGV4ZXIoZW5jb2RpbmcpO1xuICAgICAgICByZXR1cm4gcGFyc2VDTWFwKGNNYXAsIGxleGVyLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKS50aGVuKGZ1bmN0aW9uIChwYXJzZWRDTWFwKSB7XG4gICAgICAgICAgaWYgKHBhcnNlZENNYXAuaXNJZGVudGl0eUNNYXApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChwYXJzZWRDTWFwLm5hbWUsIGZldGNoQnVpbHRJbkNNYXApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwYXJzZWRDTWFwO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgcmVxdWlyZWQuXCIpO1xuICAgIH1cblxuICB9O1xufSgpO1xuXG5leHBvcnRzLkNNYXBGYWN0b3J5ID0gQ01hcEZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0Rm9udFR5cGUgPSBnZXRGb250VHlwZTtcbmV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBleHBvcnRzLlRvVW5pY29kZU1hcCA9IGV4cG9ydHMuRm9udEZsYWdzID0gZXhwb3J0cy5Gb250ID0gZXhwb3J0cy5FcnJvckZvbnQgPSBleHBvcnRzLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jZmZfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXygzMSk7XG5cbnZhciBfZ2x5cGhsaXN0ID0gX193X3BkZmpzX3JlcXVpcmVfXygzNCk7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMyk7XG5cbnZhciBfc3RhbmRhcmRfZm9udHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF91bmljb2RlID0gX193X3BkZmpzX3JlcXVpcmVfXygzNik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfZm9udF9yZW5kZXJlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG52YXIgX2NtYXAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF90eXBlMV9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM4KTtcblxuY29uc3QgUFJJVkFURV9VU0VfQVJFQVMgPSBbWzB4ZTAwMCwgMHhmOGZmXSwgWzB4MTAwMDAwLCAweDEwZmZmZF1dO1xudmFyIFBERl9HTFlQSF9TUEFDRV9VTklUUyA9IDEwMDA7XG52YXIgU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gdHJ1ZTtcbmV4cG9ydHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gU0VBQ19BTkFMWVNJU19FTkFCTEVEO1xuY29uc3QgRVhQT1JUX0RBVEFfUFJPUEVSVElFUyA9IFtcImFzY2VudFwiLCBcImJib3hcIiwgXCJibGFja1wiLCBcImJvbGRcIiwgXCJjaGFyUHJvY09wZXJhdG9yTGlzdFwiLCBcImNvbXBvc2l0ZVwiLCBcImRhdGFcIiwgXCJkZWZhdWx0Vk1ldHJpY3NcIiwgXCJkZWZhdWx0V2lkdGhcIiwgXCJkZXNjZW50XCIsIFwiZmFsbGJhY2tOYW1lXCIsIFwiZm9udE1hdHJpeFwiLCBcImZvbnRUeXBlXCIsIFwiaXNNb25vc3BhY2VcIiwgXCJpc1NlcmlmRm9udFwiLCBcImlzVHlwZTNGb250XCIsIFwiaXRhbGljXCIsIFwibG9hZGVkTmFtZVwiLCBcIm1pbWV0eXBlXCIsIFwibWlzc2luZ0ZpbGVcIiwgXCJuYW1lXCIsIFwicmVtZWFzdXJlXCIsIFwic3VidHlwZVwiLCBcInR5cGVcIiwgXCJ2ZXJ0aWNhbFwiXTtcbmNvbnN0IEVYUE9SVF9EQVRBX0VYVFJBX1BST1BFUlRJRVMgPSBbXCJjTWFwXCIsIFwiZGVmYXVsdEVuY29kaW5nXCIsIFwiZGlmZmVyZW5jZXNcIiwgXCJpc1N5bWJvbGljRm9udFwiLCBcInNlYWNNYXBcIiwgXCJ0b0ZvbnRDaGFyXCIsIFwidG9Vbmljb2RlXCIsIFwidm1ldHJpY3NcIiwgXCJ3aWR0aHNcIl07XG52YXIgRm9udEZsYWdzID0ge1xuICBGaXhlZFBpdGNoOiAxLFxuICBTZXJpZjogMixcbiAgU3ltYm9saWM6IDQsXG4gIFNjcmlwdDogOCxcbiAgTm9uc3ltYm9saWM6IDMyLFxuICBJdGFsaWM6IDY0LFxuICBBbGxDYXA6IDY1NTM2LFxuICBTbWFsbENhcDogMTMxMDcyLFxuICBGb3JjZUJvbGQ6IDI2MjE0NFxufTtcbmV4cG9ydHMuRm9udEZsYWdzID0gRm9udEZsYWdzO1xudmFyIE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IFtcIi5ub3RkZWZcIiwgXCIubnVsbFwiLCBcIm5vbm1hcmtpbmdyZXR1cm5cIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza1wiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiYXRcIiwgXCJBXCIsIFwiQlwiLCBcIkNcIiwgXCJEXCIsIFwiRVwiLCBcIkZcIiwgXCJHXCIsIFwiSFwiLCBcIklcIiwgXCJKXCIsIFwiS1wiLCBcIkxcIiwgXCJNXCIsIFwiTlwiLCBcIk9cIiwgXCJQXCIsIFwiUVwiLCBcIlJcIiwgXCJTXCIsIFwiVFwiLCBcIlVcIiwgXCJWXCIsIFwiV1wiLCBcIlhcIiwgXCJZXCIsIFwiWlwiLCBcImJyYWNrZXRsZWZ0XCIsIFwiYmFja3NsYXNoXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwiYXNjaWljaXJjdW1cIiwgXCJ1bmRlcnNjb3JlXCIsIFwiZ3JhdmVcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiQWRpZXJlc2lzXCIsIFwiQXJpbmdcIiwgXCJDY2VkaWxsYVwiLCBcIkVhY3V0ZVwiLCBcIk50aWxkZVwiLCBcIk9kaWVyZXNpc1wiLCBcIlVkaWVyZXNpc1wiLCBcImFhY3V0ZVwiLCBcImFncmF2ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYXRpbGRlXCIsIFwiYXJpbmdcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVncmF2ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiaWFjdXRlXCIsIFwiaWdyYXZlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvZ3JhdmVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm90aWxkZVwiLCBcInVhY3V0ZVwiLCBcInVncmF2ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwiZGFnZ2VyXCIsIFwiZGVncmVlXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwic2VjdGlvblwiLCBcImJ1bGxldFwiLCBcInBhcmFncmFwaFwiLCBcImdlcm1hbmRibHNcIiwgXCJyZWdpc3RlcmVkXCIsIFwiY29weXJpZ2h0XCIsIFwidHJhZGVtYXJrXCIsIFwiYWN1dGVcIiwgXCJkaWVyZXNpc1wiLCBcIm5vdGVxdWFsXCIsIFwiQUVcIiwgXCJPc2xhc2hcIiwgXCJpbmZpbml0eVwiLCBcInBsdXNtaW51c1wiLCBcImxlc3NlcXVhbFwiLCBcImdyZWF0ZXJlcXVhbFwiLCBcInllblwiLCBcIm11XCIsIFwicGFydGlhbGRpZmZcIiwgXCJzdW1tYXRpb25cIiwgXCJwcm9kdWN0XCIsIFwicGlcIiwgXCJpbnRlZ3JhbFwiLCBcIm9yZGZlbWluaW5lXCIsIFwib3JkbWFzY3VsaW5lXCIsIFwiT21lZ2FcIiwgXCJhZVwiLCBcIm9zbGFzaFwiLCBcInF1ZXN0aW9uZG93blwiLCBcImV4Y2xhbWRvd25cIiwgXCJsb2dpY2Fsbm90XCIsIFwicmFkaWNhbFwiLCBcImZsb3JpblwiLCBcImFwcHJveGVxdWFsXCIsIFwiRGVsdGFcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwiZ3VpbGxlbW90cmlnaHRcIiwgXCJlbGxpcHNpc1wiLCBcIm5vbmJyZWFraW5nc3BhY2VcIiwgXCJBZ3JhdmVcIiwgXCJBdGlsZGVcIiwgXCJPdGlsZGVcIiwgXCJPRVwiLCBcIm9lXCIsIFwiZW5kYXNoXCIsIFwiZW1kYXNoXCIsIFwicXVvdGVkYmxsZWZ0XCIsIFwicXVvdGVkYmxyaWdodFwiLCBcInF1b3RlbGVmdFwiLCBcInF1b3RlcmlnaHRcIiwgXCJkaXZpZGVcIiwgXCJsb3plbmdlXCIsIFwieWRpZXJlc2lzXCIsIFwiWWRpZXJlc2lzXCIsIFwiZnJhY3Rpb25cIiwgXCJjdXJyZW5jeVwiLCBcImd1aWxzaW5nbGxlZnRcIiwgXCJndWlsc2luZ2xyaWdodFwiLCBcImZpXCIsIFwiZmxcIiwgXCJkYWdnZXJkYmxcIiwgXCJwZXJpb2RjZW50ZXJlZFwiLCBcInF1b3Rlc2luZ2xiYXNlXCIsIFwicXVvdGVkYmxiYXNlXCIsIFwicGVydGhvdXNhbmRcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkVjaXJjdW1mbGV4XCIsIFwiQWFjdXRlXCIsIFwiRWRpZXJlc2lzXCIsIFwiRWdyYXZlXCIsIFwiSWFjdXRlXCIsIFwiSWNpcmN1bWZsZXhcIiwgXCJJZGllcmVzaXNcIiwgXCJJZ3JhdmVcIiwgXCJPYWN1dGVcIiwgXCJPY2lyY3VtZmxleFwiLCBcImFwcGxlXCIsIFwiT2dyYXZlXCIsIFwiVWFjdXRlXCIsIFwiVWNpcmN1bWZsZXhcIiwgXCJVZ3JhdmVcIiwgXCJkb3RsZXNzaVwiLCBcImNpcmN1bWZsZXhcIiwgXCJ0aWxkZVwiLCBcIm1hY3JvblwiLCBcImJyZXZlXCIsIFwiZG90YWNjZW50XCIsIFwicmluZ1wiLCBcImNlZGlsbGFcIiwgXCJodW5nYXJ1bWxhdXRcIiwgXCJvZ29uZWtcIiwgXCJjYXJvblwiLCBcIkxzbGFzaFwiLCBcImxzbGFzaFwiLCBcIlNjYXJvblwiLCBcInNjYXJvblwiLCBcIlpjYXJvblwiLCBcInpjYXJvblwiLCBcImJyb2tlbmJhclwiLCBcIkV0aFwiLCBcImV0aFwiLCBcIllhY3V0ZVwiLCBcInlhY3V0ZVwiLCBcIlRob3JuXCIsIFwidGhvcm5cIiwgXCJtaW51c1wiLCBcIm11bHRpcGx5XCIsIFwib25lc3VwZXJpb3JcIiwgXCJ0d29zdXBlcmlvclwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJvbmVoYWxmXCIsIFwib25lcXVhcnRlclwiLCBcInRocmVlcXVhcnRlcnNcIiwgXCJmcmFuY1wiLCBcIkdicmV2ZVwiLCBcImdicmV2ZVwiLCBcIklkb3RhY2NlbnRcIiwgXCJTY2VkaWxsYVwiLCBcInNjZWRpbGxhXCIsIFwiQ2FjdXRlXCIsIFwiY2FjdXRlXCIsIFwiQ2Nhcm9uXCIsIFwiY2Nhcm9uXCIsIFwiZGNyb2F0XCJdO1xuXG5mdW5jdGlvbiBhZGp1c3RXaWR0aHMocHJvcGVydGllcykge1xuICBpZiAoIXByb3BlcnRpZXMuZm9udE1hdHJpeCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF0gPT09IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07XG4gIHZhciBnbHlwaHNXaWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcblxuICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICBnbHlwaHNXaWR0aHNbZ2x5cGhdICo9IHNjYWxlO1xuICB9XG5cbiAgcHJvcGVydGllcy5kZWZhdWx0V2lkdGggKj0gc2NhbGU7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBidWlsdEluRW5jb2RpbmcpIHtcbiAgaWYgKHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChidWlsdEluRW5jb2RpbmcgPT09IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb3BlcnRpZXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdG9Vbmljb2RlID0gW10sXG4gICAgICBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcblxuICBmb3IgKHZhciBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICB2YXIgZ2x5cGhOYW1lID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICB2YXIgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgIHRvVW5pY29kZVtjaGFyQ29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3BlcnRpZXMudG9Vbmljb2RlLmFtZW5kKHRvVW5pY29kZSk7XG59XG5cbmZ1bmN0aW9uIGdldEZvbnRUeXBlKHR5cGUsIHN1YnR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIlR5cGUxXCI6XG4gICAgICByZXR1cm4gc3VidHlwZSA9PT0gXCJUeXBlMUNcIiA/IF91dGlsLkZvbnRUeXBlLlRZUEUxQyA6IF91dGlsLkZvbnRUeXBlLlRZUEUxO1xuXG4gICAgY2FzZSBcIkNJREZvbnRUeXBlMFwiOlxuICAgICAgcmV0dXJuIHN1YnR5cGUgPT09IFwiQ0lERm9udFR5cGUwQ1wiID8gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUwQyA6IF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMDtcblxuICAgIGNhc2UgXCJPcGVuVHlwZVwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLk9QRU5UWVBFO1xuXG4gICAgY2FzZSBcIlRydWVUeXBlXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVFJVRVRZUEU7XG5cbiAgICBjYXNlIFwiQ0lERm9udFR5cGUyXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUyO1xuXG4gICAgY2FzZSBcIk1NVHlwZTFcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5NTVRZUEUxO1xuXG4gICAgY2FzZSBcIlR5cGUwXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVFlQRTA7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLlVOS05PV047XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3ZlckdseXBoTmFtZShuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7XG4gIGlmIChnbHlwaHNVbmljb2RlTWFwW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHZhciB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGdseXBoc1VuaWNvZGVNYXApIHtcbiAgICAgIGlmIChnbHlwaHNVbmljb2RlTWFwW2tleV0gPT09IHVuaWNvZGUpIHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAoMCwgX3V0aWwuaW5mbykoXCJVbmFibGUgdG8gcmVjb3ZlciBhIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yOiBcIiArIG5hbWUpO1xuICByZXR1cm4gbmFtZTtcbn1cblxudmFyIEdseXBoID0gZnVuY3Rpb24gR2x5cGhDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBHbHlwaChmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgdGhpcy5mb250Q2hhciA9IGZvbnRDaGFyO1xuICAgIHRoaXMudW5pY29kZSA9IHVuaWNvZGU7XG4gICAgdGhpcy5hY2NlbnQgPSBhY2NlbnQ7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMudm1ldHJpYyA9IHZtZXRyaWM7XG4gICAgdGhpcy5vcGVyYXRvckxpc3RJZCA9IG9wZXJhdG9yTGlzdElkO1xuICAgIHRoaXMuaXNTcGFjZSA9IGlzU3BhY2U7XG4gICAgdGhpcy5pc0luRm9udCA9IGlzSW5Gb250O1xuICB9XG5cbiAgR2x5cGgucHJvdG90eXBlLm1hdGNoZXNGb3JDYWNoZSA9IGZ1bmN0aW9uIChmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9udENoYXIgPT09IGZvbnRDaGFyICYmIHRoaXMudW5pY29kZSA9PT0gdW5pY29kZSAmJiB0aGlzLmFjY2VudCA9PT0gYWNjZW50ICYmIHRoaXMud2lkdGggPT09IHdpZHRoICYmIHRoaXMudm1ldHJpYyA9PT0gdm1ldHJpYyAmJiB0aGlzLm9wZXJhdG9yTGlzdElkID09PSBvcGVyYXRvckxpc3RJZCAmJiB0aGlzLmlzU3BhY2UgPT09IGlzU3BhY2UgJiYgdGhpcy5pc0luRm9udCA9PT0gaXNJbkZvbnQ7XG4gIH07XG5cbiAgcmV0dXJuIEdseXBoO1xufSgpO1xuXG52YXIgVG9Vbmljb2RlTWFwID0gZnVuY3Rpb24gVG9Vbmljb2RlTWFwQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gVG9Vbmljb2RlTWFwKGNtYXAgPSBbXSkge1xuICAgIHRoaXMuX21hcCA9IGNtYXA7XG4gIH1cblxuICBUb1VuaWNvZGVNYXAucHJvdG90eXBlID0ge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwLmxlbmd0aDtcbiAgICB9LFxuXG4gICAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gdGhpcy5fbWFwKSB7XG4gICAgICAgIGNhbGxiYWNrKGNoYXJDb2RlLCB0aGlzLl9tYXBbY2hhckNvZGVdLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBoYXMoaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21hcFtpXSAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICBnZXQoaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21hcFtpXTtcbiAgICB9LFxuXG4gICAgY2hhckNvZGVPZih2YWx1ZSkge1xuICAgICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICBpZiAobWFwLmxlbmd0aCA8PSAweDEwMDAwKSB7XG4gICAgICAgIHJldHVybiBtYXAuaW5kZXhPZih2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gbWFwKSB7XG4gICAgICAgIGlmIChtYXBbY2hhckNvZGVdID09PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIC0xO1xuICAgIH0sXG5cbiAgICBhbWVuZChtYXApIHtcbiAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICB0aGlzLl9tYXBbY2hhckNvZGVdID0gbWFwW2NoYXJDb2RlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIFRvVW5pY29kZU1hcDtcbn0oKTtcblxuZXhwb3J0cy5Ub1VuaWNvZGVNYXAgPSBUb1VuaWNvZGVNYXA7XG5cbnZhciBJZGVudGl0eVRvVW5pY29kZU1hcCA9IGZ1bmN0aW9uIElkZW50aXR5VG9Vbmljb2RlTWFwQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gSWRlbnRpdHlUb1VuaWNvZGVNYXAoZmlyc3RDaGFyLCBsYXN0Q2hhcikge1xuICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyO1xuICAgIHRoaXMubGFzdENoYXIgPSBsYXN0Q2hhcjtcbiAgfVxuXG4gIElkZW50aXR5VG9Vbmljb2RlTWFwLnByb3RvdHlwZSA9IHtcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdENoYXIgKyAxIC0gdGhpcy5maXJzdENoYXI7XG4gICAgfSxcblxuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLmZpcnN0Q2hhciwgaWkgPSB0aGlzLmxhc3RDaGFyOyBpIDw9IGlpOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2soaSwgaSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhcyhpKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXI7XG4gICAgfSxcblxuICAgIGdldChpKSB7XG4gICAgICBpZiAodGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcblxuICAgIGNoYXJDb2RlT2Yodikge1xuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodikgJiYgdiA+PSB0aGlzLmZpcnN0Q2hhciAmJiB2IDw9IHRoaXMubGFzdENoYXIgPyB2IDogLTE7XG4gICAgfSxcblxuICAgIGFtZW5kKG1hcCkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpXCIpO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gSWRlbnRpdHlUb1VuaWNvZGVNYXA7XG59KCk7XG5cbmV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBJZGVudGl0eVRvVW5pY29kZU1hcDtcblxudmFyIE9wZW5UeXBlRmlsZUJ1aWxkZXIgPSBmdW5jdGlvbiBPcGVuVHlwZUZpbGVCdWlsZGVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gd3JpdGVJbnQxNihkZXN0LCBvZmZzZXQsIG51bSkge1xuICAgIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiA4ICYgMHhmZjtcbiAgICBkZXN0W29mZnNldCArIDFdID0gbnVtICYgMHhmZjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50MzIoZGVzdCwgb2Zmc2V0LCBudW0pIHtcbiAgICBkZXN0W29mZnNldF0gPSBudW0gPj4gMjQgJiAweGZmO1xuICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gPj4gMTYgJiAweGZmO1xuICAgIGRlc3Rbb2Zmc2V0ICsgMl0gPSBudW0gPj4gOCAmIDB4ZmY7XG4gICAgZGVzdFtvZmZzZXQgKyAzXSA9IG51bSAmIDB4ZmY7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZURhdGEoZGVzdCwgb2Zmc2V0LCBkYXRhKSB7XG4gICAgdmFyIGksIGlpO1xuXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBkZXN0LnNldChkYXRhLCBvZmZzZXQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAoaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGRlc3Rbb2Zmc2V0KytdID0gZGF0YS5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgZGVzdFtvZmZzZXQrK10gPSBkYXRhW2ldICYgMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBPcGVuVHlwZUZpbGVCdWlsZGVyKHNmbnQpIHtcbiAgICB0aGlzLnNmbnQgPSBzZm50O1xuICAgIHRoaXMudGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl9nZXRTZWFyY2hQYXJhbXMoZW50cmllc0NvdW50LCBlbnRyeVNpemUpIHtcbiAgICB2YXIgbWF4UG93ZXIyID0gMSxcbiAgICAgICAgbG9nMiA9IDA7XG5cbiAgICB3aGlsZSAoKG1heFBvd2VyMiBeIGVudHJpZXNDb3VudCkgPiBtYXhQb3dlcjIpIHtcbiAgICAgIG1heFBvd2VyMiA8PD0gMTtcbiAgICAgIGxvZzIrKztcbiAgICB9XG5cbiAgICB2YXIgc2VhcmNoUmFuZ2UgPSBtYXhQb3dlcjIgKiBlbnRyeVNpemU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJhbmdlOiBzZWFyY2hSYW5nZSxcbiAgICAgIGVudHJ5OiBsb2cyLFxuICAgICAgcmFuZ2VTaGlmdDogZW50cnlTaXplICogZW50cmllc0NvdW50IC0gc2VhcmNoUmFuZ2VcbiAgICB9O1xuICB9O1xuXG4gIHZhciBPVEZfSEVBREVSX1NJWkUgPSAxMjtcbiAgdmFyIE9URl9UQUJMRV9FTlRSWV9TSVpFID0gMTY7XG4gIE9wZW5UeXBlRmlsZUJ1aWxkZXIucHJvdG90eXBlID0ge1xuICAgIHRvQXJyYXk6IGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXJfdG9BcnJheSgpIHtcbiAgICAgIHZhciBzZm50ID0gdGhpcy5zZm50O1xuICAgICAgdmFyIHRhYmxlcyA9IHRoaXMudGFibGVzO1xuICAgICAgdmFyIHRhYmxlc05hbWVzID0gT2JqZWN0LmtleXModGFibGVzKTtcbiAgICAgIHRhYmxlc05hbWVzLnNvcnQoKTtcbiAgICAgIHZhciBudW1UYWJsZXMgPSB0YWJsZXNOYW1lcy5sZW5ndGg7XG4gICAgICB2YXIgaSwgaiwgamosIHRhYmxlLCB0YWJsZU5hbWU7XG4gICAgICB2YXIgb2Zmc2V0ID0gT1RGX0hFQURFUl9TSVpFICsgbnVtVGFibGVzICogT1RGX1RBQkxFX0VOVFJZX1NJWkU7XG4gICAgICB2YXIgdGFibGVPZmZzZXRzID0gW29mZnNldF07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICB0YWJsZSA9IHRhYmxlc1t0YWJsZXNOYW1lc1tpXV07XG4gICAgICAgIHZhciBwYWRkZWRMZW5ndGggPSAodGFibGUubGVuZ3RoICsgMyAmIH4zKSA+Pj4gMDtcbiAgICAgICAgb2Zmc2V0ICs9IHBhZGRlZExlbmd0aDtcbiAgICAgICAgdGFibGVPZmZzZXRzLnB1c2gob2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpbGUgPSBuZXcgVWludDhBcnJheShvZmZzZXQpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVGFibGVzOyBpKyspIHtcbiAgICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgICB3cml0ZURhdGEoZmlsZSwgdGFibGVPZmZzZXRzW2ldLCB0YWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZm50ID09PSBcInRydWVcIikge1xuICAgICAgICBzZm50ID0gKDAsIF91dGlsLnN0cmluZzMyKSgweDAwMDEwMDAwKTtcbiAgICAgIH1cblxuICAgICAgZmlsZVswXSA9IHNmbnQuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICBmaWxlWzFdID0gc2ZudC5jaGFyQ29kZUF0KDEpICYgMHhmZjtcbiAgICAgIGZpbGVbMl0gPSBzZm50LmNoYXJDb2RlQXQoMikgJiAweGZmO1xuICAgICAgZmlsZVszXSA9IHNmbnQuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgICB3cml0ZUludDE2KGZpbGUsIDQsIG51bVRhYmxlcyk7XG4gICAgICB2YXIgc2VhcmNoUGFyYW1zID0gT3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMobnVtVGFibGVzLCAxNik7XG4gICAgICB3cml0ZUludDE2KGZpbGUsIDYsIHNlYXJjaFBhcmFtcy5yYW5nZSk7XG4gICAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7XG4gICAgICB3cml0ZUludDE2KGZpbGUsIDEwLCBzZWFyY2hQYXJhbXMucmFuZ2VTaGlmdCk7XG4gICAgICBvZmZzZXQgPSBPVEZfSEVBREVSX1NJWkU7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICB0YWJsZU5hbWUgPSB0YWJsZXNOYW1lc1tpXTtcbiAgICAgICAgZmlsZVtvZmZzZXRdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMCkgJiAweGZmO1xuICAgICAgICBmaWxlW29mZnNldCArIDFdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgICBmaWxlW29mZnNldCArIDJdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMikgJiAweGZmO1xuICAgICAgICBmaWxlW29mZnNldCArIDNdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMykgJiAweGZmO1xuICAgICAgICB2YXIgY2hlY2tzdW0gPSAwO1xuXG4gICAgICAgIGZvciAoaiA9IHRhYmxlT2Zmc2V0c1tpXSwgamogPSB0YWJsZU9mZnNldHNbaSArIDFdOyBqIDwgamo7IGogKz0gNCkge1xuICAgICAgICAgIHZhciBxdWFkID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGZpbGUsIGopO1xuICAgICAgICAgIGNoZWNrc3VtID0gY2hlY2tzdW0gKyBxdWFkID4+PiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyA0LCBjaGVja3N1bSk7XG4gICAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgOCwgdGFibGVPZmZzZXRzW2ldKTtcbiAgICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyAxMiwgdGFibGVzW3RhYmxlTmFtZV0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IE9URl9UQUJMRV9FTlRSWV9TSVpFO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9LFxuICAgIGFkZFRhYmxlOiBmdW5jdGlvbiBPcGVuVHlwZUZpbGVCdWlsZGVyX2FkZFRhYmxlKHRhZywgZGF0YSkge1xuICAgICAgaWYgKHRhZyBpbiB0aGlzLnRhYmxlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBcIiArIHRhZyArIFwiIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRhYmxlc1t0YWddID0gZGF0YTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBPcGVuVHlwZUZpbGVCdWlsZGVyO1xufSgpO1xuXG52YXIgRm9udCA9IGZ1bmN0aW9uIEZvbnRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgY2hhckNvZGU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmxvYWRlZE5hbWUgPSBwcm9wZXJ0aWVzLmxvYWRlZE5hbWU7XG4gICAgdGhpcy5pc1R5cGUzRm9udCA9IHByb3BlcnRpZXMuaXNUeXBlM0ZvbnQ7XG4gICAgdGhpcy5taXNzaW5nRmlsZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2x5cGhDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5pc1NlcmlmRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU2VyaWYpO1xuICAgIHRoaXMuaXNTeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgRm9udEZsYWdzLlN5bWJvbGljKTtcbiAgICB0aGlzLmlzTW9ub3NwYWNlID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5GaXhlZFBpdGNoKTtcbiAgICB2YXIgdHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICB2YXIgc3VidHlwZSA9IHByb3BlcnRpZXMuc3VidHlwZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgbGV0IGZhbGxiYWNrTmFtZSA9IFwic2Fucy1zZXJpZlwiO1xuXG4gICAgaWYgKHRoaXMuaXNNb25vc3BhY2UpIHtcbiAgICAgIGZhbGxiYWNrTmFtZSA9IFwibW9ub3NwYWNlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VyaWZGb250KSB7XG4gICAgICBmYWxsYmFja05hbWUgPSBcInNlcmlmXCI7XG4gICAgfVxuXG4gICAgdGhpcy5mYWxsYmFja05hbWUgPSBmYWxsYmFja05hbWU7XG4gICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgdGhpcy53aWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcbiAgICB0aGlzLmRlZmF1bHRXaWR0aCA9IHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoO1xuICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7XG4gICAgdGhpcy5jTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgIHRoaXMuYXNjZW50ID0gcHJvcGVydGllcy5hc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5kZXNjZW50ID0gcHJvcGVydGllcy5kZXNjZW50IC8gUERGX0dMWVBIX1NQQUNFX1VOSVRTO1xuICAgIHRoaXMuZm9udE1hdHJpeCA9IHByb3BlcnRpZXMuZm9udE1hdHJpeDtcbiAgICB0aGlzLmJib3ggPSBwcm9wZXJ0aWVzLmJib3g7XG4gICAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZztcbiAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIHRoaXMuZmFsbGJhY2tUb1VuaWNvZGUgPSBwcm9wZXJ0aWVzLmZhbGxiYWNrVG9Vbmljb2RlIHx8IG5ldyBUb1VuaWNvZGVNYXAoKTtcbiAgICB0aGlzLnRvRm9udENoYXIgPSBbXTtcblxuICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT09IFwiVHlwZTNcIikge1xuICAgICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICAgIHRoaXMudG9Gb250Q2hhcltjaGFyQ29kZV0gPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXSB8fCBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9udFR5cGUgPSBfdXRpbC5Gb250VHlwZS5UWVBFMztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNpZEVuY29kaW5nID0gcHJvcGVydGllcy5jaWRFbmNvZGluZztcbiAgICB0aGlzLnZlcnRpY2FsID0gISFwcm9wZXJ0aWVzLnZlcnRpY2FsO1xuXG4gICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgIHRoaXMudm1ldHJpY3MgPSBwcm9wZXJ0aWVzLnZtZXRyaWNzO1xuICAgICAgdGhpcy5kZWZhdWx0Vk1ldHJpY3MgPSBwcm9wZXJ0aWVzLmRlZmF1bHRWTWV0cmljcztcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5pc0VtcHR5KSB7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiBcIicgKyBuYW1lICsgJ1wiICgnICsgdGhpcy5sb2FkZWROYW1lICsgXCIpXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgW3R5cGUsIHN1YnR5cGVdID0gZ2V0Rm9udEZpbGVUeXBlKGZpbGUsIHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHR5cGUgIT09IHRoaXMudHlwZSB8fCBzdWJ0eXBlICE9PSB0aGlzLnN1YnR5cGUpIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkluY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogXCIgKyBgJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7dHlwZX0vJHtzdWJ0eXBlfS5gKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdmFyIGRhdGE7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiTU1UeXBlMVwiOlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1NVHlwZTEgZm9udCAoXCIgKyBuYW1lICsgXCIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuXCIpO1xuXG4gICAgICAgIGNhc2UgXCJUeXBlMVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUwXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIHZhciBjZmYgPSBzdWJ0eXBlID09PSBcIlR5cGUxQ1wiIHx8IHN1YnR5cGUgPT09IFwiQ0lERm9udFR5cGUwQ1wiID8gbmV3IENGRkZvbnQoZmlsZSwgcHJvcGVydGllcykgOiBuZXcgVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBkYXRhID0gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9wZW5UeXBlXCI6XG4gICAgICAgIGNhc2UgXCJUcnVlVHlwZVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUyXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmNoZWNrQW5kUmVwYWlyKG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuVHlwZSkge1xuICAgICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdHlwZSA9IFwiT3BlblR5cGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRm9udCAke3R5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoZSk7XG4gICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmZvbnRUeXBlID0gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSk7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMud2lkdGhzID0gcHJvcGVydGllcy53aWR0aHM7XG4gICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIHRoaXMuc2VhY01hcCA9IHByb3BlcnRpZXMuc2VhY01hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludDE2KGIwLCBiMSkge1xuICAgIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoYnl0ZXMsIGluZGV4LCB2YWx1ZSkge1xuICAgIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZTtcbiAgICBieXRlc1tpbmRleF0gPSB2YWx1ZSA+Pj4gODtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25lZEludDE2KGIwLCBiMSkge1xuICAgIHZhciB2YWx1ZSA9IChiMCA8PCA4KSArIGIxO1xuICAgIHJldHVybiB2YWx1ZSAmIDEgPDwgMTUgPyB2YWx1ZSAtIDB4MTAwMDAgOiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludDMyKGIwLCBiMSwgYjIsIGIzKSB7XG4gICAgcmV0dXJuIChiMCA8PCAyNCkgKyAoYjEgPDwgMTYpICsgKGIyIDw8IDgpICsgYjM7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmcxNih2YWx1ZSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2FmZVN0cmluZzE2KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID4gMHg3ZmZmKSB7XG4gICAgICB2YWx1ZSA9IDB4N2ZmZjtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgLTB4ODAwMCkge1xuICAgICAgdmFsdWUgPSAtMHg4MDAwO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcnVlVHlwZUZpbGUoZmlsZSkge1xuICAgIHZhciBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgICByZXR1cm4gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZpbGUpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09IFwidHRjZlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZmlsZSkge1xuICAgIHZhciBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09IFwiT1RUT1wiO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUeXBlMUZpbGUoZmlsZSkge1xuICAgIHZhciBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcygyKTtcblxuICAgIGlmIChoZWFkZXJbMF0gPT09IDB4MjUgJiYgaGVhZGVyWzFdID09PSAweDIxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyWzBdID09PSAweDgwICYmIGhlYWRlclsxXSA9PT0gMHgwMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDRkZGaWxlKGZpbGUpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcblxuICAgIGlmIChoZWFkZXJbMF0gPj0gMSAmJiBoZWFkZXJbM10gPj0gMSAmJiBoZWFkZXJbM10gPD0gNCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rm9udEZpbGVUeXBlKGZpbGUsIHtcbiAgICB0eXBlLFxuICAgIHN1YnR5cGUsXG4gICAgY29tcG9zaXRlXG4gIH0pIHtcbiAgICBsZXQgZmlsZVR5cGUsIGZpbGVTdWJ0eXBlO1xuXG4gICAgaWYgKGlzVHJ1ZVR5cGVGaWxlKGZpbGUpIHx8IGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmaWxlKSkge1xuICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICBmaWxlVHlwZSA9IFwiQ0lERm9udFR5cGUyXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlVHlwZSA9IFwiVHJ1ZVR5cGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzT3BlblR5cGVGaWxlKGZpbGUpKSB7XG4gICAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVUeXBlID0gXCJPcGVuVHlwZVwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUeXBlMUZpbGUoZmlsZSkpIHtcbiAgICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgICAgZmlsZVR5cGUgPSBcIkNJREZvbnRUeXBlMFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZVR5cGUgPSB0eXBlID09PSBcIk1NVHlwZTFcIiA/IFwiTU1UeXBlMVwiIDogXCJUeXBlMVwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNDRkZGaWxlKGZpbGUpKSB7XG4gICAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTBcIjtcbiAgICAgICAgZmlsZVN1YnR5cGUgPSBcIkNJREZvbnRUeXBlMENcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gXCJNTVR5cGUxXCIgPyBcIk1NVHlwZTFcIiA6IFwiVHlwZTFcIjtcbiAgICAgICAgZmlsZVN1YnR5cGUgPSBcIlR5cGUxQ1wiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLlwiKTtcbiAgICAgIGZpbGVUeXBlID0gdHlwZTtcbiAgICAgIGZpbGVTdWJ0eXBlID0gc3VidHlwZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2ZpbGVUeXBlLCBmaWxlU3VidHlwZV07XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZW5jb2RpbmcsIGdseXBoc1VuaWNvZGVNYXAsIGRpZmZlcmVuY2VzKSB7XG4gICAgdmFyIHRvRm9udENoYXIgPSBbXSxcbiAgICAgICAgdW5pY29kZTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGVuY29kaW5nLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgICB0b0ZvbnRDaGFyW2ldID0gdW5pY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGRpZmZlcmVuY2VzW2NoYXJDb2RlXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgICB0b0ZvbnRDaGFyWytjaGFyQ29kZV0gPSB1bmljb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b0ZvbnRDaGFyO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0TWFwcGluZyhjaGFyQ29kZVRvR2x5cGhJZCwgaGFzR2x5cGgsIG5ld0dseXBoWmVyb0lkKSB7XG4gICAgdmFyIG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHRvRm9udENoYXIgPSBbXTtcbiAgICB2YXIgcHJpdmF0ZVVzZUFyZWFJbmRleCA9IDA7XG4gICAgdmFyIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICB2YXIgcHJpdmF0ZVVzZU9mZmV0RW5kID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMV07XG5cbiAgICBmb3IgKHZhciBvcmlnaW5hbENoYXJDb2RlIGluIGNoYXJDb2RlVG9HbHlwaElkKSB7XG4gICAgICBvcmlnaW5hbENoYXJDb2RlIHw9IDA7XG4gICAgICB2YXIgZ2x5cGhJZCA9IGNoYXJDb2RlVG9HbHlwaElkW29yaWdpbmFsQ2hhckNvZGVdO1xuXG4gICAgICBpZiAoIWhhc0dseXBoKGdseXBoSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA+IHByaXZhdGVVc2VPZmZldEVuZCkge1xuICAgICAgICBwcml2YXRlVXNlQXJlYUluZGV4Kys7XG5cbiAgICAgICAgaWYgKHByaXZhdGVVc2VBcmVhSW5kZXggPj0gUFJJVkFURV9VU0VfQVJFQVMubGVuZ3RoKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzBdO1xuICAgICAgICBwcml2YXRlVXNlT2ZmZXRFbmQgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVsxXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZvbnRDaGFyQ29kZSA9IG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKztcblxuICAgICAgaWYgKGdseXBoSWQgPT09IDApIHtcbiAgICAgICAgZ2x5cGhJZCA9IG5ld0dseXBoWmVyb0lkO1xuICAgICAgfVxuXG4gICAgICBuZXdNYXBbZm9udENoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICB0b0ZvbnRDaGFyW29yaWdpbmFsQ2hhckNvZGVdID0gZm9udENoYXJDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0ZvbnRDaGFyLFxuICAgICAgY2hhckNvZGVUb0dseXBoSWQ6IG5ld01hcCxcbiAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGVcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmFuZ2VzKGdseXBocywgbnVtR2x5cGhzKSB7XG4gICAgdmFyIGNvZGVzID0gW107XG5cbiAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBnbHlwaHMpIHtcbiAgICAgIGlmIChnbHlwaHNbY2hhckNvZGVdID49IG51bUdseXBocykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29kZXMucHVzaCh7XG4gICAgICAgIGZvbnRDaGFyQ29kZTogY2hhckNvZGUgfCAwLFxuICAgICAgICBnbHlwaElkOiBnbHlwaHNbY2hhckNvZGVdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb2Rlcy5wdXNoKHtcbiAgICAgICAgZm9udENoYXJDb2RlOiAwLFxuICAgICAgICBnbHlwaElkOiAwXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb2Rlcy5zb3J0KGZ1bmN0aW9uIGZvbnRHZXRSYW5nZXNTb3J0KGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmZvbnRDaGFyQ29kZSAtIGIuZm9udENoYXJDb2RlO1xuICAgIH0pO1xuICAgIHZhciByYW5nZXMgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gY29kZXMubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgbiA9IDA7IG4gPCBsZW5ndGg7KSB7XG4gICAgICB2YXIgc3RhcnQgPSBjb2Rlc1tuXS5mb250Q2hhckNvZGU7XG4gICAgICB2YXIgY29kZUluZGljZXMgPSBbY29kZXNbbl0uZ2x5cGhJZF07XG4gICAgICArK247XG4gICAgICB2YXIgZW5kID0gc3RhcnQ7XG5cbiAgICAgIHdoaWxlIChuIDwgbGVuZ3RoICYmIGVuZCArIDEgPT09IGNvZGVzW25dLmZvbnRDaGFyQ29kZSkge1xuICAgICAgICBjb2RlSW5kaWNlcy5wdXNoKGNvZGVzW25dLmdseXBoSWQpO1xuICAgICAgICArK2VuZDtcbiAgICAgICAgKytuO1xuXG4gICAgICAgIGlmIChlbmQgPT09IDB4ZmZmZikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJhbmdlcy5wdXNoKFtzdGFydCwgZW5kLCBjb2RlSW5kaWNlc10pO1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZ2x5cGhzLCBudW1HbHlwaHMpIHtcbiAgICB2YXIgcmFuZ2VzID0gZ2V0UmFuZ2VzKGdseXBocywgbnVtR2x5cGhzKTtcbiAgICB2YXIgbnVtVGFibGVzID0gcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXVsxXSA+IDB4ZmZmZiA/IDIgOiAxO1xuICAgIHZhciBjbWFwID0gXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihudW1UYWJsZXMpICsgXCJcXHgwMFxceDAzXCIgKyBcIlxceDAwXFx4MDFcIiArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDgpO1xuICAgIHZhciBpLCBpaSwgaiwgamo7XG5cbiAgICBmb3IgKGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIGlmIChyYW5nZXNbaV1bMF0gPD0gMHhmZmZmKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBibXBMZW5ndGggPSBpICsgMTtcblxuICAgIGlmIChyYW5nZXNbaV1bMF0gPCAweGZmZmYgJiYgcmFuZ2VzW2ldWzFdID09PSAweGZmZmYpIHtcbiAgICAgIHJhbmdlc1tpXVsxXSA9IDB4ZmZmZTtcbiAgICB9XG5cbiAgICB2YXIgdHJhaWxpbmdSYW5nZXNDb3VudCA9IHJhbmdlc1tpXVsxXSA8IDB4ZmZmZiA/IDEgOiAwO1xuICAgIHZhciBzZWdDb3VudCA9IGJtcExlbmd0aCArIHRyYWlsaW5nUmFuZ2VzQ291bnQ7XG4gICAgdmFyIHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKHNlZ0NvdW50LCAyKTtcbiAgICB2YXIgc3RhcnRDb3VudCA9IFwiXCI7XG4gICAgdmFyIGVuZENvdW50ID0gXCJcIjtcbiAgICB2YXIgaWREZWx0YXMgPSBcIlwiO1xuICAgIHZhciBpZFJhbmdlT2Zmc2V0cyA9IFwiXCI7XG4gICAgdmFyIGdseXBoc0lkcyA9IFwiXCI7XG4gICAgdmFyIGJpYXMgPSAwO1xuICAgIHZhciByYW5nZSwgc3RhcnQsIGVuZCwgY29kZXM7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGJtcExlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgc3RhcnQgPSByYW5nZVswXTtcbiAgICAgIGVuZCA9IHJhbmdlWzFdO1xuICAgICAgc3RhcnRDb3VudCArPSBzdHJpbmcxNihzdGFydCk7XG4gICAgICBlbmRDb3VudCArPSBzdHJpbmcxNihlbmQpO1xuICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgIHZhciBjb250aWd1b3VzID0gdHJ1ZTtcblxuICAgICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICAgIGlmIChjb2Rlc1tqXSAhPT0gY29kZXNbaiAtIDFdICsgMSkge1xuICAgICAgICAgIGNvbnRpZ3VvdXMgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbnRpZ3VvdXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IChzZWdDb3VudCAtIGkpICogMiArIGJpYXMgKiAyO1xuICAgICAgICBiaWFzICs9IGVuZCAtIHN0YXJ0ICsgMTtcbiAgICAgICAgaWREZWx0YXMgKz0gc3RyaW5nMTYoMCk7XG4gICAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KG9mZnNldCk7XG5cbiAgICAgICAgZm9yIChqID0gMCwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICAgICAgZ2x5cGhzSWRzICs9IHN0cmluZzE2KGNvZGVzW2pdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHN0YXJ0Q29kZSA9IGNvZGVzWzBdO1xuICAgICAgICBpZERlbHRhcyArPSBzdHJpbmcxNihzdGFydENvZGUgLSBzdGFydCAmIDB4ZmZmZik7XG4gICAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0cmFpbGluZ1Jhbmdlc0NvdW50ID4gMCkge1xuICAgICAgZW5kQ291bnQgKz0gXCJcXHhGRlxceEZGXCI7XG4gICAgICBzdGFydENvdW50ICs9IFwiXFx4RkZcXHhGRlwiO1xuICAgICAgaWREZWx0YXMgKz0gXCJcXHgwMFxceDAxXCI7XG4gICAgICBpZFJhbmdlT2Zmc2V0cyArPSBcIlxceDAwXFx4MDBcIjtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0MzE0ID0gXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNigyICogc2VnQ291bnQpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLnJhbmdlKSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5lbnRyeSkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2VTaGlmdCkgKyBlbmRDb3VudCArIFwiXFx4MDBcXHgwMFwiICsgc3RhcnRDb3VudCArIGlkRGVsdGFzICsgaWRSYW5nZU9mZnNldHMgKyBnbHlwaHNJZHM7XG4gICAgdmFyIGZvcm1hdDMxMDEyID0gXCJcIjtcbiAgICB2YXIgaGVhZGVyMzEwMTIgPSBcIlwiO1xuXG4gICAgaWYgKG51bVRhYmxlcyA+IDEpIHtcbiAgICAgIGNtYXAgKz0gXCJcXHgwMFxceDAzXCIgKyBcIlxceDAwXFx4MEFcIiArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDggKyA0ICsgZm9ybWF0MzE0Lmxlbmd0aCk7XG4gICAgICBmb3JtYXQzMTAxMiA9IFwiXCI7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gcmFuZ2VzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICAgIHN0YXJ0ID0gcmFuZ2VbMF07XG4gICAgICAgIGNvZGVzID0gcmFuZ2VbMl07XG4gICAgICAgIHZhciBjb2RlID0gY29kZXNbMF07XG5cbiAgICAgICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICAgICAgaWYgKGNvZGVzW2pdICE9PSBjb2Rlc1tqIC0gMV0gKyAxKSB7XG4gICAgICAgICAgICBlbmQgPSByYW5nZVswXSArIGogLSAxO1xuICAgICAgICAgICAgZm9ybWF0MzEwMTIgKz0gKDAsIF91dGlsLnN0cmluZzMyKShzdGFydCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGVuZCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgICAgICAgICAgc3RhcnQgPSBlbmQgKyAxO1xuICAgICAgICAgICAgY29kZSA9IGNvZGVzW2pdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShyYW5nZVsxXSkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICBoZWFkZXIzMTAxMiA9IFwiXFx4MDBcXHgwQ1wiICsgXCJcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGZvcm1hdDMxMDEyLmxlbmd0aCArIDE2KSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoIC8gMTIpO1xuICAgIH1cblxuICAgIHJldHVybiBjbWFwICsgXCJcXHgwMFxceDA0XCIgKyBzdHJpbmcxNihmb3JtYXQzMTQubGVuZ3RoICsgNCkgKyBmb3JtYXQzMTQgKyBoZWFkZXIzMTAxMiArIGZvcm1hdDMxMDEyO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShvczIsIGZpbGUpIHtcbiAgICBmaWxlLnBvcyA9IChmaWxlLnN0YXJ0IHx8IDApICsgb3MyLm9mZnNldDtcbiAgICB2YXIgdmVyc2lvbiA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgZmlsZS5za2lwKDYwKTtcbiAgICB2YXIgc2VsZWN0aW9uID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgIGlmICh2ZXJzaW9uIDwgNCAmJiBzZWxlY3Rpb24gJiAweDAzMDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RDaGFyID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICB2YXIgbGFzdENoYXIgPSBmaWxlLmdldFVpbnQxNigpO1xuXG4gICAgaWYgKGZpcnN0Q2hhciA+IGxhc3RDaGFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZmlsZS5za2lwKDYpO1xuICAgIHZhciB1c1dpbkFzY2VudCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICBpZiAodXNXaW5Bc2NlbnQgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBvczIuZGF0YVs4XSA9IG9zMi5kYXRhWzldID0gMDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9TMlRhYmxlKHByb3BlcnRpZXMsIGNoYXJzdHJpbmdzLCBvdmVycmlkZSkge1xuICAgIG92ZXJyaWRlID0gb3ZlcnJpZGUgfHwge1xuICAgICAgdW5pdHNQZXJFbTogMCxcbiAgICAgIHlNYXg6IDAsXG4gICAgICB5TWluOiAwLFxuICAgICAgYXNjZW50OiAwLFxuICAgICAgZGVzY2VudDogMFxuICAgIH07XG4gICAgdmFyIHVsVW5pY29kZVJhbmdlMSA9IDA7XG4gICAgdmFyIHVsVW5pY29kZVJhbmdlMiA9IDA7XG4gICAgdmFyIHVsVW5pY29kZVJhbmdlMyA9IDA7XG4gICAgdmFyIHVsVW5pY29kZVJhbmdlNCA9IDA7XG4gICAgdmFyIGZpcnN0Q2hhckluZGV4ID0gbnVsbDtcbiAgICB2YXIgbGFzdENoYXJJbmRleCA9IDA7XG5cbiAgICBpZiAoY2hhcnN0cmluZ3MpIHtcbiAgICAgIGZvciAodmFyIGNvZGUgaW4gY2hhcnN0cmluZ3MpIHtcbiAgICAgICAgY29kZSB8PSAwO1xuXG4gICAgICAgIGlmIChmaXJzdENoYXJJbmRleCA+IGNvZGUgfHwgIWZpcnN0Q2hhckluZGV4KSB7XG4gICAgICAgICAgZmlyc3RDaGFySW5kZXggPSBjb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RDaGFySW5kZXggPCBjb2RlKSB7XG4gICAgICAgICAgbGFzdENoYXJJbmRleCA9IGNvZGU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcG9zaXRpb24gPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZVJhbmdlRm9yKShjb2RlKTtcblxuICAgICAgICBpZiAocG9zaXRpb24gPCAzMikge1xuICAgICAgICAgIHVsVW5pY29kZVJhbmdlMSB8PSAxIDw8IHBvc2l0aW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgNjQpIHtcbiAgICAgICAgICB1bFVuaWNvZGVSYW5nZTIgfD0gMSA8PCBwb3NpdGlvbiAtIDMyO1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgOTYpIHtcbiAgICAgICAgICB1bFVuaWNvZGVSYW5nZTMgfD0gMSA8PCBwb3NpdGlvbiAtIDY0O1xuICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMTIzKSB7XG4gICAgICAgICAgdWxVbmljb2RlUmFuZ2U0IHw9IDEgPDwgcG9zaXRpb24gLSA5NjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDaGFySW5kZXggPiAweGZmZmYpIHtcbiAgICAgICAgbGFzdENoYXJJbmRleCA9IDB4ZmZmZjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RDaGFySW5kZXggPSAwO1xuICAgICAgbGFzdENoYXJJbmRleCA9IDI1NTtcbiAgICB9XG5cbiAgICB2YXIgYmJveCA9IHByb3BlcnRpZXMuYmJveCB8fCBbMCwgMCwgMCwgMF07XG4gICAgdmFyIHVuaXRzUGVyRW0gPSBvdmVycmlkZS51bml0c1BlckVtIHx8IDEgLyAocHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXTtcbiAgICB2YXIgc2NhbGUgPSBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA/IDEuMCA6IHVuaXRzUGVyRW0gLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdmFyIHR5cG9Bc2NlbnQgPSBvdmVycmlkZS5hc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmFzY2VudCB8fCBiYm94WzNdKSk7XG4gICAgdmFyIHR5cG9EZXNjZW50ID0gb3ZlcnJpZGUuZGVzY2VudCB8fCBNYXRoLnJvdW5kKHNjYWxlICogKHByb3BlcnRpZXMuZGVzY2VudCB8fCBiYm94WzFdKSk7XG5cbiAgICBpZiAodHlwb0Rlc2NlbnQgPiAwICYmIHByb3BlcnRpZXMuZGVzY2VudCA+IDAgJiYgYmJveFsxXSA8IDApIHtcbiAgICAgIHR5cG9EZXNjZW50ID0gLXR5cG9EZXNjZW50O1xuICAgIH1cblxuICAgIHZhciB3aW5Bc2NlbnQgPSBvdmVycmlkZS55TWF4IHx8IHR5cG9Bc2NlbnQ7XG4gICAgdmFyIHdpbkRlc2NlbnQgPSAtb3ZlcnJpZGUueU1pbiB8fCAtdHlwb0Rlc2NlbnQ7XG4gICAgcmV0dXJuIFwiXFx4MDBcXHgwM1wiICsgXCJcXHgwMlxceDI0XCIgKyBcIlxceDAxXFx4RjRcIiArIFwiXFx4MDBcXHgwNVwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAyXFx4OEFcIiArIFwiXFx4MDJcXHhCQlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4OENcIiArIFwiXFx4MDJcXHg4QVwiICsgXCJcXHgwMlxceEJCXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDFcXHhERlwiICsgXCJcXHgwMFxceDMxXCIgKyBcIlxceDAxXFx4MDJcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDZcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUocHJvcGVydGllcy5maXhlZFBpdGNoID8gMHgwOSA6IDB4MDApICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikodWxVbmljb2RlUmFuZ2UxKSArICgwLCBfdXRpbC5zdHJpbmczMikodWxVbmljb2RlUmFuZ2UyKSArICgwLCBfdXRpbC5zdHJpbmczMikodWxVbmljb2RlUmFuZ2UzKSArICgwLCBfdXRpbC5zdHJpbmczMikodWxVbmljb2RlUmFuZ2U0KSArIFwiXFx4MkFcXHgzMlxceDMxXFx4MkFcIiArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAxIDogMCkgKyBzdHJpbmcxNihmaXJzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmZpcnN0Q2hhcikgKyBzdHJpbmcxNihsYXN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMubGFzdENoYXIpICsgc3RyaW5nMTYodHlwb0FzY2VudCkgKyBzdHJpbmcxNih0eXBvRGVzY2VudCkgKyBcIlxceDAwXFx4NjRcIiArIHN0cmluZzE2KHdpbkFzY2VudCkgKyBzdHJpbmcxNih3aW5EZXNjZW50KSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIHN0cmluZzE2KHByb3BlcnRpZXMueEhlaWdodCkgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzdHJpbmcxNigwKSArIHN0cmluZzE2KGZpcnN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMuZmlyc3RDaGFyKSArIFwiXFx4MDBcXHgwM1wiO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUG9zdFRhYmxlKHByb3BlcnRpZXMpIHtcbiAgICB2YXIgYW5nbGUgPSBNYXRoLmZsb29yKHByb3BlcnRpZXMuaXRhbGljQW5nbGUgKiAyICoqIDE2KTtcbiAgICByZXR1cm4gXCJcXHgwMFxceDAzXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKShhbmdsZSkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKShwcm9wZXJ0aWVzLmZpeGVkUGl0Y2gpICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTmFtZVRhYmxlKG5hbWUsIHByb3RvKSB7XG4gICAgaWYgKCFwcm90bykge1xuICAgICAgcHJvdG8gPSBbW10sIFtdXTtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5ncyA9IFtwcm90b1swXVswXSB8fCBcIk9yaWdpbmFsIGxpY2VuY2VcIiwgcHJvdG9bMF1bMV0gfHwgbmFtZSwgcHJvdG9bMF1bMl0gfHwgXCJVbmtub3duXCIsIHByb3RvWzBdWzNdIHx8IFwidW5pcXVlSURcIiwgcHJvdG9bMF1bNF0gfHwgbmFtZSwgcHJvdG9bMF1bNV0gfHwgXCJWZXJzaW9uIDAuMTFcIiwgcHJvdG9bMF1bNl0gfHwgXCJcIiwgcHJvdG9bMF1bN10gfHwgXCJVbmtub3duXCIsIHByb3RvWzBdWzhdIHx8IFwiVW5rbm93blwiLCBwcm90b1swXVs5XSB8fCBcIlVua25vd25cIl07XG4gICAgdmFyIHN0cmluZ3NVbmljb2RlID0gW107XG4gICAgdmFyIGksIGlpLCBqLCBqaiwgc3RyO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBzdHJpbmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN0ciA9IHByb3RvWzFdW2ldIHx8IHN0cmluZ3NbaV07XG4gICAgICB2YXIgc3RyQnVmVW5pY29kZSA9IFtdO1xuXG4gICAgICBmb3IgKGogPSAwLCBqaiA9IHN0ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIHN0ckJ1ZlVuaWNvZGUucHVzaChzdHJpbmcxNihzdHIuY2hhckNvZGVBdChqKSkpO1xuICAgICAgfVxuXG4gICAgICBzdHJpbmdzVW5pY29kZS5wdXNoKHN0ckJ1ZlVuaWNvZGUuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzID0gW3N0cmluZ3MsIHN0cmluZ3NVbmljb2RlXTtcbiAgICB2YXIgcGxhdGZvcm1zID0gW1wiXFx4MDBcXHgwMVwiLCBcIlxceDAwXFx4MDNcIl07XG4gICAgdmFyIGVuY29kaW5ncyA9IFtcIlxceDAwXFx4MDBcIiwgXCJcXHgwMFxceDAxXCJdO1xuICAgIHZhciBsYW5ndWFnZXMgPSBbXCJcXHgwMFxceDAwXCIsIFwiXFx4MDRcXHgwOVwiXTtcbiAgICB2YXIgbmFtZXNSZWNvcmRDb3VudCA9IHN0cmluZ3MubGVuZ3RoICogcGxhdGZvcm1zLmxlbmd0aDtcbiAgICB2YXIgbmFtZVRhYmxlID0gXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihuYW1lc1JlY29yZENvdW50KSArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQgKiAxMiArIDYpO1xuICAgIHZhciBzdHJPZmZzZXQgPSAwO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBwbGF0Zm9ybXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHN0cnMgPSBuYW1lc1tpXTtcblxuICAgICAgZm9yIChqID0gMCwgamogPSBzdHJzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgc3RyID0gc3Ryc1tqXTtcbiAgICAgICAgdmFyIG5hbWVSZWNvcmQgPSBwbGF0Zm9ybXNbaV0gKyBlbmNvZGluZ3NbaV0gKyBsYW5ndWFnZXNbaV0gKyBzdHJpbmcxNihqKSArIHN0cmluZzE2KHN0ci5sZW5ndGgpICsgc3RyaW5nMTYoc3RyT2Zmc2V0KTtcbiAgICAgICAgbmFtZVRhYmxlICs9IG5hbWVSZWNvcmQ7XG4gICAgICAgIHN0ck9mZnNldCArPSBzdHIubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5hbWVUYWJsZSArPSBzdHJpbmdzLmpvaW4oXCJcIikgKyBzdHJpbmdzVW5pY29kZS5qb2luKFwiXCIpO1xuICAgIHJldHVybiBuYW1lVGFibGU7XG4gIH1cblxuICBGb250LnByb3RvdHlwZSA9IHtcbiAgICBuYW1lOiBudWxsLFxuICAgIGZvbnQ6IG51bGwsXG4gICAgbWltZXR5cGU6IG51bGwsXG4gICAgZGlzYWJsZUZvbnRGYWNlOiBmYWxzZSxcblxuICAgIGdldCByZW5kZXJlcigpIHtcbiAgICAgIHZhciByZW5kZXJlciA9IF9mb250X3JlbmRlcmVyLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInJlbmRlcmVyXCIsIHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgZXhwb3J0RGF0YShleHRyYVByb3BlcnRpZXMgPSBmYWxzZSkge1xuICAgICAgY29uc3QgZXhwb3J0RGF0YVByb3BlcnRpZXMgPSBleHRyYVByb3BlcnRpZXMgPyBbLi4uRVhQT1JUX0RBVEFfUFJPUEVSVElFUywgLi4uRVhQT1JUX0RBVEFfRVhUUkFfUFJPUEVSVElFU10gOiBFWFBPUlRfREFUQV9QUk9QRVJUSUVTO1xuICAgICAgY29uc3QgZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBsZXQgcHJvcGVydHksIHZhbHVlO1xuXG4gICAgICBmb3IgKHByb3BlcnR5IG9mIGV4cG9ydERhdGFQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHZhbHVlID0gdGhpc1twcm9wZXJ0eV07XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkYXRhW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgICBmYWxsYmFja1RvU3lzdGVtRm9udDogZnVuY3Rpb24gRm9udF9mYWxsYmFja1RvU3lzdGVtRm9udCgpIHtcbiAgICAgIHRoaXMubWlzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgIHZhciBzdWJ0eXBlID0gdGhpcy5zdWJ0eXBlO1xuICAgICAgbGV0IGZvbnROYW1lID0gbmFtZS5yZXBsYWNlKC9bLF9dL2csIFwiLVwiKS5yZXBsYWNlKC9cXHMvZywgXCJcIik7XG4gICAgICB2YXIgc3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RkRm9udE1hcCkoKSxcbiAgICAgICAgICBub25TdGRGb250TWFwID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXROb25TdGRGb250TWFwKSgpO1xuICAgICAgdmFyIGlzU3RhbmRhcmRGb250ID0gISFzdGRGb250TWFwW2ZvbnROYW1lXSB8fCAhIShub25TdGRGb250TWFwW2ZvbnROYW1lXSAmJiBzdGRGb250TWFwW25vblN0ZEZvbnRNYXBbZm9udE5hbWVdXSk7XG4gICAgICBmb250TmFtZSA9IHN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IGZvbnROYW1lO1xuICAgICAgdGhpcy5ib2xkID0gZm9udE5hbWUuc2VhcmNoKC9ib2xkL2dpKSAhPT0gLTE7XG4gICAgICB0aGlzLml0YWxpYyA9IGZvbnROYW1lLnNlYXJjaCgvb2JsaXF1ZS9naSkgIT09IC0xIHx8IGZvbnROYW1lLnNlYXJjaCgvaXRhbGljL2dpKSAhPT0gLTE7XG4gICAgICB0aGlzLmJsYWNrID0gbmFtZS5zZWFyY2goL0JsYWNrL2cpICE9PSAtMTtcbiAgICAgIHRoaXMucmVtZWFzdXJlID0gT2JqZWN0LmtleXModGhpcy53aWR0aHMpLmxlbmd0aCA+IDA7XG5cbiAgICAgIGlmIChpc1N0YW5kYXJkRm9udCAmJiB0eXBlID09PSBcIkNJREZvbnRUeXBlMlwiICYmIHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aChcIklkZW50aXR5LVwiKSkge1xuICAgICAgICBjb25zdCBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKTtcbiAgICAgICAgY29uc3QgbWFwID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpIHtcbiAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IEdseXBoTWFwRm9yU3RhbmRhcmRGb250c1tjaGFyQ29kZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoL0FyaWFsLT9CbGFjay9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICB2YXIgU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaykge1xuICAgICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2tbY2hhckNvZGVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgvQ2FsaWJyaS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpKSB7XG4gICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaVtjaGFyQ29kZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGlzSWRlbnRpdHlVbmljb2RlID0gdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcDtcblxuICAgICAgICBpZiAoIWlzSWRlbnRpdHlVbmljb2RlKSB7XG4gICAgICAgICAgdGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHVuaWNvZGVDaGFyQ29kZSkge1xuICAgICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBtYXA7XG4gICAgICAgIHRoaXMudG9Vbmljb2RlID0gbmV3IFRvVW5pY29kZU1hcChtYXApO1xuICAgICAgfSBlbHNlIGlmICgvU3ltYm9sL2kudGVzdChmb250TmFtZSkpIHtcbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuU3ltYm9sU2V0RW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCksIHRoaXMuZGlmZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHMvaS50ZXN0KGZvbnROYW1lKSkge1xuICAgICAgICBpZiAoL1dpbmdkaW5ncy9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJOb24tZW1iZWRkZWQgV2luZ2RpbmdzIGZvbnQsIGZhbGxpbmcgYmFjayB0byBaYXBmRGluZ2JhdHMuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RhbmRhcmRGb250KSB7XG4gICAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcih0aGlzLmRlZmF1bHRFbmNvZGluZywgKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgICAgY29uc3QgbWFwID0gW107XG4gICAgICAgIHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGNoYXJDb2RlLCB1bmljb2RlQ2hhckNvZGUpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICB2YXIgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gfHwgdGhpcy5kZWZhdWx0RW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgICAgICAgICB1bmljb2RlQ2hhckNvZGUgPSB1bmljb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb21wb3NpdGUgJiYgdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcCkge1xuICAgICAgICAgIGlmICgvVmVyZGFuYS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykge1xuICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IEdseXBoTWFwRm9yU3RhbmRhcmRGb250c1tjaGFyQ29kZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRlZE5hbWUgPSBmb250TmFtZS5zcGxpdChcIi1cIilbMF07XG4gICAgICB0aGlzLmZvbnRUeXBlID0gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSk7XG4gICAgfSxcbiAgICBjaGVja0FuZFJlcGFpcjogZnVuY3Rpb24gRm9udF9jaGVja0FuZFJlcGFpcihuYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgICBjb25zdCBWQUxJRF9UQUJMRVMgPSBbXCJPUy8yXCIsIFwiY21hcFwiLCBcImhlYWRcIiwgXCJoaGVhXCIsIFwiaG10eFwiLCBcIm1heHBcIiwgXCJuYW1lXCIsIFwicG9zdFwiLCBcImxvY2FcIiwgXCJnbHlmXCIsIFwiZnBnbVwiLCBcInByZXBcIiwgXCJjdnQgXCIsIFwiQ0ZGIFwiXTtcblxuICAgICAgZnVuY3Rpb24gcmVhZFRhYmxlcyhmaWxlLCBudW1UYWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGFibGVzW1wiT1MvMlwiXSA9IG51bGw7XG4gICAgICAgIHRhYmxlcy5jbWFwID0gbnVsbDtcbiAgICAgICAgdGFibGVzLmhlYWQgPSBudWxsO1xuICAgICAgICB0YWJsZXMuaGhlYSA9IG51bGw7XG4gICAgICAgIHRhYmxlcy5obXR4ID0gbnVsbDtcbiAgICAgICAgdGFibGVzLm1heHAgPSBudWxsO1xuICAgICAgICB0YWJsZXMubmFtZSA9IG51bGw7XG4gICAgICAgIHRhYmxlcy5wb3N0ID0gbnVsbDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSByZWFkVGFibGVFbnRyeShmaWxlKTtcblxuICAgICAgICAgIGlmICghVkFMSURfVEFCTEVTLmluY2x1ZGVzKHRhYmxlLnRhZykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0YWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhYmxlc1t0YWJsZS50YWddID0gdGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVzO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7XG4gICAgICAgIHZhciB0YWcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZmlsZS5nZXRCeXRlcyg0KSk7XG4gICAgICAgIHZhciBjaGVja3N1bSA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgdmFyIHByZXZpb3VzUG9zaXRpb24gPSBmaWxlLnBvcztcbiAgICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDA7XG4gICAgICAgIGZpbGUuc2tpcChvZmZzZXQpO1xuICAgICAgICB2YXIgZGF0YSA9IGZpbGUuZ2V0Qnl0ZXMobGVuZ3RoKTtcbiAgICAgICAgZmlsZS5wb3MgPSBwcmV2aW91c1Bvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0YWcgPT09IFwiaGVhZFwiKSB7XG4gICAgICAgICAgZGF0YVs4XSA9IGRhdGFbOV0gPSBkYXRhWzEwXSA9IGRhdGFbMTFdID0gMDtcbiAgICAgICAgICBkYXRhWzE3XSB8PSAweDIwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0YWcsXG4gICAgICAgICAgY2hlY2tzdW0sXG4gICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICBkYXRhXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJzaW9uOiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykodHRmLmdldEJ5dGVzKDQpKSxcbiAgICAgICAgICBudW1UYWJsZXM6IHR0Zi5nZXRVaW50MTYoKSxcbiAgICAgICAgICBzZWFyY2hSYW5nZTogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICAgIGVudHJ5U2VsZWN0b3I6IHR0Zi5nZXRVaW50MTYoKSxcbiAgICAgICAgICByYW5nZVNoaWZ0OiB0dGYuZ2V0VWludDE2KClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpIHtcbiAgICAgICAgY29uc3QgdHRjVGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHR0Yy5nZXRCeXRlcyg0KSk7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHR0Y1RhZyA9PT0gXCJ0dGNmXCIsIFwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC5cIik7XG4gICAgICAgIGNvbnN0IG1ham9yVmVyc2lvbiA9IHR0Yy5nZXRVaW50MTYoKTtcbiAgICAgICAgY29uc3QgbWlub3JWZXJzaW9uID0gdHRjLmdldFVpbnQxNigpO1xuICAgICAgICBjb25zdCBudW1Gb250cyA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICBjb25zdCBvZmZzZXRUYWJsZSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRm9udHM7IGkrKykge1xuICAgICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVyID0ge1xuICAgICAgICAgIHR0Y1RhZyxcbiAgICAgICAgICBtYWpvclZlcnNpb24sXG4gICAgICAgICAgbWlub3JWZXJzaW9uLFxuICAgICAgICAgIG51bUZvbnRzLFxuICAgICAgICAgIG9mZnNldFRhYmxlXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChtYWpvclZlcnNpb24pIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVyO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaGVhZGVyLmRzaWdUYWcgPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgIGhlYWRlci5kc2lnTGVuZ3RoID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogJHttYWpvclZlcnNpb259LmApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uRGF0YSh0dGMsIGZvbnROYW1lKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBudW1Gb250cyxcbiAgICAgICAgICBvZmZzZXRUYWJsZVxuICAgICAgICB9ID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRm9udHM7IGkrKykge1xuICAgICAgICAgIHR0Yy5wb3MgPSAodHRjLnN0YXJ0IHx8IDApICsgb2Zmc2V0VGFibGVbaV07XG4gICAgICAgICAgY29uc3QgcG90ZW50aWFsSGVhZGVyID0gcmVhZE9wZW5UeXBlSGVhZGVyKHR0Yyk7XG4gICAgICAgICAgY29uc3QgcG90ZW50aWFsVGFibGVzID0gcmVhZFRhYmxlcyh0dGMsIHBvdGVudGlhbEhlYWRlci5udW1UYWJsZXMpO1xuXG4gICAgICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZXMubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgXCJuYW1lXCIgdGFibGUuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmFtZVRhYmxlID0gcmVhZE5hbWVUYWJsZShwb3RlbnRpYWxUYWJsZXMubmFtZSk7XG5cbiAgICAgICAgICBmb3IgKGxldCBqID0gMCwgamogPSBuYW1lVGFibGUubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDAsIGtrID0gbmFtZVRhYmxlW2pdLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZUVudHJ5ID0gbmFtZVRhYmxlW2pdW2tdO1xuXG4gICAgICAgICAgICAgIGlmIChuYW1lRW50cnkgJiYgbmFtZUVudHJ5LnJlcGxhY2UoL1xccy9nLCBcIlwiKSA9PT0gZm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiBwb3RlbnRpYWxIZWFkZXIsXG4gICAgICAgICAgICAgICAgICB0YWJsZXM6IHBvdGVudGlhbFRhYmxlc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBcIiR7Zm9udE5hbWV9XCIgZm9udC5gKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcmVhZENtYXBUYWJsZShjbWFwLCBmaWxlLCBpc1N5bWJvbGljRm9udCwgaGFzRW5jb2RpbmcpIHtcbiAgICAgICAgaWYgKCFjbWFwKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuXCIpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VnbWVudDtcbiAgICAgICAgdmFyIHN0YXJ0ID0gKGZpbGUuc3RhcnQgPyBmaWxlLnN0YXJ0IDogMCkgKyBjbWFwLm9mZnNldDtcbiAgICAgICAgZmlsZS5wb3MgPSBzdGFydDtcbiAgICAgICAgZmlsZS5za2lwKDIpO1xuICAgICAgICB2YXIgbnVtVGFibGVzID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgdmFyIHBvdGVudGlhbFRhYmxlO1xuICAgICAgICB2YXIgY2FuQnJlYWsgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICAgIHZhciBlbmNvZGluZ0lkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgIHZhciB1c2VUYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHBvdGVudGlhbFRhYmxlICYmIHBvdGVudGlhbFRhYmxlLnBsYXRmb3JtSWQgPT09IHBsYXRmb3JtSWQgJiYgcG90ZW50aWFsVGFibGUuZW5jb2RpbmdJZCA9PT0gZW5jb2RpbmdJZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBsYXRmb3JtSWQgPT09IDAgJiYgKGVuY29kaW5nSWQgPT09IDAgfHwgZW5jb2RpbmdJZCA9PT0gMSB8fCBlbmNvZGluZ0lkID09PSAzKSkge1xuICAgICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JZCA9PT0gMSAmJiBlbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDEgJiYgKGhhc0VuY29kaW5nIHx8ICFwb3RlbnRpYWxUYWJsZSkpIHtcbiAgICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKCFpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1N5bWJvbGljRm9udCAmJiBwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbkJyZWFrID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXNlVGFibGUpIHtcbiAgICAgICAgICAgIHBvdGVudGlhbFRhYmxlID0ge1xuICAgICAgICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICAgICAgICBlbmNvZGluZ0lkLFxuICAgICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNhbkJyZWFrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG90ZW50aWFsVGFibGUpIHtcbiAgICAgICAgICBmaWxlLnBvcyA9IHN0YXJ0ICsgcG90ZW50aWFsVGFibGUub2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZSB8fCBmaWxlLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQ291bGQgbm90IGZpbmQgYSBwcmVmZXJyZWQgY21hcCB0YWJsZS5cIik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb3JtYXQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICBmaWxlLnNraXAoMiArIDIpO1xuICAgICAgICB2YXIgaGFzU2hvcnRDbWFwID0gZmFsc2U7XG4gICAgICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuICAgICAgICB2YXIgaiwgZ2x5cGhJZDtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAwKSB7XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBmaWxlLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgICBnbHlwaElkOiBpbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFzU2hvcnRDbWFwID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDQpIHtcbiAgICAgICAgICB2YXIgc2VnQ291bnQgPSBmaWxlLmdldFVpbnQxNigpID4+IDE7XG4gICAgICAgICAgZmlsZS5za2lwKDYpO1xuICAgICAgICAgIHZhciBzZWdJbmRleCxcbiAgICAgICAgICAgICAgc2VnbWVudHMgPSBbXTtcblxuICAgICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgZW5kOiBmaWxlLmdldFVpbnQxNigpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWxlLnNraXAoMik7XG5cbiAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgc2VnbWVudHNbc2VnSW5kZXhdLnN0YXJ0ID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgc2VnbWVudHNbc2VnSW5kZXhdLmRlbHRhID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgb2Zmc2V0c0NvdW50ID0gMDtcblxuICAgICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gc2VnbWVudHNbc2VnSW5kZXhdO1xuICAgICAgICAgICAgdmFyIHJhbmdlT2Zmc2V0ID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgaWYgKCFyYW5nZU9mZnNldCkge1xuICAgICAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gLTE7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb2Zmc2V0SW5kZXggPSAocmFuZ2VPZmZzZXQgPj4gMSkgLSAoc2VnQ291bnQgLSBzZWdJbmRleCk7XG4gICAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gb2Zmc2V0SW5kZXg7XG4gICAgICAgICAgICBvZmZzZXRzQ291bnQgPSBNYXRoLm1heChvZmZzZXRzQ291bnQsIG9mZnNldEluZGV4ICsgc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0ICsgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIG9mZnNldHMgPSBbXTtcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvZmZzZXRzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKGZpbGUuZ2V0VWludDE2KCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgICBzZWdtZW50ID0gc2VnbWVudHNbc2VnSW5kZXhdO1xuICAgICAgICAgICAgc3RhcnQgPSBzZWdtZW50LnN0YXJ0O1xuICAgICAgICAgICAgdmFyIGVuZCA9IHNlZ21lbnQuZW5kO1xuICAgICAgICAgICAgdmFyIGRlbHRhID0gc2VnbWVudC5kZWx0YTtcbiAgICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDtcblxuICAgICAgICAgICAgZm9yIChqID0gc3RhcnQ7IGogPD0gZW5kOyBqKyspIHtcbiAgICAgICAgICAgICAgaWYgKGogPT09IDB4ZmZmZikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ2x5cGhJZCA9IG9mZnNldEluZGV4IDwgMCA/IGogOiBvZmZzZXRzW29mZnNldEluZGV4ICsgaiAtIHN0YXJ0XTtcbiAgICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoSWQgKyBkZWx0YSAmIDB4ZmZmZjtcbiAgICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgY2hhckNvZGU6IGosXG4gICAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSA2KSB7XG4gICAgICAgICAgdmFyIGZpcnN0Q29kZSA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgdmFyIGVudHJ5Q291bnQgPSBmaWxlLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGVudHJ5Q291bnQ7IGorKykge1xuICAgICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBmaXJzdENvZGUgKyBqO1xuICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgIGNoYXJDb2RlLFxuICAgICAgICAgICAgICBnbHlwaElkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiBcIiArIGZvcm1hdCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcHBpbmdzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICByZXR1cm4gYS5jaGFyQ29kZSAtIGIuY2hhckNvZGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChtYXBwaW5nc1tpIC0gMV0uY2hhckNvZGUgPT09IG1hcHBpbmdzW2ldLmNoYXJDb2RlKSB7XG4gICAgICAgICAgICBtYXBwaW5ncy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGF0Zm9ybUlkOiBwb3RlbnRpYWxUYWJsZS5wbGF0Zm9ybUlkLFxuICAgICAgICAgIGVuY29kaW5nSWQ6IHBvdGVudGlhbFRhYmxlLmVuY29kaW5nSWQsXG4gICAgICAgICAgbWFwcGluZ3MsXG4gICAgICAgICAgaGFzU2hvcnRDbWFwXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplTWV0cmljcyhmaWxlLCBoZWFkZXIsIG1ldHJpY3MsIG51bUdseXBocywgZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICBpZiAoIWhlYWRlcikge1xuICAgICAgICAgIGlmIChtZXRyaWNzKSB7XG4gICAgICAgICAgICBtZXRyaWNzLmRhdGEgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGUucG9zID0gKGZpbGUuc3RhcnQgPyBmaWxlLnN0YXJ0IDogMCkgKyBoZWFkZXIub2Zmc2V0O1xuICAgICAgICBmaWxlLnBvcyArPSA0O1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICBmaWxlLnBvcyArPSA4O1xuICAgICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgICB2YXIgbnVtT2ZNZXRyaWNzID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgICBpZiAobnVtT2ZNZXRyaWNzID4gbnVtR2x5cGhzKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiVGhlIG51bU9mTWV0cmljcyAoXCIgKyBudW1PZk1ldHJpY3MgKyBcIikgc2hvdWxkIG5vdCBiZSBcIiArIFwiZ3JlYXRlciB0aGFuIHRoZSBudW1HbHlwaHMgKFwiICsgbnVtR2x5cGhzICsgXCIpXCIpO1xuICAgICAgICAgIG51bU9mTWV0cmljcyA9IG51bUdseXBocztcbiAgICAgICAgICBoZWFkZXIuZGF0YVszNF0gPSAobnVtT2ZNZXRyaWNzICYgMHhmZjAwKSA+PiA4O1xuICAgICAgICAgIGhlYWRlci5kYXRhWzM1XSA9IG51bU9mTWV0cmljcyAmIDB4MDBmZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBudW1PZlNpZGViZWFyaW5ncyA9IG51bUdseXBocyAtIG51bU9mTWV0cmljcztcbiAgICAgICAgdmFyIG51bU1pc3NpbmcgPSBudW1PZlNpZGViZWFyaW5ncyAtIChtZXRyaWNzLmxlbmd0aCAtIG51bU9mTWV0cmljcyAqIDQgPj4gMSk7XG5cbiAgICAgICAgaWYgKG51bU1pc3NpbmcgPiAwKSB7XG4gICAgICAgICAgdmFyIGVudHJpZXMgPSBuZXcgVWludDhBcnJheShtZXRyaWNzLmxlbmd0aCArIG51bU1pc3NpbmcgKiAyKTtcbiAgICAgICAgICBlbnRyaWVzLnNldChtZXRyaWNzLmRhdGEpO1xuXG4gICAgICAgICAgaWYgKGR1cEZpcnN0RW50cnkpIHtcbiAgICAgICAgICAgIGVudHJpZXNbbWV0cmljcy5sZW5ndGhdID0gbWV0cmljcy5kYXRhWzJdO1xuICAgICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aCArIDFdID0gbWV0cmljcy5kYXRhWzNdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1ldHJpY3MuZGF0YSA9IGVudHJpZXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2FuaXRpemVHbHlwaChzb3VyY2UsIHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQsIGRlc3QsIGRlc3RTdGFydCwgaGludHNWYWxpZCkge1xuICAgICAgICB2YXIgZ2x5cGhQcm9maWxlID0ge1xuICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICBzaXplT2ZJbnN0cnVjdGlvbnM6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc291cmNlRW5kIC0gc291cmNlU3RhcnQgPD0gMTIpIHtcbiAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdseWYgPSBzb3VyY2Uuc3ViYXJyYXkoc291cmNlU3RhcnQsIHNvdXJjZUVuZCk7XG4gICAgICAgIHZhciBjb250b3Vyc0NvdW50ID0gc2lnbmVkSW50MTYoZ2x5ZlswXSwgZ2x5ZlsxXSk7XG5cbiAgICAgICAgaWYgKGNvbnRvdXJzQ291bnQgPCAwKSB7XG4gICAgICAgICAgY29udG91cnNDb3VudCA9IC0xO1xuICAgICAgICAgIHdyaXRlU2lnbmVkSW50MTYoZ2x5ZiwgMCwgY29udG91cnNDb3VudCk7XG4gICAgICAgICAgZGVzdC5zZXQoZ2x5ZiwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5Zi5sZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaiA9IDEwLFxuICAgICAgICAgICAgZmxhZ3NDb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbnRvdXJzQ291bnQ7IGkrKykge1xuICAgICAgICAgIHZhciBlbmRQb2ludCA9IGdseWZbal0gPDwgOCB8IGdseWZbaiArIDFdO1xuICAgICAgICAgIGZsYWdzQ291bnQgPSBlbmRQb2ludCArIDE7XG4gICAgICAgICAgaiArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluc3RydWN0aW9uc1N0YXJ0ID0gajtcbiAgICAgICAgdmFyIGluc3RydWN0aW9uc0xlbmd0aCA9IGdseWZbal0gPDwgOCB8IGdseWZbaiArIDFdO1xuICAgICAgICBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgICBqICs9IDIgKyBpbnN0cnVjdGlvbnNMZW5ndGg7XG4gICAgICAgIHZhciBpbnN0cnVjdGlvbnNFbmQgPSBqO1xuICAgICAgICB2YXIgY29vcmRpbmF0ZXNMZW5ndGggPSAwO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmbGFnc0NvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgZmxhZyA9IGdseWZbaisrXTtcblxuICAgICAgICAgIGlmIChmbGFnICYgMHhjMCkge1xuICAgICAgICAgICAgZ2x5ZltqIC0gMV0gPSBmbGFnICYgMHgzZjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgeExlbmd0aCA9IDI7XG5cbiAgICAgICAgICBpZiAoZmxhZyAmIDIpIHtcbiAgICAgICAgICAgIHhMZW5ndGggPSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZyAmIDE2KSB7XG4gICAgICAgICAgICB4TGVuZ3RoID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgeUxlbmd0aCA9IDI7XG5cbiAgICAgICAgICBpZiAoZmxhZyAmIDQpIHtcbiAgICAgICAgICAgIHlMZW5ndGggPSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZyAmIDMyKSB7XG4gICAgICAgICAgICB5TGVuZ3RoID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB4eUxlbmd0aCA9IHhMZW5ndGggKyB5TGVuZ3RoO1xuICAgICAgICAgIGNvb3JkaW5hdGVzTGVuZ3RoICs9IHh5TGVuZ3RoO1xuXG4gICAgICAgICAgaWYgKGZsYWcgJiA4KSB7XG4gICAgICAgICAgICB2YXIgcmVwZWF0ID0gZ2x5ZltqKytdO1xuICAgICAgICAgICAgaSArPSByZXBlYXQ7XG4gICAgICAgICAgICBjb29yZGluYXRlc0xlbmd0aCArPSByZXBlYXQgKiB4eUxlbmd0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29vcmRpbmF0ZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdseXBoRGF0YUxlbmd0aCA9IGogKyBjb29yZGluYXRlc0xlbmd0aDtcblxuICAgICAgICBpZiAoZ2x5cGhEYXRhTGVuZ3RoID4gZ2x5Zi5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFoaW50c1ZhbGlkICYmIGluc3RydWN0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KDAsIGluc3RydWN0aW9uc1N0YXJ0KSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICBkZXN0LnNldChbMCwgMF0sIGRlc3RTdGFydCArIGluc3RydWN0aW9uc1N0YXJ0KTtcbiAgICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KGluc3RydWN0aW9uc0VuZCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQgKyAyKTtcbiAgICAgICAgICBnbHlwaERhdGFMZW5ndGggLT0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuXG4gICAgICAgICAgaWYgKGdseWYubGVuZ3RoIC0gZ2x5cGhEYXRhTGVuZ3RoID4gMykge1xuICAgICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlwaERhdGFMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHtcbiAgICAgICAgICBnbHlwaERhdGFMZW5ndGggPSBnbHlwaERhdGFMZW5ndGggKyAzICYgfjM7XG4gICAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheSgwLCBnbHlwaERhdGFMZW5ndGgpLCBkZXN0U3RhcnQpO1xuICAgICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlwaERhdGFMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlmLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2FuaXRpemVIZWFkKGhlYWQsIG51bUdseXBocywgbG9jYUxlbmd0aCkge1xuICAgICAgICB2YXIgZGF0YSA9IGhlYWQuZGF0YTtcbiAgICAgICAgdmFyIHZlcnNpb24gPSBpbnQzMihkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTtcblxuICAgICAgICBpZiAodmVyc2lvbiA+PiAxNiAhPT0gMSkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiBcIiArIHZlcnNpb24pO1xuICAgICAgICAgIGRhdGFbMF0gPSAwO1xuICAgICAgICAgIGRhdGFbMV0gPSAxO1xuICAgICAgICAgIGRhdGFbMl0gPSAwO1xuICAgICAgICAgIGRhdGFbM10gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGV4VG9Mb2NGb3JtYXQgPSBpbnQxNihkYXRhWzUwXSwgZGF0YVs1MV0pO1xuXG4gICAgICAgIGlmIChpbmRleFRvTG9jRm9ybWF0IDwgMCB8fCBpbmRleFRvTG9jRm9ybWF0ID4gMSkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiBcIiArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICAgIHZhciBudW1HbHlwaHNQbHVzT25lID0gbnVtR2x5cGhzICsgMTtcblxuICAgICAgICAgIGlmIChsb2NhTGVuZ3RoID09PSBudW1HbHlwaHNQbHVzT25lIDw8IDEpIHtcbiAgICAgICAgICAgIGRhdGFbNTBdID0gMDtcbiAgICAgICAgICAgIGRhdGFbNTFdID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FMZW5ndGggPT09IG51bUdseXBoc1BsdXNPbmUgPDwgMikge1xuICAgICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgICAgZGF0YVs1MV0gPSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6IFwiICsgaW5kZXhUb0xvY0Zvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMobG9jYSwgZ2x5ZiwgbnVtR2x5cGhzLCBpc0dseXBoTG9jYXRpb25zTG9uZywgaGludHNWYWxpZCwgZHVwRmlyc3RFbnRyeSwgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgIHZhciBpdGVtU2l6ZSwgaXRlbURlY29kZSwgaXRlbUVuY29kZTtcblxuICAgICAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICAgICAgICBpdGVtU2l6ZSA9IDQ7XG5cbiAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGVMb25nKGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpdGVtRW5jb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGFbb2Zmc2V0XSA9IHZhbHVlID4+PiAyNCAmIDB4ZmY7XG4gICAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMTYgJiAweGZmO1xuICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IHZhbHVlID4+IDggJiAweGZmO1xuICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAzXSA9IHZhbHVlICYgMHhmZjtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1TaXplID0gMjtcblxuICAgICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZShkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGFbb2Zmc2V0XSA9IHZhbHVlID4+IDkgJiAweGZmO1xuICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAxXSA9IHZhbHVlID4+IDEgJiAweGZmO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbnVtR2x5cGhzT3V0ID0gZHVwRmlyc3RFbnRyeSA/IG51bUdseXBocyArIDEgOiBudW1HbHlwaHM7XG4gICAgICAgIHZhciBsb2NhRGF0YVNpemUgPSBpdGVtU2l6ZSAqICgxICsgbnVtR2x5cGhzT3V0KTtcbiAgICAgICAgdmFyIGxvY2FEYXRhID0gbmV3IFVpbnQ4QXJyYXkobG9jYURhdGFTaXplKTtcbiAgICAgICAgbG9jYURhdGEuc2V0KGxvY2EuZGF0YS5zdWJhcnJheSgwLCBsb2NhRGF0YVNpemUpKTtcbiAgICAgICAgbG9jYS5kYXRhID0gbG9jYURhdGE7XG4gICAgICAgIHZhciBvbGRHbHlmRGF0YSA9IGdseWYuZGF0YTtcbiAgICAgICAgdmFyIG9sZEdseWZEYXRhTGVuZ3RoID0gb2xkR2x5ZkRhdGEubGVuZ3RoO1xuICAgICAgICB2YXIgbmV3R2x5ZkRhdGEgPSBuZXcgVWludDhBcnJheShvbGRHbHlmRGF0YUxlbmd0aCk7XG4gICAgICAgIHZhciBpLCBqO1xuICAgICAgICBjb25zdCBsb2NhRW50cmllcyA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtR2x5cGhzICsgMTsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGopO1xuXG4gICAgICAgICAgaWYgKG9mZnNldCA+IG9sZEdseWZEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBvbGRHbHlmRGF0YUxlbmd0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhRW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhRW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEub2Zmc2V0IC0gYi5vZmZzZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykge1xuICAgICAgICAgIGxvY2FFbnRyaWVzW2ldLmVuZE9mZnNldCA9IGxvY2FFbnRyaWVzW2kgKyAxXS5vZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhRW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG1pc3NpbmdHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgd3JpdGVPZmZzZXQgPSAwO1xuICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCAwLCB3cml0ZU9mZnNldCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaiA9IGl0ZW1TaXplOyBpIDwgbnVtR2x5cGhzOyBpKyssIGogKz0gaXRlbVNpemUpIHtcbiAgICAgICAgICB2YXIgZ2x5cGhQcm9maWxlID0gc2FuaXRpemVHbHlwaChvbGRHbHlmRGF0YSwgbG9jYUVudHJpZXNbaV0ub2Zmc2V0LCBsb2NhRW50cmllc1tpXS5lbmRPZmZzZXQsIG5ld0dseWZEYXRhLCB3cml0ZU9mZnNldCwgaGludHNWYWxpZCk7XG4gICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IGdseXBoUHJvZmlsZS5sZW5ndGg7XG5cbiAgICAgICAgICBpZiAobmV3TGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ2x5cGhQcm9maWxlLnNpemVPZkluc3RydWN0aW9ucyA+IG1heFNpemVPZkluc3RydWN0aW9ucykge1xuICAgICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZ2x5cGhQcm9maWxlLnNpemVPZkluc3RydWN0aW9ucztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3cml0ZU9mZnNldCArPSBuZXdMZW5ndGg7XG4gICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgd3JpdGVPZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdyaXRlT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgdmFyIHNpbXBsZUdseXBoID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwXSk7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHNPdXQ7IGkrKywgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgc2ltcGxlR2x5cGgubGVuZ3RoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnbHlmLmRhdGEgPSBzaW1wbGVHbHlwaDtcbiAgICAgICAgfSBlbHNlIGlmIChkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgICAgdmFyIGZpcnN0RW50cnlMZW5ndGggPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBpdGVtU2l6ZSk7XG5cbiAgICAgICAgICBpZiAobmV3R2x5ZkRhdGEubGVuZ3RoID4gZmlyc3RFbnRyeUxlbmd0aCArIHdyaXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXcgVWludDhBcnJheShmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdseWYuZGF0YS5zZXQobmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgZmlyc3RFbnRyeUxlbmd0aCksIHdyaXRlT2Zmc2V0KTtcbiAgICAgICAgICBpdGVtRW5jb2RlKGxvY2EuZGF0YSwgbG9jYURhdGEubGVuZ3RoIC0gaXRlbVNpemUsIHdyaXRlT2Zmc2V0ICsgZmlyc3RFbnRyeUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2x5Zi5kYXRhID0gbmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtaXNzaW5nR2x5cGhzLFxuICAgICAgICAgIG1heFNpemVPZkluc3RydWN0aW9uc1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKHBvc3QsIHByb3BlcnRpZXNPYmosIG1heHBOdW1HbHlwaHMpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBwb3N0Lm9mZnNldDtcbiAgICAgICAgZm9udC5wb3MgPSBzdGFydDtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHBvc3QubGVuZ3RoLFxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG4gICAgICAgIHZhciB2ZXJzaW9uID0gZm9udC5nZXRJbnQzMigpO1xuICAgICAgICBmb250LnNraXAoMjgpO1xuICAgICAgICB2YXIgZ2x5cGhOYW1lcztcbiAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgICAgY2FzZSAweDAwMDEwMDAwOlxuICAgICAgICAgICAgZ2x5cGhOYW1lcyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDAwMDIwMDAwOlxuICAgICAgICAgICAgdmFyIG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgIGlmIChudW1HbHlwaHMgIT09IG1heHBOdW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBnbHlwaE5hbWVJbmRleGVzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkge1xuICAgICAgICAgICAgICB2YXIgaW5kZXggPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgIGlmIChpbmRleCA+PSAzMjc2OCkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VzdG9tTmFtZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBzdHJCdWYgPSBbXTtcblxuICAgICAgICAgICAgd2hpbGUgKGZvbnQucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgIHZhciBzdHJpbmdMZW5ndGggPSBmb250LmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IHN0cmluZ0xlbmd0aDtcblxuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBzdHJCdWZbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2V0Qnl0ZSgpKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1c3RvbU5hbWVzLnB1c2goc3RyQnVmLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaE5hbWVzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkge1xuICAgICAgICAgICAgICB2YXIgaiA9IGdseXBoTmFtZUluZGV4ZXNbaV07XG5cbiAgICAgICAgICAgICAgaWYgKGogPCAyNTgpIHtcbiAgICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nW2pdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdseXBoTmFtZXMucHVzaChjdXN0b21OYW1lc1tqIC0gMjU4XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDAwMDMwMDAwOlxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93bi91bnN1cHBvcnRlZCBwb3N0IHRhYmxlIHZlcnNpb24gXCIgKyB2ZXJzaW9uKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqLmRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICAgICAgICBnbHlwaE5hbWVzID0gcHJvcGVydGllc09iai5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllc09iai5nbHlwaE5hbWVzID0gZ2x5cGhOYW1lcztcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZWFkTmFtZVRhYmxlKG5hbWVUYWJsZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIG5hbWVUYWJsZS5vZmZzZXQ7XG4gICAgICAgIGZvbnQucG9zID0gc3RhcnQ7XG4gICAgICAgIHZhciBuYW1lcyA9IFtbXSwgW11dO1xuICAgICAgICB2YXIgbGVuZ3RoID0gbmFtZVRhYmxlLmxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgICB2YXIgZm9ybWF0ID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgdmFyIEZPUk1BVF8wX0hFQURFUl9MRU5HVEggPSA2O1xuXG4gICAgICAgIGlmIChmb3JtYXQgIT09IDAgfHwgbGVuZ3RoIDwgRk9STUFUXzBfSEVBREVSX0xFTkdUSCkge1xuICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBudW1SZWNvcmRzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgdmFyIHN0cmluZ3NTdGFydCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgIHZhciByZWNvcmRzID0gW107XG4gICAgICAgIHZhciBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjtcbiAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1SZWNvcmRzICYmIGZvbnQucG9zICsgTkFNRV9SRUNPUkRfTEVOR1RIIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHIgPSB7XG4gICAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgIGVuY29kaW5nOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGZvbnQuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgbGVuZ3RoOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgb2Zmc2V0OiBmb250LmdldFVpbnQxNigpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChyLnBsYXRmb3JtID09PSAxICYmIHIuZW5jb2RpbmcgPT09IDAgJiYgci5sYW5ndWFnZSA9PT0gMCB8fCByLnBsYXRmb3JtID09PSAzICYmIHIuZW5jb2RpbmcgPT09IDEgJiYgci5sYW5ndWFnZSA9PT0gMHg0MDkpIHtcbiAgICAgICAgICAgIHJlY29yZHMucHVzaChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSByZWNvcmRzW2ldO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBvcyA9IHN0YXJ0ICsgc3RyaW5nc1N0YXJ0ICsgcmVjb3JkLm9mZnNldDtcblxuICAgICAgICAgIGlmIChwb3MgKyByZWNvcmQubGVuZ3RoID4gZW5kKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb250LnBvcyA9IHBvcztcbiAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gcmVjb3JkLm5hbWU7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmVuY29kaW5nKSB7XG4gICAgICAgICAgICB2YXIgc3RyID0gXCJcIjtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmVjb3JkLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRVaW50MTYoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWVzWzFdW25hbWVJbmRleF0gPSBzdHI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hbWVzWzBdW25hbWVJbmRleF0gPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZm9udC5nZXRCeXRlcyhyZWNvcmQubGVuZ3RoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgfVxuXG4gICAgICB2YXIgVFRPcHNTdGFja0RlbHRhcyA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTIsIC0yLCAtMiwgMCwgMCwgLTIsIC01LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMSwgMSwgLTEsIC05OTksIDAsIDEsIDAsIC0xLCAtMiwgMCwgLTEsIC0yLCAtMSwgLTEsIDAsIC0xLCAtMSwgMCwgMCwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtOTk5LCAtMiwgLTIsIC05OTksIDAsIC0yLCAtMiwgMCwgMCwgLTIsIDAsIC0yLCAwLCAwLCAwLCAtMiwgLTEsIC0xLCAxLCAxLCAwLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgMCwgLTk5OSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgLTIsIC05OTksIC05OTksIC05OTksIC05OTksIC05OTksIC0xLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAwLCAtMSwgLTEsIC05OTksIC0yLCAtMiwgMCwgMCwgLTEsIC0yLCAtMiwgMCwgMCwgMCwgLTEsIC0xLCAtMSwgLTJdO1xuXG4gICAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbSh0YWJsZSwgdHRDb250ZXh0KSB7XG4gICAgICAgIHZhciBkYXRhID0gdGFibGUuZGF0YTtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG4sXG4gICAgICAgICAgICBiLFxuICAgICAgICAgICAgZnVuY0lkLFxuICAgICAgICAgICAgcGMsXG4gICAgICAgICAgICBsYXN0RW5kZiA9IDAsXG4gICAgICAgICAgICBsYXN0RGVmZiA9IDA7XG4gICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICB2YXIgY2FsbHN0YWNrID0gW107XG4gICAgICAgIHZhciBmdW5jdGlvbnNDYWxsZWQgPSBbXTtcbiAgICAgICAgdmFyIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICAgIHZhciBpbkZERUYgPSBmYWxzZSxcbiAgICAgICAgICAgIGlmTGV2ZWwgPSAwLFxuICAgICAgICAgICAgaW5FTFNFID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7KSB7XG4gICAgICAgICAgdmFyIG9wID0gZGF0YVtpKytdO1xuXG4gICAgICAgICAgaWYgKG9wID09PSAweDQwKSB7XG4gICAgICAgICAgICBuID0gZGF0YVtpKytdO1xuXG4gICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg0MSkge1xuICAgICAgICAgICAgbiA9IGRhdGFbaSsrXTtcblxuICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYiA8PCA4IHwgZGF0YVtpKytdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoKG9wICYgMHhmOCkgPT09IDB4YjApIHtcbiAgICAgICAgICAgIG4gPSBvcCAtIDB4YjAgKyAxO1xuXG4gICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweGY4KSA9PT0gMHhiOCkge1xuICAgICAgICAgICAgbiA9IG9wIC0gMHhiOCArIDE7XG5cbiAgICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICAgIGkgKz0gbiAqIDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgYiA9IGRhdGFbaSsrXTtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGIgPDwgOCB8IGRhdGFbaSsrXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDJiICYmICF0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgICAgZnVuY0lkID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgICAgaWYgKGlzTmFOKGZ1bmNJZCkpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuXCIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkW2Z1bmNJZF0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZ1bmNJZCBpbiB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YWNrTGVuZ3RoID0gc3RhY2subGVuZ3RoICsgdHRDb250ZXh0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW2Z1bmNJZF07XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGFja0xlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuXCIpO1xuICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IG5ld1N0YWNrTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnVuY0lkIGluIHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkICYmICFmdW5jdGlvbnNDYWxsZWQuaW5jbHVkZXMoZnVuY0lkKSkge1xuICAgICAgICAgICAgICAgICAgY2FsbHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBzdGFja1RvcDogc3RhY2subGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbnNDYWxsZWQucHVzaChmdW5jSWQpO1xuICAgICAgICAgICAgICAgICAgcGMgPSB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoIXBjKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBkYXRhID0gcGMuZGF0YTtcbiAgICAgICAgICAgICAgICAgIGkgPSBwYy5pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmMgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5GREVGID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWRbZnVuY0lkXSA9IHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDJkKSB7XG4gICAgICAgICAgICBpZiAoaW5GREVGKSB7XG4gICAgICAgICAgICAgIGluRkRFRiA9IGZhbHNlO1xuICAgICAgICAgICAgICBsYXN0RW5kZiA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYyA9IGNhbGxzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICBpZiAoIXBjKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IEVOREYgYmFkIHN0YWNrXCIpO1xuICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZnVuY0lkID0gZnVuY3Rpb25zQ2FsbGVkLnBvcCgpO1xuICAgICAgICAgICAgICBkYXRhID0gcGMuZGF0YTtcbiAgICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICAgIHR0Q29udGV4dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tmdW5jSWRdID0gc3RhY2subGVuZ3RoIC0gcGMuc3RhY2tUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg4OSkge1xuICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IG5lc3RlZCBJREVGcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5GREVGID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU4KSB7XG4gICAgICAgICAgICArK2lmTGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxYikge1xuICAgICAgICAgICAgaW5FTFNFID0gaWZMZXZlbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU5KSB7XG4gICAgICAgICAgICBpZiAoaW5FTFNFID09PSBpZkxldmVsKSB7XG4gICAgICAgICAgICAgIGluRUxTRSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC0taWZMZXZlbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDFjKSB7XG4gICAgICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7XG4gICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAgIGkgKz0gb2Zmc2V0IC0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgIGxldCBzdGFja0RlbHRhID0gMDtcblxuICAgICAgICAgICAgaWYgKG9wIDw9IDB4OGUpIHtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IFRUT3BzU3RhY2tEZWx0YXNbb3BdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA+PSAweGMwICYmIG9wIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA+PSAweGUwKSB7XG4gICAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wID49IDB4NzEgJiYgb3AgPD0gMHg3NSkge1xuICAgICAgICAgICAgICBuID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFpc05hTihuKSkge1xuICAgICAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtbiAqIDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPCAwICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHN0YWNrRGVsdGErKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPiAwKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goTmFOKTtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICAgIHZhciBjb250ZW50ID0gW2RhdGFdO1xuXG4gICAgICAgIGlmIChpID4gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBjb250ZW50LnB1c2gobmV3IFVpbnQ4QXJyYXkoaSAtIGRhdGEubGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFzdERlZmYgPiBsYXN0RW5kZikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBjb21wbGVtZW50aW5nIGEgbWlzc2luZyBmdW5jdGlvbiB0YWlsXCIpO1xuICAgICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShbMHgyMiwgMHgyZF0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRUVFRhYmxlKHRhYmxlLCBjb250ZW50KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2hlY2tJbnZhbGlkRnVuY3Rpb25zKHR0Q29udGV4dCwgbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgIGlmICh0dENvbnRleHQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkLmxlbmd0aCA+IG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWRcIik7XG4gICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSB0dENvbnRleHQuZnVuY3Rpb25zVXNlZC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgaWYgKGogPiBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiBcIiArIGopO1xuICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbal0gJiYgIXR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2pdKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogdW5kZWZpbmVkIGZ1bmN0aW9uOiBcIiArIGopO1xuICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZm9sZFRUVGFibGUodGFibGUsIGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHZhciBuZXdMZW5ndGggPSAwO1xuICAgICAgICAgIHZhciBqLCBqajtcblxuICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29udGVudC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICBuZXdMZW5ndGggKz0gY29udGVudFtqXS5sZW5ndGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3TGVuZ3RoID0gbmV3TGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICAgIHZhciBwb3MgPSAwO1xuXG4gICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoY29udGVudFtqXSwgcG9zKTtcbiAgICAgICAgICAgIHBvcyArPSBjb250ZW50W2pdLmxlbmd0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWJsZS5kYXRhID0gcmVzdWx0O1xuICAgICAgICAgIHRhYmxlLmxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbXMoZnBnbSwgcHJlcCwgY3Z0LCBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgdmFyIHR0Q29udGV4dCA9IHtcbiAgICAgICAgICBmdW5jdGlvbnNEZWZpbmVkOiBbXSxcbiAgICAgICAgICBmdW5jdGlvbnNVc2VkOiBbXSxcbiAgICAgICAgICBmdW5jdGlvbnNTdGFja0RlbHRhczogW10sXG4gICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICBoaW50c1ZhbGlkOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZwZ20pIHtcbiAgICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShmcGdtLCB0dENvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXApIHtcbiAgICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShwcmVwLCB0dENvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZwZ20pIHtcbiAgICAgICAgICBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN2dCAmJiBjdnQubGVuZ3RoICYgMSkge1xuICAgICAgICAgIHZhciBjdnREYXRhID0gbmV3IFVpbnQ4QXJyYXkoY3Z0Lmxlbmd0aCArIDEpO1xuICAgICAgICAgIGN2dERhdGEuc2V0KGN2dC5kYXRhKTtcbiAgICAgICAgICBjdnQuZGF0YSA9IGN2dERhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHRDb250ZXh0LmhpbnRzVmFsaWQ7XG4gICAgICB9XG5cbiAgICAgIGZvbnQgPSBuZXcgX3N0cmVhbS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkoZm9udC5nZXRCeXRlcygpKSk7XG4gICAgICBsZXQgaGVhZGVyLCB0YWJsZXM7XG5cbiAgICAgIGlmIChpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZm9udCkpIHtcbiAgICAgICAgY29uc3QgdHRjRGF0YSA9IHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKGZvbnQsIHRoaXMubmFtZSk7XG4gICAgICAgIGhlYWRlciA9IHR0Y0RhdGEuaGVhZGVyO1xuICAgICAgICB0YWJsZXMgPSB0dGNEYXRhLnRhYmxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcihmb250KTtcbiAgICAgICAgdGFibGVzID0gcmVhZFRhYmxlcyhmb250LCBoZWFkZXIubnVtVGFibGVzKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNmZiwgY2ZmRmlsZTtcbiAgICAgIHZhciBpc1RydWVUeXBlID0gIXRhYmxlc1tcIkNGRiBcIl07XG5cbiAgICAgIGlmICghaXNUcnVlVHlwZSkge1xuICAgICAgICBjb25zdCBpc0NvbXBvc2l0ZSA9IHByb3BlcnRpZXMuY29tcG9zaXRlICYmICgocHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXSkubGVuZ3RoID4gMCB8fCAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkpO1xuXG4gICAgICAgIGlmIChoZWFkZXIudmVyc2lvbiA9PT0gXCJPVFRPXCIgJiYgIWlzQ29tcG9zaXRlIHx8ICF0YWJsZXMuaGVhZCB8fCAhdGFibGVzLmhoZWEgfHwgIXRhYmxlcy5tYXhwIHx8ICF0YWJsZXMucG9zdCkge1xuICAgICAgICAgIGNmZkZpbGUgPSBuZXcgX3N0cmVhbS5TdHJlYW0odGFibGVzW1wiQ0ZGIFwiXS5kYXRhKTtcbiAgICAgICAgICBjZmYgPSBuZXcgQ0ZGRm9udChjZmZGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBhZGp1c3RXaWR0aHMocHJvcGVydGllcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydChuYW1lLCBjZmYsIHByb3BlcnRpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRhYmxlcy5nbHlmO1xuICAgICAgICBkZWxldGUgdGFibGVzLmxvY2E7XG4gICAgICAgIGRlbGV0ZSB0YWJsZXMuZnBnbTtcbiAgICAgICAgZGVsZXRlIHRhYmxlcy5wcmVwO1xuICAgICAgICBkZWxldGUgdGFibGVzW1wiY3Z0IFwiXTtcbiAgICAgICAgdGhpcy5pc09wZW5UeXBlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGFibGVzLmxvY2EpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwibG9jYVwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YWJsZXMuZ2x5Zikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnUmVxdWlyZWQgXCJnbHlmXCIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICAgIHRhYmxlcy5nbHlmID0ge1xuICAgICAgICAgICAgdGFnOiBcImdseWZcIixcbiAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNPcGVuVHlwZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5tYXhwKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJtYXhwXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG5cbiAgICAgIGZvbnQucG9zID0gKGZvbnQuc3RhcnQgfHwgMCkgKyB0YWJsZXMubWF4cC5vZmZzZXQ7XG4gICAgICB2YXIgdmVyc2lvbiA9IGZvbnQuZ2V0SW50MzIoKTtcbiAgICAgIGNvbnN0IG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICBsZXQgbnVtR2x5cGhzT3V0ID0gbnVtR2x5cGhzICsgMTtcbiAgICAgIGxldCBkdXBGaXJzdEVudHJ5ID0gdHJ1ZTtcblxuICAgICAgaWYgKG51bUdseXBoc091dCA+IDB4ZmZmZikge1xuICAgICAgICBkdXBGaXJzdEVudHJ5ID0gZmFsc2U7XG4gICAgICAgIG51bUdseXBoc091dCA9IG51bUdseXBocztcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm90IGVub3VnaCBzcGFjZSBpbiBnbHlmcyB0byBkdXBsaWNhdGUgZmlyc3QgZ2x5cGguXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWF4RnVuY3Rpb25EZWZzID0gMDtcbiAgICAgIHZhciBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSAwO1xuXG4gICAgICBpZiAodmVyc2lvbiA+PSAweDAwMDEwMDAwICYmIHRhYmxlcy5tYXhwLmxlbmd0aCA+PSAyMikge1xuICAgICAgICBmb250LnBvcyArPSA4O1xuICAgICAgICB2YXIgbWF4Wm9uZXMgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgIGlmIChtYXhab25lcyA+IDIpIHtcbiAgICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzE0XSA9IDA7XG4gICAgICAgICAgdGFibGVzLm1heHAuZGF0YVsxNV0gPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgbWF4RnVuY3Rpb25EZWZzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIH1cblxuICAgICAgdGFibGVzLm1heHAuZGF0YVs0XSA9IG51bUdseXBoc091dCA+PiA4O1xuICAgICAgdGFibGVzLm1heHAuZGF0YVs1XSA9IG51bUdseXBoc091dCAmIDI1NTtcbiAgICAgIHZhciBoaW50c1ZhbGlkID0gc2FuaXRpemVUVFByb2dyYW1zKHRhYmxlcy5mcGdtLCB0YWJsZXMucHJlcCwgdGFibGVzW1wiY3Z0IFwiXSwgbWF4RnVuY3Rpb25EZWZzKTtcblxuICAgICAgaWYgKCFoaW50c1ZhbGlkKSB7XG4gICAgICAgIGRlbGV0ZSB0YWJsZXMuZnBnbTtcbiAgICAgICAgZGVsZXRlIHRhYmxlcy5wcmVwO1xuICAgICAgICBkZWxldGUgdGFibGVzW1wiY3Z0IFwiXTtcbiAgICAgIH1cblxuICAgICAgc2FuaXRpemVNZXRyaWNzKGZvbnQsIHRhYmxlcy5oaGVhLCB0YWJsZXMuaG10eCwgbnVtR2x5cGhzT3V0LCBkdXBGaXJzdEVudHJ5KTtcblxuICAgICAgaWYgKCF0YWJsZXMuaGVhZCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwiaGVhZFwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBzYW5pdGl6ZUhlYWQodGFibGVzLmhlYWQsIG51bUdseXBocywgaXNUcnVlVHlwZSA/IHRhYmxlcy5sb2NhLmxlbmd0aCA6IDApO1xuICAgICAgdmFyIG1pc3NpbmdHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBpZiAoaXNUcnVlVHlwZSkge1xuICAgICAgICB2YXIgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pO1xuICAgICAgICB2YXIgZ2x5cGhzSW5mbyA9IHNhbml0aXplR2x5cGhMb2NhdGlvbnModGFibGVzLmxvY2EsIHRhYmxlcy5nbHlmLCBudW1HbHlwaHMsIGlzR2x5cGhMb2NhdGlvbnNMb25nLCBoaW50c1ZhbGlkLCBkdXBGaXJzdEVudHJ5LCBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpO1xuICAgICAgICBtaXNzaW5nR2x5cGhzID0gZ2x5cGhzSW5mby5taXNzaW5nR2x5cGhzO1xuXG4gICAgICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzLm1heHAubGVuZ3RoID49IDIyKSB7XG4gICAgICAgICAgdGFibGVzLm1heHAuZGF0YVsyNl0gPSBnbHlwaHNJbmZvLm1heFNpemVPZkluc3RydWN0aW9ucyA+PiA4O1xuICAgICAgICAgIHRhYmxlcy5tYXhwLmRhdGFbMjddID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgJiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0YWJsZXMuaGhlYSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwiaGhlYVwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFibGVzLmhoZWEuZGF0YVsxMF0gPT09IDAgJiYgdGFibGVzLmhoZWEuZGF0YVsxMV0gPT09IDApIHtcbiAgICAgICAgdGFibGVzLmhoZWEuZGF0YVsxMF0gPSAweGZmO1xuICAgICAgICB0YWJsZXMuaGhlYS5kYXRhWzExXSA9IDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIHZhciBtZXRyaWNzT3ZlcnJpZGUgPSB7XG4gICAgICAgIHVuaXRzUGVyRW06IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbMThdLCB0YWJsZXMuaGVhZC5kYXRhWzE5XSksXG4gICAgICAgIHlNYXg6IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbNDJdLCB0YWJsZXMuaGVhZC5kYXRhWzQzXSksXG4gICAgICAgIHlNaW46IHNpZ25lZEludDE2KHRhYmxlcy5oZWFkLmRhdGFbMzhdLCB0YWJsZXMuaGVhZC5kYXRhWzM5XSksXG4gICAgICAgIGFzY2VudDogaW50MTYodGFibGVzLmhoZWEuZGF0YVs0XSwgdGFibGVzLmhoZWEuZGF0YVs1XSksXG4gICAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlcy5oaGVhLmRhdGFbNl0sIHRhYmxlcy5oaGVhLmRhdGFbN10pXG4gICAgICB9O1xuICAgICAgdGhpcy5hc2NlbnQgPSBtZXRyaWNzT3ZlcnJpZGUuYXNjZW50IC8gbWV0cmljc092ZXJyaWRlLnVuaXRzUGVyRW07XG4gICAgICB0aGlzLmRlc2NlbnQgPSBtZXRyaWNzT3ZlcnJpZGUuZGVzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtO1xuXG4gICAgICBpZiAodGFibGVzLnBvc3QpIHtcbiAgICAgICAgcmVhZFBvc3RTY3JpcHRUYWJsZSh0YWJsZXMucG9zdCwgcHJvcGVydGllcywgbnVtR2x5cGhzKTtcbiAgICAgIH1cblxuICAgICAgdGFibGVzLnBvc3QgPSB7XG4gICAgICAgIHRhZzogXCJwb3N0XCIsXG4gICAgICAgIGRhdGE6IGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNoYXJDb2RlVG9HbHlwaElkID0gW107XG5cbiAgICAgIGZ1bmN0aW9uIGhhc0dseXBoKGdseXBoSWQpIHtcbiAgICAgICAgcmV0dXJuICFtaXNzaW5nR2x5cGhzW2dseXBoSWRdO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgICAgdmFyIGNpZFRvR2lkTWFwID0gcHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXTtcbiAgICAgICAgdmFyIGlzQ2lkVG9HaWRNYXBFbXB0eSA9IGNpZFRvR2lkTWFwLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcHJvcGVydGllcy5jTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCBjaWQpIHtcbiAgICAgICAgICBpZiAoY2lkID4gMHhmZmZmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1XCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBnbHlwaElkID0gLTE7XG5cbiAgICAgICAgICBpZiAoaXNDaWRUb0dpZE1hcEVtcHR5KSB7XG4gICAgICAgICAgICBnbHlwaElkID0gY2lkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2lkVG9HaWRNYXBbY2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnbHlwaElkID0gY2lkVG9HaWRNYXBbY2lkXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwICYmIGdseXBoSWQgPCBudW1HbHlwaHMgJiYgaGFzR2x5cGgoZ2x5cGhJZCkpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjbWFwVGFibGUgPSByZWFkQ21hcFRhYmxlKHRhYmxlcy5jbWFwLCBmb250LCB0aGlzLmlzU3ltYm9saWNGb250LCBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKTtcbiAgICAgICAgdmFyIGNtYXBQbGF0Zm9ybUlkID0gY21hcFRhYmxlLnBsYXRmb3JtSWQ7XG4gICAgICAgIHZhciBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkO1xuICAgICAgICB2YXIgY21hcE1hcHBpbmdzID0gY21hcFRhYmxlLm1hcHBpbmdzO1xuICAgICAgICB2YXIgY21hcE1hcHBpbmdzTGVuZ3RoID0gY21hcE1hcHBpbmdzLmxlbmd0aDtcbiAgICAgICAgbGV0IGJhc2VFbmNvZGluZyA9IFtdO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nICYmIChwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPT09IFwiTWFjUm9tYW5FbmNvZGluZ1wiIHx8IHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSA9PT0gXCJXaW5BbnNpRW5jb2RpbmdcIikpIHtcbiAgICAgICAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nICYmICF0aGlzLmlzU3ltYm9saWNGb250ICYmIChjbWFwUGxhdGZvcm1JZCA9PT0gMyAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMSB8fCBjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkpIHtcbiAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICAgICAgICB2YXIgZ2x5cGhOYW1lLCBzdGFuZGFyZEdseXBoTmFtZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXMgJiYgY2hhckNvZGUgaW4gdGhpcy5kaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgaW4gYmFzZUVuY29kaW5nICYmIGJhc2VFbmNvZGluZ1tjaGFyQ29kZV0gIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgZ2x5cGhOYW1lID0gYmFzZUVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFuZGFyZEdseXBoTmFtZSA9IHJlY292ZXJHbHlwaE5hbWUoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcbiAgICAgICAgICAgIHZhciB1bmljb2RlT3JDaGFyQ29kZTtcblxuICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAxKSB7XG4gICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAxICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gX2VuY29kaW5ncy5NYWNSb21hbkVuY29kaW5nLmluZGV4T2Yoc3RhbmRhcmRHbHlwaE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGlmIChjbWFwTWFwcGluZ3NbaV0uY2hhckNvZGUgIT09IHVuaWNvZGVPckNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBjbWFwTWFwcGluZ3NbaV0uZ2x5cGhJZDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY21hcE1hcHBpbmdzW2ldLmNoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBsZXQgY2hhckNvZGUgPSBjbWFwTWFwcGluZ3NbaV0uY2hhckNvZGU7XG5cbiAgICAgICAgICAgIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMyAmJiBjaGFyQ29kZSA+PSAweGYwMDAgJiYgY2hhckNvZGUgPD0gMHhmMGZmKSB7XG4gICAgICAgICAgICAgIGNoYXJDb2RlICY9IDB4ZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmdseXBoTmFtZXMgJiYgYmFzZUVuY29kaW5nLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgICAgIGlmIChjaGFyQ29kZVRvR2x5cGhJZFtpXSA9PT0gdW5kZWZpbmVkICYmIGJhc2VFbmNvZGluZ1tpXSkge1xuICAgICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGdseXBoSWQgPSBwcm9wZXJ0aWVzLmdseXBoTmFtZXMuaW5kZXhPZihnbHlwaE5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChnbHlwaElkID4gMCAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2ldID0gZ2x5cGhJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2hhckNvZGVUb0dseXBoSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkWzBdID0gMDtcbiAgICAgIH1cblxuICAgICAgbGV0IGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgICAgaWYgKCFkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgIGdseXBoWmVyb0lkID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgZ2x5cGhaZXJvSWQpO1xuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbmV3TWFwcGluZy50b0ZvbnRDaGFyO1xuICAgICAgdGFibGVzLmNtYXAgPSB7XG4gICAgICAgIHRhZzogXCJjbWFwXCIsXG4gICAgICAgIGRhdGE6IGNyZWF0ZUNtYXBUYWJsZShuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHNPdXQpXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRhYmxlc1tcIk9TLzJcIl0gfHwgIXZhbGlkYXRlT1MyVGFibGUodGFibGVzW1wiT1MvMlwiXSwgZm9udCkpIHtcbiAgICAgICAgdGFibGVzW1wiT1MvMlwiXSA9IHtcbiAgICAgICAgICB0YWc6IFwiT1MvMlwiLFxuICAgICAgICAgIGRhdGE6IGNyZWF0ZU9TMlRhYmxlKHByb3BlcnRpZXMsIG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG1ldHJpY3NPdmVycmlkZSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2ZmRmlsZSA9IG5ldyBfc3RyZWFtLlN0cmVhbSh0YWJsZXNbXCJDRkYgXCJdLmRhdGEpO1xuICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGNmZkZpbGUsIHByb3BlcnRpZXMsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgICAgICAgY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICAgICAgICB0YWJsZXNbXCJDRkYgXCJdLmRhdGEgPSBjb21waWxlci5jb21waWxlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gY29tcGlsZSBmb250IFwiICsgcHJvcGVydGllcy5sb2FkZWROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5uYW1lKSB7XG4gICAgICAgIHRhYmxlcy5uYW1lID0ge1xuICAgICAgICAgIHRhZzogXCJuYW1lXCIsXG4gICAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuYW1lUHJvdG90eXBlID0gcmVhZE5hbWVUYWJsZSh0YWJsZXMubmFtZSk7XG4gICAgICAgIHRhYmxlcy5uYW1lLmRhdGEgPSBjcmVhdGVOYW1lVGFibGUobmFtZSwgbmFtZVByb3RvdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWlsZGVyID0gbmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoaGVhZGVyLnZlcnNpb24pO1xuXG4gICAgICBmb3IgKHZhciB0YWJsZVRhZyBpbiB0YWJsZXMpIHtcbiAgICAgICAgYnVpbGRlci5hZGRUYWJsZSh0YWJsZVRhZywgdGFibGVzW3RhYmxlVGFnXS5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1aWxkZXIudG9BcnJheSgpO1xuICAgIH0sXG4gICAgY29udmVydDogZnVuY3Rpb24gRm9udF9jb252ZXJ0KGZvbnROYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgICBwcm9wZXJ0aWVzLmZpeGVkUGl0Y2ggPSBmYWxzZTtcblxuICAgICAgaWYgKHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBnbHlwaFplcm9JZCA9IDE7XG5cbiAgICAgIGlmIChmb250IGluc3RhbmNlb2YgQ0ZGRm9udCkge1xuICAgICAgICBnbHlwaFplcm9JZCA9IGZvbnQubnVtR2x5cGhzIC0gMTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcHBpbmcgPSBmb250LmdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKTtcbiAgICAgIHZhciBuZXdNYXBwaW5nID0gYWRqdXN0TWFwcGluZyhtYXBwaW5nLCBmb250Lmhhc0dseXBoSWQuYmluZChmb250KSwgZ2x5cGhaZXJvSWQpO1xuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbmV3TWFwcGluZy50b0ZvbnRDaGFyO1xuICAgICAgdmFyIG51bUdseXBocyA9IGZvbnQubnVtR2x5cGhzO1xuXG4gICAgICBmdW5jdGlvbiBnZXRDaGFyQ29kZXMoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdKSB7XG4gICAgICAgICAgICBpZiAoIWNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hhckNvZGVzLnB1c2goY2hhckNvZGUgfCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhckNvZGVzO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgIGlmIChnbHlwaElkID09PSBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZFtuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgcmV0dXJuIG5ld01hcHBpbmcubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VhY3MgPSBmb250LnNlYWNzO1xuXG4gICAgICBpZiAoU0VBQ19BTkFMWVNJU19FTkFCTEVEICYmIHNlYWNzICYmIHNlYWNzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICB2YXIgY2hhcnNldCA9IGZvbnQuZ2V0Q2hhcnNldCgpO1xuICAgICAgICB2YXIgc2VhY01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgZm9yICh2YXIgZ2x5cGhJZCBpbiBzZWFjcykge1xuICAgICAgICAgIGdseXBoSWQgfD0gMDtcbiAgICAgICAgICB2YXIgc2VhYyA9IHNlYWNzW2dseXBoSWRdO1xuICAgICAgICAgIHZhciBiYXNlR2x5cGhOYW1lID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW3NlYWNbMl1dO1xuICAgICAgICAgIHZhciBhY2NlbnRHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1szXV07XG4gICAgICAgICAgdmFyIGJhc2VHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGJhc2VHbHlwaE5hbWUpO1xuICAgICAgICAgIHZhciBhY2NlbnRHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGFjY2VudEdseXBoTmFtZSk7XG5cbiAgICAgICAgICBpZiAoYmFzZUdseXBoSWQgPCAwIHx8IGFjY2VudEdseXBoSWQgPCAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYWNjZW50T2Zmc2V0ID0ge1xuICAgICAgICAgICAgeDogc2VhY1swXSAqIG1hdHJpeFswXSArIHNlYWNbMV0gKiBtYXRyaXhbMl0gKyBtYXRyaXhbNF0sXG4gICAgICAgICAgICB5OiBzZWFjWzBdICogbWF0cml4WzFdICsgc2VhY1sxXSAqIG1hdHJpeFszXSArIG1hdHJpeFs1XVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhtYXBwaW5nLCBnbHlwaElkKTtcblxuICAgICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaGFyQ29kZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlID0gY2hhckNvZGVzW2ldO1xuICAgICAgICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgIHZhciBiYXNlRm9udENoYXJDb2RlID0gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGJhc2VHbHlwaElkKTtcbiAgICAgICAgICAgIHZhciBhY2NlbnRGb250Q2hhckNvZGUgPSBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgYWNjZW50R2x5cGhJZCk7XG4gICAgICAgICAgICBzZWFjTWFwW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgICAgYmFzZUZvbnRDaGFyQ29kZSxcbiAgICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlLFxuICAgICAgICAgICAgICBhY2NlbnRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydGllcy5zZWFjTWFwID0gc2VhY01hcDtcbiAgICAgIH1cblxuICAgICAgdmFyIHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgICB2YXIgYnVpbGRlciA9IG5ldyBPcGVuVHlwZUZpbGVCdWlsZGVyKFwiXFx4NEZcXHg1NFxceDU0XFx4NEZcIik7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwiQ0ZGIFwiLCBmb250LmRhdGEpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcIk9TLzJcIiwgY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCkpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcImNtYXBcIiwgY3JlYXRlQ21hcFRhYmxlKG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG51bUdseXBocykpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcImhlYWRcIiwgXCJcXHgwMFxceDAxXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MTBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHg1RlxceDBGXFx4M0NcXHhGNVwiICsgXCJcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYodW5pdHNQZXJFbSkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4OWVcXHgwYlxceDdlXFx4MjdcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyN1wiICsgXCJcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArIFwiXFx4MEZcXHhGRlwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuYXNjZW50KSArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAyIDogMCkgKyBcIlxceDAwXFx4MTFcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIik7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGhlYVwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4RkZcXHhGRlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHNhZmVTdHJpbmcxNihNYXRoLnRhbihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlKSAqIHByb3BlcnRpZXMueEhlaWdodCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJobXR4XCIsIGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCkge1xuICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSBmb250LmNoYXJzdHJpbmdzO1xuICAgICAgICB2YXIgY2ZmV2lkdGhzID0gZm9udC5jZmYgPyBmb250LmNmZi53aWR0aHMgOiBudWxsO1xuICAgICAgICB2YXIgaG10eCA9IFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMSwgaWkgPSBudW1HbHlwaHM7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgdmFyIHdpZHRoID0gMDtcblxuICAgICAgICAgIGlmIChjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyc3RyaW5nc1tpIC0gMV07XG4gICAgICAgICAgICB3aWR0aCA9IFwid2lkdGhcIiBpbiBjaGFyc3RyaW5nID8gY2hhcnN0cmluZy53aWR0aCA6IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChjZmZXaWR0aHMpIHtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKGNmZldpZHRoc1tpXSB8fCAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBobXR4ICs9IHN0cmluZzE2KHdpZHRoKSArIHN0cmluZzE2KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhtdHg7XG4gICAgICB9KCkpO1xuICAgICAgYnVpbGRlci5hZGRUYWJsZShcIm1heHBcIiwgXCJcXHgwMFxceDAwXFx4NTBcXHgwMFwiICsgc3RyaW5nMTYobnVtR2x5cGhzKSk7XG4gICAgICBidWlsZGVyLmFkZFRhYmxlKFwibmFtZVwiLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJwb3N0XCIsIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSk7XG4gICAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gICAgfSxcblxuICAgIGdldCBzcGFjZVdpZHRoKCkge1xuICAgICAgdmFyIHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbXCJzcGFjZVwiLCBcIm1pbnVzXCIsIFwib25lXCIsIFwiaVwiLCBcIklcIl07XG4gICAgICB2YXIgd2lkdGg7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGhOYW1lID0gcG9zc2libGVTcGFjZVJlcGxhY2VtZW50c1tpXTtcblxuICAgICAgICBpZiAoZ2x5cGhOYW1lIGluIHRoaXMud2lkdGhzKSB7XG4gICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tnbHlwaE5hbWVdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICB2YXIgZ2x5cGhVbmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdO1xuICAgICAgICB2YXIgY2hhcmNvZGUgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvc2l0ZSAmJiB0aGlzLmNNYXAuY29udGFpbnMoZ2x5cGhVbmljb2RlKSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy5jTWFwLmxvb2t1cChnbHlwaFVuaWNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGFyY29kZSAmJiB0aGlzLnRvVW5pY29kZSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihnbHlwaFVuaWNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgICBjaGFyY29kZSA9IGdseXBoVW5pY29kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbY2hhcmNvZGVdO1xuXG4gICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdpZHRoID0gd2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGg7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzcGFjZVdpZHRoXCIsIHdpZHRoKTtcbiAgICB9LFxuXG4gICAgY2hhclRvR2x5cGg6IGZ1bmN0aW9uIEZvbnRfY2hhclRvR2x5cGgoY2hhcmNvZGUsIGlzU3BhY2UpIHtcbiAgICAgIHZhciBmb250Q2hhckNvZGUsIHdpZHRoLCBvcGVyYXRvckxpc3RJZDtcbiAgICAgIHZhciB3aWR0aENvZGUgPSBjaGFyY29kZTtcblxuICAgICAgaWYgKHRoaXMuY01hcCAmJiB0aGlzLmNNYXAuY29udGFpbnMoY2hhcmNvZGUpKSB7XG4gICAgICAgIHdpZHRoQ29kZSA9IHRoaXMuY01hcC5sb29rdXAoY2hhcmNvZGUpO1xuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMud2lkdGhzW3dpZHRoQ29kZV07XG4gICAgICB3aWR0aCA9ICgwLCBfdXRpbC5pc051bSkod2lkdGgpID8gd2lkdGggOiB0aGlzLmRlZmF1bHRXaWR0aDtcbiAgICAgIHZhciB2bWV0cmljID0gdGhpcy52bWV0cmljcyAmJiB0aGlzLnZtZXRyaWNzW3dpZHRoQ29kZV07XG4gICAgICBsZXQgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyY29kZSkgfHwgdGhpcy5mYWxsYmFja1RvVW5pY29kZS5nZXQoY2hhcmNvZGUpIHx8IGNoYXJjb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIHVuaWNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdW5pY29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0luRm9udCA9IChjaGFyY29kZSBpbiB0aGlzLnRvRm9udENoYXIpO1xuICAgICAgZm9udENoYXJDb2RlID0gdGhpcy50b0ZvbnRDaGFyW2NoYXJjb2RlXSB8fCBjaGFyY29kZTtcblxuICAgICAgaWYgKHRoaXMubWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tjaGFyY29kZV0gfHwgdGhpcy5kZWZhdWx0RW5jb2RpbmdbY2hhcmNvZGVdO1xuXG4gICAgICAgIGlmICgoZ2x5cGhOYW1lID09PSBcIi5ub3RkZWZcIiB8fCBnbHlwaE5hbWUgPT09IFwiXCIpICYmIHRoaXMudHlwZSA9PT0gXCJUeXBlMVwiKSB7XG4gICAgICAgICAgZm9udENoYXJDb2RlID0gMHgyMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbnRDaGFyQ29kZSA9ICgwLCBfdW5pY29kZS5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcykoZm9udENoYXJDb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0SWQgPSBmb250Q2hhckNvZGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2NlbnQgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5zZWFjTWFwICYmIHRoaXMuc2VhY01hcFtjaGFyY29kZV0pIHtcbiAgICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgICB2YXIgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICAgIGZvbnRDaGFyQ29kZSA9IHNlYWMuYmFzZUZvbnRDaGFyQ29kZTtcbiAgICAgICAgYWNjZW50ID0ge1xuICAgICAgICAgIGZvbnRDaGFyOiBTdHJpbmcuZnJvbUNvZGVQb2ludChzZWFjLmFjY2VudEZvbnRDaGFyQ29kZSksXG4gICAgICAgICAgb2Zmc2V0OiBzZWFjLmFjY2VudE9mZnNldFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsZXQgZm9udENoYXIgPSBcIlwiO1xuXG4gICAgICBpZiAodHlwZW9mIGZvbnRDaGFyQ29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZm9udENoYXJDb2RlIDw9IDB4MTBmZmZmKSB7XG4gICAgICAgICAgZm9udENoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChmb250Q2hhckNvZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHtmb250Q2hhckNvZGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGdseXBoID0gdGhpcy5nbHlwaENhY2hlW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKCFnbHlwaCB8fCAhZ2x5cGgubWF0Y2hlc0ZvckNhY2hlKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICAgIGdseXBoID0gbmV3IEdseXBoKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpO1xuICAgICAgICB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdID0gZ2x5cGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbHlwaDtcbiAgICB9LFxuICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEZvbnRfY2hhcnNUb0dseXBocyhjaGFycykge1xuICAgICAgdmFyIGNoYXJzQ2FjaGUgPSB0aGlzLmNoYXJzQ2FjaGU7XG4gICAgICB2YXIgZ2x5cGhzLCBnbHlwaCwgY2hhcmNvZGU7XG5cbiAgICAgIGlmIChjaGFyc0NhY2hlKSB7XG4gICAgICAgIGdseXBocyA9IGNoYXJzQ2FjaGVbY2hhcnNdO1xuXG4gICAgICAgIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICByZXR1cm4gZ2x5cGhzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY2hhcnNDYWNoZSkge1xuICAgICAgICBjaGFyc0NhY2hlID0gdGhpcy5jaGFyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZ2x5cGhzID0gW107XG4gICAgICB2YXIgY2hhcnNDYWNoZUtleSA9IGNoYXJzO1xuICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgIGlpO1xuXG4gICAgICBpZiAodGhpcy5jTWFwKSB7XG4gICAgICAgIHZhciBjID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICB3aGlsZSAoaSA8IGNoYXJzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICAgIGNoYXJjb2RlID0gYy5jaGFyY29kZTtcbiAgICAgICAgICB2YXIgbGVuZ3RoID0gYy5sZW5ndGg7XG4gICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgdmFyIGlzU3BhY2UgPSBsZW5ndGggPT09IDEgJiYgY2hhcnMuY2hhckNvZGVBdChpIC0gMSkgPT09IDB4MjA7XG4gICAgICAgICAgZ2x5cGggPSB0aGlzLmNoYXJUb0dseXBoKGNoYXJjb2RlLCBpc1NwYWNlKTtcbiAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hhcnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGNoYXJjb2RlID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICBnbHlwaCA9IHRoaXMuY2hhclRvR2x5cGgoY2hhcmNvZGUsIGNoYXJjb2RlID09PSAweDIwKTtcbiAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoYXJzQ2FjaGVbY2hhcnNDYWNoZUtleV0gPSBnbHlwaHM7XG4gICAgfSxcblxuICAgIGdldCBnbHlwaENhY2hlVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5nbHlwaENhY2hlKTtcbiAgICB9XG5cbiAgfTtcbiAgcmV0dXJuIEZvbnQ7XG59KCk7XG5cbmV4cG9ydHMuRm9udCA9IEZvbnQ7XG5cbnZhciBFcnJvckZvbnQgPSBmdW5jdGlvbiBFcnJvckZvbnRDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBFcnJvckZvbnQoZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gXCJnX2ZvbnRfZXJyb3JcIjtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgfVxuXG4gIEVycm9yRm9udC5wcm90b3R5cGUgPSB7XG4gICAgY2hhcnNUb0dseXBoczogZnVuY3Rpb24gRXJyb3JGb250X2NoYXJzVG9HbHlwaHMoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIGV4cG9ydERhdGEoZXh0cmFQcm9wZXJ0aWVzID0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiB0aGlzLmVycm9yXG4gICAgICB9O1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gRXJyb3JGb250O1xufSgpO1xuXG5leHBvcnRzLkVycm9yRm9udCA9IEVycm9yRm9udDtcblxuZnVuY3Rpb24gdHlwZTFGb250R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcykge1xuICB2YXIgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgZ2x5cGhJZCwgY2hhckNvZGUsIGJhc2VFbmNvZGluZztcbiAgdmFyIGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7XG5cbiAgaWYgKHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSkge1xuICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuXG4gICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGJ1aWx0SW5FbmNvZGluZykge1xuICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZUVuY29kaW5nID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihiYXNlRW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzLFxuICAgICAgZ2x5cGhzVW5pY29kZU1hcDtcblxuICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGRpZmZlcmVuY2VzKSB7XG4gICAgICB2YXIgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihnbHlwaE5hbWUpO1xuXG4gICAgICBpZiAoZ2x5cGhJZCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKCFnbHlwaHNVbmljb2RlTWFwKSB7XG4gICAgICAgICAgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhbmRhcmRHbHlwaE5hbWUgPSByZWNvdmVyR2x5cGhOYW1lKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgaWYgKHN0YW5kYXJkR2x5cGhOYW1lICE9PSBnbHlwaE5hbWUpIHtcbiAgICAgICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbn1cblxudmFyIFR5cGUxRm9udCA9IGZ1bmN0aW9uIFR5cGUxRm9udENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGZpbmRCbG9jayhzdHJlYW1CeXRlcywgc2lnbmF0dXJlLCBzdGFydEluZGV4KSB7XG4gICAgdmFyIHN0cmVhbUJ5dGVzTGVuZ3RoID0gc3RyZWFtQnl0ZXMubGVuZ3RoO1xuICAgIHZhciBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgIHZhciBzY2FuTGVuZ3RoID0gc3RyZWFtQnl0ZXNMZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7XG4gICAgdmFyIGkgPSBzdGFydEluZGV4LFxuICAgICAgICBqLFxuICAgICAgICBmb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGkgPCBzY2FuTGVuZ3RoKSB7XG4gICAgICBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc3RyZWFtQnl0ZXNbaSArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgaSArPSBqO1xuXG4gICAgICAgIHdoaWxlIChpIDwgc3RyZWFtQnl0ZXNMZW5ndGggJiYgKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoc3RyZWFtQnl0ZXNbaV0pKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3VuZCxcbiAgICAgIGxlbmd0aDogaVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRIZWFkZXJCbG9jayhzdHJlYW0sIHN1Z2dlc3RlZExlbmd0aCkge1xuICAgIHZhciBFRVhFQ19TSUdOQVRVUkUgPSBbMHg2NSwgMHg2NSwgMHg3OCwgMHg2NSwgMHg2M107XG4gICAgdmFyIHN0cmVhbVN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICB2YXIgaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzTGVuZ3RoLCBibG9jaztcblxuICAgIHRyeSB7XG4gICAgICBoZWFkZXJCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpO1xuICAgICAgaGVhZGVyQnl0ZXNMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJCeXRlc0xlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgICBibG9jayA9IGZpbmRCbG9jayhoZWFkZXJCeXRlcywgRUVYRUNfU0lHTkFUVVJFLCBzdWdnZXN0ZWRMZW5ndGggLSAyICogRUVYRUNfU0lHTkFUVVJFLmxlbmd0aCk7XG5cbiAgICAgIGlmIChibG9jay5mb3VuZCAmJiBibG9jay5sZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGhlYWRlckJ5dGVzKSxcbiAgICAgICAgICBsZW5ndGg6IHN1Z2dlc3RlZExlbmd0aFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGFydFBvcztcbiAgICB2YXIgU0NBTl9CTE9DS19MRU5HVEggPSAyMDQ4O1xuICAgIHZhciBhY3R1YWxMZW5ndGg7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgYmxvY2sgPSBmaW5kQmxvY2soc2NhbkJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIDApO1xuXG4gICAgICBpZiAoYmxvY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ucG9zICs9IGJsb2NrLmxlbmd0aDtcblxuICAgICAgaWYgKGJsb2NrLmZvdW5kKSB7XG4gICAgICAgIGFjdHVhbExlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdHJlYW1TdGFydFBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXJ0UG9zO1xuXG4gICAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oc3RyZWFtLmdldEJ5dGVzKGFjdHVhbExlbmd0aCkpLFxuICAgICAgICBsZW5ndGg6IGFjdHVhbExlbmd0aFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpKSxcbiAgICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICB2YXIgZWV4ZWNCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShlZXhlY0J5dGVzKSxcbiAgICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpIHtcbiAgICB2YXIgUEZCX0hFQURFUl9TSVpFID0gNjtcbiAgICB2YXIgaGVhZGVyQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDE7XG4gICAgdmFyIGVleGVjQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDI7XG4gICAgdmFyIHBmYkhlYWRlciA9IGZpbGUucGVla0J5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgdmFyIHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgaGVhZGVyQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICB2YXIgaGVhZGVyQmxvY2sgPSBnZXRIZWFkZXJCbG9jayhmaWxlLCBoZWFkZXJCbG9ja0xlbmd0aCk7XG4gICAgdmFyIGhlYWRlckJsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoaGVhZGVyQmxvY2suc3RyZWFtLCBmYWxzZSwgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICBoZWFkZXJCbG9ja1BhcnNlci5leHRyYWN0Rm9udEhlYWRlcihwcm9wZXJ0aWVzKTtcblxuICAgIGlmIChwZmJIZWFkZXJQcmVzZW50KSB7XG4gICAgICBwZmJIZWFkZXIgPSBmaWxlLmdldEJ5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgICBlZXhlY0Jsb2NrTGVuZ3RoID0gcGZiSGVhZGVyWzVdIDw8IDI0IHwgcGZiSGVhZGVyWzRdIDw8IDE2IHwgcGZiSGVhZGVyWzNdIDw8IDggfCBwZmJIZWFkZXJbMl07XG4gICAgfVxuXG4gICAgdmFyIGVleGVjQmxvY2sgPSBnZXRFZXhlY0Jsb2NrKGZpbGUsIGVleGVjQmxvY2tMZW5ndGgpO1xuICAgIHZhciBlZXhlY0Jsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoZWV4ZWNCbG9jay5zdHJlYW0sIHRydWUsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgdmFyIGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbShwcm9wZXJ0aWVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllc1trZXldID0gZGF0YS5wcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzdHJpbmdzID0gZGF0YS5jaGFyc3RyaW5ncztcbiAgICB2YXIgdHlwZTJDaGFyc3RyaW5ncyA9IHRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhjaGFyc3RyaW5ncyk7XG4gICAgdmFyIHN1YnJzID0gdGhpcy5nZXRUeXBlMlN1YnJzKGRhdGEuc3VicnMpO1xuICAgIHRoaXMuY2hhcnN0cmluZ3MgPSBjaGFyc3RyaW5ncztcbiAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmdldFNlYWNzKGRhdGEuY2hhcnN0cmluZ3MpO1xuICB9XG5cbiAgVHlwZTFGb250LnByb3RvdHlwZSA9IHtcbiAgICBnZXQgbnVtR2x5cGhzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoICsgMTtcbiAgICB9LFxuXG4gICAgZ2V0Q2hhcnNldDogZnVuY3Rpb24gVHlwZTFGb250X2dldENoYXJzZXQoKSB7XG4gICAgICB2YXIgY2hhcnNldCA9IFtcIi5ub3RkZWZcIl07XG4gICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICBmb3IgKHZhciBnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgIGNoYXJzZXQucHVzaChjaGFyc3RyaW5nc1tnbHlwaElkXS5nbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnNldDtcbiAgICB9LFxuICAgIGdldEdseXBoTWFwcGluZzogZnVuY3Rpb24gVHlwZTFGb250X2dldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGZvciAobGV0IGdseXBoSWQgPSAwLCBjaGFyc3RyaW5nc0xlbiA9IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzTGVuOyBnbHlwaElkKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGdseXBoSWQpO1xuICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGhOYW1lcyA9IFtcIi5ub3RkZWZcIl0sXG4gICAgICAgICAgZ2x5cGhJZDtcblxuICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgIGdseXBoTmFtZXMucHVzaChjaGFyc3RyaW5nc1tnbHlwaElkXS5nbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZztcblxuICAgICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICAgIHZhciBidWlsdEluRW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihlbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKTtcbiAgICB9LFxuICAgIGhhc0dseXBoSWQ6IGZ1bmN0aW9uIFR5cGUxRm9udF9oYXNHbHlwaElEKGlkKSB7XG4gICAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMubnVtR2x5cGhzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlkID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZ2x5cGggPSB0aGlzLmNoYXJzdHJpbmdzW2lkIC0gMV07XG4gICAgICByZXR1cm4gZ2x5cGguY2hhcnN0cmluZy5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgZ2V0U2VhY3M6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRTZWFjcyhjaGFyc3RyaW5ncykge1xuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIHNlYWNNYXAgPSBbXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhcnN0cmluZ3NbaV07XG5cbiAgICAgICAgaWYgKGNoYXJzdHJpbmcuc2VhYykge1xuICAgICAgICAgIHNlYWNNYXBbaSArIDFdID0gY2hhcnN0cmluZy5zZWFjO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWFjTWFwO1xuICAgIH0sXG4gICAgZ2V0VHlwZTJDaGFyc3RyaW5nczogZnVuY3Rpb24gVHlwZTFGb250X2dldFR5cGUyQ2hhcnN0cmluZ3ModHlwZTFDaGFyc3RyaW5ncykge1xuICAgICAgdmFyIHR5cGUyQ2hhcnN0cmluZ3MgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdHlwZTFDaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHR5cGUyQ2hhcnN0cmluZ3MucHVzaCh0eXBlMUNoYXJzdHJpbmdzW2ldLmNoYXJzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgICB9LFxuICAgIGdldFR5cGUyU3VicnM6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRUeXBlMlN1YnJzKHR5cGUxU3VicnMpIHtcbiAgICAgIHZhciBiaWFzID0gMDtcbiAgICAgIHZhciBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgICBpZiAoY291bnQgPCAxMTMzKSB7XG4gICAgICAgIGJpYXMgPSAxMDc7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50IDwgMzM3NjkpIHtcbiAgICAgICAgYmlhcyA9IDExMzE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaWFzID0gMzI3Njg7XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlMlN1YnJzID0gW107XG4gICAgICB2YXIgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGJpYXM7IGkrKykge1xuICAgICAgICB0eXBlMlN1YnJzLnB1c2goWzB4MGJdKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdHlwZTJTdWJycy5wdXNoKHR5cGUxU3VicnNbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZTJTdWJycztcbiAgICB9LFxuICAgIHdyYXA6IGZ1bmN0aW9uIFR5cGUxRm9udF93cmFwKG5hbWUsIGdseXBocywgY2hhcnN0cmluZ3MsIHN1YnJzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgY2ZmID0gbmV3IF9jZmZfcGFyc2VyLkNGRigpO1xuICAgICAgY2ZmLmhlYWRlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZIZWFkZXIoMSwgMCwgNCwgNCk7XG4gICAgICBjZmYubmFtZXMgPSBbbmFtZV07XG4gICAgICB2YXIgdG9wRGljdCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZUb3BEaWN0KCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcInZlcnNpb25cIiwgMzkxKTtcbiAgICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiTm90aWNlXCIsIDM5Mik7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZ1bGxOYW1lXCIsIDM5Myk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZhbWlseU5hbWVcIiwgMzk0KTtcbiAgICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiV2VpZ2h0XCIsIDM5NSk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkVuY29kaW5nXCIsIG51bGwpO1xuICAgICAgdG9wRGljdC5zZXRCeU5hbWUoXCJGb250TWF0cml4XCIsIHByb3BlcnRpZXMuZm9udE1hdHJpeCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRCQm94XCIsIHByb3BlcnRpZXMuYmJveCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcImNoYXJzZXRcIiwgbnVsbCk7XG4gICAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkNoYXJTdHJpbmdzXCIsIG51bGwpO1xuICAgICAgdG9wRGljdC5zZXRCeU5hbWUoXCJQcml2YXRlXCIsIG51bGwpO1xuICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgdmFyIHN0cmluZ3MgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGU3RyaW5ncygpO1xuICAgICAgc3RyaW5ncy5hZGQoXCJWZXJzaW9uIDAuMTFcIik7XG4gICAgICBzdHJpbmdzLmFkZChcIlNlZSBvcmlnaW5hbCBub3RpY2VcIik7XG4gICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgIHN0cmluZ3MuYWRkKG5hbWUpO1xuICAgICAgc3RyaW5ncy5hZGQoXCJNZWRpdW1cIik7XG4gICAgICBjZmYuc3RyaW5ncyA9IHN0cmluZ3M7XG4gICAgICBjZmYuZ2xvYmFsU3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG4gICAgICB2YXIgY291bnQgPSBnbHlwaHMubGVuZ3RoO1xuICAgICAgdmFyIGNoYXJzZXRBcnJheSA9IFtcIi5ub3RkZWZcIl07XG4gICAgICB2YXIgaSwgaWk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGNoYXJzdHJpbmdzW2ldLmdseXBoTmFtZTtcblxuICAgICAgICBjb25zdCBpbmRleCA9IF9jZmZfcGFyc2VyLkNGRlN0YW5kYXJkU3RyaW5ncy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHN0cmluZ3MuYWRkKGdseXBoTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGFyc2V0QXJyYXkucHVzaChnbHlwaE5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBjaGFyc2V0QXJyYXkpO1xuICAgICAgdmFyIGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKFsweDhiLCAweDBlXSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzSW5kZXg7XG4gICAgICB2YXIgcHJpdmF0ZURpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUHJpdmF0ZURpY3QoKTtcbiAgICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShcIlN1YnJzXCIsIG51bGwpO1xuICAgICAgdmFyIGZpZWxkcyA9IFtcIkJsdWVWYWx1ZXNcIiwgXCJPdGhlckJsdWVzXCIsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJGYW1pbHlPdGhlckJsdWVzXCIsIFwiU3RlbVNuYXBIXCIsIFwiU3RlbVNuYXBWXCIsIFwiQmx1ZVNoaWZ0XCIsIFwiQmx1ZUZ1enpcIiwgXCJCbHVlU2NhbGVcIiwgXCJMYW5ndWFnZUdyb3VwXCIsIFwiRXhwYW5zaW9uRmFjdG9yXCIsIFwiRm9yY2VCb2xkXCIsIFwiU3RkSFdcIiwgXCJTdGRWV1wiXTtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmaWVsZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHNbaV07XG5cbiAgICAgICAgaWYgKCEoZmllbGQgaW4gcHJvcGVydGllcy5wcml2YXRlRGF0YSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXMucHJpdmF0ZURhdGFbZmllbGRdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSB2YWx1ZS5sZW5ndGggLSAxOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgICB2YWx1ZVtqXSAtPSB2YWx1ZVtqIC0gMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZURpY3Quc2V0QnlOYW1lKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgICB2YXIgc3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gc3VicnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBzdWJySW5kZXguYWRkKHN1YnJzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcHJpdmF0ZURpY3Quc3VicnNJbmRleCA9IHN1YnJJbmRleDtcbiAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBUeXBlMUZvbnQ7XG59KCk7XG5cbnZhciBDRkZGb250ID0gZnVuY3Rpb24gQ0ZGRm9udENsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIENGRkZvbnQoZmlsZSwgcHJvcGVydGllcykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoZmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICB0aGlzLmNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICAgIHRoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmNmZi5zZWFjcztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmRhdGEgPSBjb21waWxlci5jb21waWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCBcIiArIHByb3BlcnRpZXMubG9hZGVkTmFtZSk7XG4gICAgICB0aGlzLmRhdGEgPSBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIENGRkZvbnQucHJvdG90eXBlID0ge1xuICAgIGdldCBudW1HbHlwaHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnQ7XG4gICAgfSxcblxuICAgIGdldENoYXJzZXQ6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0Q2hhcnNldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNmZi5jaGFyc2V0LmNoYXJzZXQ7XG4gICAgfSxcbiAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgICAgdmFyIGNmZiA9IHRoaXMuY2ZmO1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICB2YXIgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgICAgdmFyIGdseXBoSWQ7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGxldCBjaGFyQ29kZTtcblxuICAgICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc2V0cy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgdmFyIGNpZCA9IGNoYXJzZXRzW2dseXBoSWRdO1xuICAgICAgICAgICAgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihjaWQpO1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNmZi5jaGFyU3RyaW5ncy5jb3VudDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGdseXBoSWQpO1xuICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbmNvZGluZyA9IGNmZi5lbmNvZGluZyA/IGNmZi5lbmNvZGluZy5lbmNvZGluZyA6IG51bGw7XG4gICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBlbmNvZGluZywgY2hhcnNldHMpO1xuICAgICAgcmV0dXJuIGNoYXJDb2RlVG9HbHlwaElkO1xuICAgIH0sXG4gICAgaGFzR2x5cGhJZDogZnVuY3Rpb24gQ0ZGRm9udF9oYXNHbHlwaElEKGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZmYuaGFzR2x5cGhJZChpZCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gQ0ZGRm9udDtcbn0oKTtcblxuLyoqKi8gfSksXG4vKiAzMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5DRkZGRFNlbGVjdCA9IGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gZXhwb3J0cy5DRkZUb3BEaWN0ID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkZJbmRleCA9IGV4cG9ydHMuQ0ZGU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGSGVhZGVyID0gZXhwb3J0cy5DRkYgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NoYXJzZXRzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMik7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMyk7XG5cbnZhciBNQVhfU1VCUl9ORVNUSU5HID0gMTA7XG52YXIgQ0ZGU3RhbmRhcmRTdHJpbmdzID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcInplcm9zdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIjAwMS4wMDBcIiwgXCIwMDEuMDAxXCIsIFwiMDAxLjAwMlwiLCBcIjAwMS4wMDNcIiwgXCJCbGFja1wiLCBcIkJvbGRcIiwgXCJCb29rXCIsIFwiTGlnaHRcIiwgXCJNZWRpdW1cIiwgXCJSZWd1bGFyXCIsIFwiUm9tYW5cIiwgXCJTZW1pYm9sZFwiXTtcbmV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuY29uc3QgTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTID0gMzkxO1xuXG52YXIgQ0ZGUGFyc2VyID0gZnVuY3Rpb24gQ0ZGUGFyc2VyQ2xvc3VyZSgpIHtcbiAgdmFyIENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YSA9IFtudWxsLCB7XG4gICAgaWQ6IFwiaHN0ZW1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJ2c3RlbVwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgIHN0ZW06IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZtb3ZldG9cIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicmxpbmV0b1wiLFxuICAgIG1pbjogMixcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJobGluZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZsaW5ldG9cIixcbiAgICBtaW46IDEsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicnJjdXJ2ZXRvXCIsXG4gICAgbWluOiA2LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcImNhbGxzdWJyXCIsXG4gICAgbWluOiAxLFxuICAgIHVuZGVmU3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJldHVyblwiLFxuICAgIG1pbjogMCxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJlbmRjaGFyXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImhzdGVtaG1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoaW50bWFza1wiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJjbnRybWFza1wiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJybW92ZXRvXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImhtb3ZldG9cIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidnN0ZW1obVwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgIHN0ZW06IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJjdXJ2ZWxpbmVcIixcbiAgICBtaW46IDgsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicmxpbmVjdXJ2ZVwiLFxuICAgIG1pbjogOCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2dmN1cnZldG9cIixcbiAgICBtaW46IDQsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGhjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcImNhbGxnc3ViclwiLFxuICAgIG1pbjogMSxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2aGN1cnZldG9cIixcbiAgICBtaW46IDQsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaHZjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG4gIHZhciBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMiA9IFtudWxsLCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiYW5kXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xXG4gIH0sIHtcbiAgICBpZDogXCJvclwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMVxuICB9LCB7XG4gICAgaWQ6IFwibm90XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImFic1wiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJhZGRcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTEsXG4gICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKyBzdGFja1tpbmRleCAtIDFdO1xuICAgIH1cbiAgfSwge1xuICAgIGlkOiBcInN1YlwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAtIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZGl2XCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdIC8gc3RhY2tbaW5kZXggLSAxXTtcbiAgICB9XG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJuZWdcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMCxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDFdID0gLXN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZXFcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImRyb3BcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcInB1dFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMlxuICB9LCB7XG4gICAgaWQ6IFwiZ2V0XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwge1xuICAgIGlkOiBcImlmZWxzZVwiLFxuICAgIG1pbjogNCxcbiAgICBzdGFja0RlbHRhOiAtM1xuICB9LCB7XG4gICAgaWQ6IFwicmFuZG9tXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrRGVsdGE6IDFcbiAgfSwge1xuICAgIGlkOiBcIm11bFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAqIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwic3FydFwiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJkdXBcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMVxuICB9LCB7XG4gICAgaWQ6IFwiZXhjaFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJpbmRleFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJyb2xsXCIsXG4gICAgbWluOiAzLFxuICAgIHN0YWNrRGVsdGE6IC0yXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoZmxleFwiLFxuICAgIG1pbjogNyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJmbGV4XCIsXG4gICAgbWluOiAxMyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoZmxleDFcIixcbiAgICBtaW46IDksXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiZmxleDFcIixcbiAgICBtaW46IDExLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG5cbiAgY2xhc3MgQ0ZGUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICB0aGlzLmJ5dGVzID0gZmlsZS5nZXRCeXRlcygpO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwYXJzZSgpIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xuICAgICAgdmFyIGNmZiA9IG5ldyBDRkYoKTtcbiAgICAgIHRoaXMuY2ZmID0gY2ZmO1xuICAgICAgdmFyIGhlYWRlciA9IHRoaXMucGFyc2VIZWFkZXIoKTtcbiAgICAgIHZhciBuYW1lSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgoaGVhZGVyLmVuZFBvcyk7XG4gICAgICB2YXIgdG9wRGljdEluZGV4ID0gdGhpcy5wYXJzZUluZGV4KG5hbWVJbmRleC5lbmRQb3MpO1xuICAgICAgdmFyIHN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHRvcERpY3RJbmRleC5lbmRQb3MpO1xuICAgICAgdmFyIGdsb2JhbFN1YnJJbmRleCA9IHRoaXMucGFyc2VJbmRleChzdHJpbmdJbmRleC5lbmRQb3MpO1xuICAgICAgdmFyIHRvcERpY3RQYXJzZWQgPSB0aGlzLnBhcnNlRGljdCh0b3BEaWN0SW5kZXgub2JqLmdldCgwKSk7XG4gICAgICB2YXIgdG9wRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LCB0b3BEaWN0UGFyc2VkLCBjZmYuc3RyaW5ncyk7XG4gICAgICBjZmYuaGVhZGVyID0gaGVhZGVyLm9iajtcbiAgICAgIGNmZi5uYW1lcyA9IHRoaXMucGFyc2VOYW1lSW5kZXgobmFtZUluZGV4Lm9iaik7XG4gICAgICBjZmYuc3RyaW5ncyA9IHRoaXMucGFyc2VTdHJpbmdJbmRleChzdHJpbmdJbmRleC5vYmopO1xuICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgY2ZmLmdsb2JhbFN1YnJJbmRleCA9IGdsb2JhbFN1YnJJbmRleC5vYmo7XG4gICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoY2ZmLnRvcERpY3QpO1xuICAgICAgY2ZmLmlzQ0lERm9udCA9IHRvcERpY3QuaGFzTmFtZShcIlJPU1wiKTtcbiAgICAgIHZhciBjaGFyU3RyaW5nT2Zmc2V0ID0gdG9wRGljdC5nZXRCeU5hbWUoXCJDaGFyU3RyaW5nc1wiKTtcbiAgICAgIHZhciBjaGFyU3RyaW5nSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgoY2hhclN0cmluZ09mZnNldCkub2JqO1xuICAgICAgdmFyIGZvbnRNYXRyaXggPSB0b3BEaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIik7XG5cbiAgICAgIGlmIChmb250TWF0cml4KSB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udE1hdHJpeCA9IGZvbnRNYXRyaXg7XG4gICAgICB9XG5cbiAgICAgIHZhciBmb250QkJveCA9IHRvcERpY3QuZ2V0QnlOYW1lKFwiRm9udEJCb3hcIik7XG5cbiAgICAgIGlmIChmb250QkJveCkge1xuICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IE1hdGgubWluKGZvbnRCQm94WzFdLCBmb250QkJveFszXSk7XG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50U2NhbGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNoYXJzZXQsIGVuY29kaW5nO1xuXG4gICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICB2YXIgZmRBcnJheUluZGV4ID0gdGhpcy5wYXJzZUluZGV4KHRvcERpY3QuZ2V0QnlOYW1lKFwiRkRBcnJheVwiKSkub2JqO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZkQXJyYXlJbmRleC5jb3VudDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICB2YXIgZGljdFJhdyA9IGZkQXJyYXlJbmRleC5nZXQoaSk7XG4gICAgICAgICAgdmFyIGZvbnREaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsIHRoaXMucGFyc2VEaWN0KGRpY3RSYXcpLCBjZmYuc3RyaW5ncyk7XG4gICAgICAgICAgdGhpcy5wYXJzZVByaXZhdGVEaWN0KGZvbnREaWN0KTtcbiAgICAgICAgICBjZmYuZmRBcnJheS5wdXNoKGZvbnREaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuY29kaW5nID0gbnVsbDtcbiAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZShcImNoYXJzZXRcIiksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIHRydWUpO1xuICAgICAgICBjZmYuZmRTZWxlY3QgPSB0aGlzLnBhcnNlRkRTZWxlY3QodG9wRGljdC5nZXRCeU5hbWUoXCJGRFNlbGVjdFwiKSwgY2hhclN0cmluZ0luZGV4LmNvdW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJzZXQgPSB0aGlzLnBhcnNlQ2hhcnNldHModG9wRGljdC5nZXRCeU5hbWUoXCJjaGFyc2V0XCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQsIGNmZi5zdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgIGVuY29kaW5nID0gdGhpcy5wYXJzZUVuY29kaW5nKHRvcERpY3QuZ2V0QnlOYW1lKFwiRW5jb2RpbmdcIiksIHByb3BlcnRpZXMsIGNmZi5zdHJpbmdzLCBjaGFyc2V0LmNoYXJzZXQpO1xuICAgICAgfVxuXG4gICAgICBjZmYuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgICBjZmYuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgIHZhciBjaGFyU3RyaW5nc0FuZFNlYWNzID0gdGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtcbiAgICAgICAgY2hhclN0cmluZ3M6IGNoYXJTdHJpbmdJbmRleCxcbiAgICAgICAgbG9jYWxTdWJySW5kZXg6IHRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleCxcbiAgICAgICAgZ2xvYmFsU3VickluZGV4OiBnbG9iYWxTdWJySW5kZXgub2JqLFxuICAgICAgICBmZFNlbGVjdDogY2ZmLmZkU2VsZWN0LFxuICAgICAgICBmZEFycmF5OiBjZmYuZmRBcnJheSxcbiAgICAgICAgcHJpdmF0ZURpY3Q6IHRvcERpY3QucHJpdmF0ZURpY3RcbiAgICAgIH0pO1xuICAgICAgY2ZmLmNoYXJTdHJpbmdzID0gY2hhclN0cmluZ3NBbmRTZWFjcy5jaGFyU3RyaW5ncztcbiAgICAgIGNmZi5zZWFjcyA9IGNoYXJTdHJpbmdzQW5kU2VhY3Muc2VhY3M7XG4gICAgICBjZmYud2lkdGhzID0gY2hhclN0cmluZ3NBbmRTZWFjcy53aWR0aHM7XG4gICAgICByZXR1cm4gY2ZmO1xuICAgIH1cblxuICAgIHBhcnNlSGVhZGVyKCkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZXNMZW5ndGggJiYgYnl0ZXNbb2Zmc2V0XSAhPT0gMSkge1xuICAgICAgICArK29mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIENGRiBoZWFkZXJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiY2ZmIGRhdGEgaXMgc2hpZnRlZFwiKTtcbiAgICAgICAgYnl0ZXMgPSBieXRlcy5zdWJhcnJheShvZmZzZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYWpvciA9IGJ5dGVzWzBdO1xuICAgICAgdmFyIG1pbm9yID0gYnl0ZXNbMV07XG4gICAgICB2YXIgaGRyU2l6ZSA9IGJ5dGVzWzJdO1xuICAgICAgdmFyIG9mZlNpemUgPSBieXRlc1szXTtcbiAgICAgIHZhciBoZWFkZXIgPSBuZXcgQ0ZGSGVhZGVyKG1ham9yLCBtaW5vciwgaGRyU2l6ZSwgb2ZmU2l6ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmo6IGhlYWRlcixcbiAgICAgICAgZW5kUG9zOiBoZHJTaXplXG4gICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlRGljdChkaWN0KSB7XG4gICAgICB2YXIgcG9zID0gMDtcblxuICAgICAgZnVuY3Rpb24gcGFyc2VPcGVyYW5kKCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBkaWN0W3BvcysrXTtcblxuICAgICAgICBpZiAodmFsdWUgPT09IDMwKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXRPcGVyYW5kKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI4KSB7XG4gICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCAyNCB8IGRpY3RbcG9zKytdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI5KSB7XG4gICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMzIgJiYgdmFsdWUgPD0gMjQ2KSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIC0gMTM5O1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTApIHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlIC0gMjQ3KSAqIDI1NiArIGRpY3RbcG9zKytdICsgMTA4O1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI1MSAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICByZXR1cm4gLSgodmFsdWUgLSAyNTEpICogMjU2KSAtIGRpY3RbcG9zKytdIC0gMTA4O1xuICAgICAgICB9XG5cbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiBcIicgKyB2YWx1ZSArICdcIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlRmxvYXRPcGVyYW5kKCkge1xuICAgICAgICB2YXIgc3RyID0gXCJcIjtcbiAgICAgICAgdmFyIGVvZiA9IDE1O1xuICAgICAgICBjb25zdCBsb29rdXAgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiLlwiLCBcIkVcIiwgXCJFLVwiLCBudWxsLCBcIi1cIl07XG4gICAgICAgIHZhciBsZW5ndGggPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAocG9zIDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGIgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICB2YXIgYjEgPSBiID4+IDQ7XG4gICAgICAgICAgdmFyIGIyID0gYiAmIDE1O1xuXG4gICAgICAgICAgaWYgKGIxID09PSBlb2YpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBsb29rdXBbYjFdO1xuXG4gICAgICAgICAgaWYgKGIyID09PSBlb2YpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBsb29rdXBbYjJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wZXJhbmRzID0gW107XG4gICAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgICAgcG9zID0gMDtcbiAgICAgIHZhciBlbmQgPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKHBvcyA8IGVuZCkge1xuICAgICAgICB2YXIgYiA9IGRpY3RbcG9zXTtcblxuICAgICAgICBpZiAoYiA8PSAyMSkge1xuICAgICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgICAgYiA9IGIgPDwgOCB8IGRpY3RbKytwb3NdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudHJpZXMucHVzaChbYiwgb3BlcmFuZHNdKTtcbiAgICAgICAgICBvcGVyYW5kcyA9IFtdO1xuICAgICAgICAgICsrcG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2gocGFyc2VPcGVyYW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cblxuICAgIHBhcnNlSW5kZXgocG9zKSB7XG4gICAgICB2YXIgY2ZmSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcbiAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICB2YXIgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgIHZhciBvZmZzZXRzID0gW107XG4gICAgICB2YXIgZW5kID0gcG9zO1xuICAgICAgdmFyIGksIGlpO1xuXG4gICAgICBpZiAoY291bnQgIT09IDApIHtcbiAgICAgICAgdmFyIG9mZnNldFNpemUgPSBieXRlc1twb3MrK107XG4gICAgICAgIHZhciBzdGFydFBvcyA9IHBvcyArIChjb3VudCArIDEpICogb2Zmc2V0U2l6ZSAtIDE7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjb3VudCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9mZnNldFNpemU7ICsraikge1xuICAgICAgICAgICAgb2Zmc2V0IDw8PSA4O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXRzLnB1c2goc3RhcnRQb3MgKyBvZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kID0gb2Zmc2V0c1tjb3VudF07XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgb2Zmc2V0U3RhcnQgPSBvZmZzZXRzW2ldO1xuICAgICAgICB2YXIgb2Zmc2V0RW5kID0gb2Zmc2V0c1tpICsgMV07XG4gICAgICAgIGNmZkluZGV4LmFkZChieXRlcy5zdWJhcnJheShvZmZzZXRTdGFydCwgb2Zmc2V0RW5kKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9iajogY2ZmSW5kZXgsXG4gICAgICAgIGVuZFBvczogZW5kXG4gICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlTmFtZUluZGV4KGluZGV4KSB7XG4gICAgICB2YXIgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIHZhciBuYW1lID0gaW5kZXguZ2V0KGkpO1xuICAgICAgICBuYW1lcy5wdXNoKCgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShuYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICBwYXJzZVN0cmluZ0luZGV4KGluZGV4KSB7XG4gICAgICB2YXIgc3RyaW5ncyA9IG5ldyBDRkZTdHJpbmdzKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICB2YXIgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ3M7XG4gICAgfVxuXG4gICAgY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICB2YXIgY2ZmRGljdCA9IG5ldyBUeXBlKHN0cmluZ3MpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBkaWN0W2ldO1xuICAgICAgICB2YXIga2V5ID0gcGFpclswXTtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFpclsxXTtcbiAgICAgICAgY2ZmRGljdC5zZXRCeUtleShrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNmZkRpY3Q7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyU3RyaW5nKHN0YXRlLCBkYXRhLCBsb2NhbFN1YnJJbmRleCwgZ2xvYmFsU3VickluZGV4KSB7XG4gICAgICBpZiAoIWRhdGEgfHwgc3RhdGUuY2FsbERlcHRoID4gTUFYX1NVQlJfTkVTVElORykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFja1NpemUgPSBzdGF0ZS5zdGFja1NpemU7XG4gICAgICB2YXIgc3RhY2sgPSBzdGF0ZS5zdGFjaztcbiAgICAgIHZhciBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW5ndGg7KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRhdGFbaisrXTtcbiAgICAgICAgdmFyIHZhbGlkYXRpb25Db21tYW5kID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsdWUgPT09IDEyKSB7XG4gICAgICAgICAgdmFyIHEgPSBkYXRhW2orK107XG5cbiAgICAgICAgICBpZiAocSA9PT0gMCkge1xuICAgICAgICAgICAgZGF0YVtqIC0gMl0gPSAxMzk7XG4gICAgICAgICAgICBkYXRhW2ogLSAxXSA9IDIyO1xuICAgICAgICAgICAgc3RhY2tTaXplID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMltxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI4KSB7XG4gICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IChkYXRhW2pdIDw8IDI0IHwgZGF0YVtqICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICBzdGFja1NpemUrKztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTQpIHtcbiAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDQpIHtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSAtPSA0O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnNlYWMgPSBzdGFjay5zbGljZShzdGFja1NpemUsIHN0YWNrU2l6ZSArIDQpO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDMyICYmIHZhbHVlIDw9IDI0Nikge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSAtIDEzOTtcbiAgICAgICAgICBzdGFja1NpemUrKztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNDcgJiYgdmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IHZhbHVlIDwgMjUxID8gKHZhbHVlIC0gMjQ3IDw8IDgpICsgZGF0YVtqXSArIDEwOCA6IC0odmFsdWUgLSAyNTEgPDwgOCkgLSBkYXRhW2pdIC0gMTA4O1xuICAgICAgICAgIGorKztcbiAgICAgICAgICBzdGFja1NpemUrKztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMjU1KSB7XG4gICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IChkYXRhW2pdIDw8IDI0IHwgZGF0YVtqICsgMV0gPDwgMTYgfCBkYXRhW2ogKyAyXSA8PCA4IHwgZGF0YVtqICsgM10pIC8gNjU1MzY7XG4gICAgICAgICAgaiArPSA0O1xuICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAxOSB8fCB2YWx1ZSA9PT0gMjApIHtcbiAgICAgICAgICBzdGF0ZS5oaW50cyArPSBzdGFja1NpemUgPj4gMTtcbiAgICAgICAgICBqICs9IHN0YXRlLmhpbnRzICsgNyA+PiAzO1xuICAgICAgICAgIHN0YWNrU2l6ZSAlPSAyO1xuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTAgfHwgdmFsdWUgPT09IDI5KSB7XG4gICAgICAgICAgdmFyIHN1YnJzSW5kZXg7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IDEwKSB7XG4gICAgICAgICAgICBzdWJyc0luZGV4ID0gbG9jYWxTdWJySW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnJzSW5kZXggPSBnbG9iYWxTdWJySW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdWJyc0luZGV4KSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yIFwiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBiaWFzID0gMzI3Njg7XG5cbiAgICAgICAgICBpZiAoc3VicnNJbmRleC5jb3VudCA8IDEyNDApIHtcbiAgICAgICAgICAgIGJpYXMgPSAxMDc7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdWJyc0luZGV4LmNvdW50IDwgMzM5MDApIHtcbiAgICAgICAgICAgIGJpYXMgPSAxMTMxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdWJyTnVtYmVyID0gc3RhY2tbLS1zdGFja1NpemVdICsgYmlhcztcblxuICAgICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgc3RhdGUuY2FsbERlcHRoKys7XG4gICAgICAgICAgdmFyIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIHN1YnJzSW5kZXguZ2V0KHN1YnJOdW1iZXIpLCBsb2NhbFN1YnJJbmRleCwgZ2xvYmFsU3VickluZGV4KTtcblxuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0ZS5jYWxsRGVwdGgtLTtcbiAgICAgICAgICBzdGFja1NpemUgPSBzdGF0ZS5zdGFja1NpemU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDExKSB7XG4gICAgICAgICAgc3RhdGUuc3RhY2tTaXplID0gc3RhY2tTaXplO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgIGlmICh2YWxpZGF0aW9uQ29tbWFuZC5zdGVtKSB7XG4gICAgICAgICAgICBzdGF0ZS5oaW50cyArPSBzdGFja1NpemUgPj4gMTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAzIHx8IHZhbHVlID09PSAyMykge1xuICAgICAgICAgICAgICBzdGF0ZS5oYXNWU3RlbXMgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5oYXNWU3RlbXMgJiYgKHZhbHVlID09PSAxIHx8IHZhbHVlID09PSAxOCkpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyXCIpO1xuICAgICAgICAgICAgICBkYXRhW2ogLSAxXSA9IHZhbHVlID09PSAxID8gMyA6IDIzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcIm1pblwiIGluIHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLnVuZGVmU3RhY2sgJiYgc3RhY2tTaXplIDwgdmFsaWRhdGlvbkNvbW1hbmQubWluKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgXCIgKyB2YWxpZGF0aW9uQ29tbWFuZC5pZCArIFwiOyBhY3R1YWw6IFwiICsgc3RhY2tTaXplICsgXCIsIGV4cGVjdGVkOiBcIiArIHZhbGlkYXRpb25Db21tYW5kLm1pbik7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nICYmIHZhbGlkYXRpb25Db21tYW5kLnN0YWNrQ2xlYXJpbmcpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpcnN0U3RhY2tDbGVhcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc3RhY2tTaXplIC09IHZhbGlkYXRpb25Db21tYW5kLm1pbjtcblxuICAgICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+PSAyICYmIHZhbGlkYXRpb25Db21tYW5kLnN0ZW0pIHtcbiAgICAgICAgICAgICAgc3RhY2tTaXplICU9IDI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrU2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiRm91bmQgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3Igc3RhY2stY2xlYXJpbmcgY29tbWFuZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+IDAgJiYgc3RhY2tbc3RhY2tTaXplIC0gMV0gPj0gMCkge1xuICAgICAgICAgICAgICBzdGF0ZS53aWR0aCA9IHN0YWNrW3N0YWNrU2l6ZSAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcInN0YWNrRGVsdGFcIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKFwic3RhY2tGblwiIGluIHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kLnN0YWNrRm4oc3RhY2ssIHN0YWNrU2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YWNrU2l6ZSArPSB2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0RlbHRhO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhY2tTaXplID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnJlc2V0U3RhY2spIHtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICBzdGF0ZS51bmRlZlN0YWNrID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uQ29tbWFuZC51bmRlZlN0YWNrKSB7XG4gICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgc3RhdGUudW5kZWZTdGFjayA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RhdGUuc3RhY2tTaXplID0gc3RhY2tTaXplO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICBjaGFyU3RyaW5ncyxcbiAgICAgIGxvY2FsU3VickluZGV4LFxuICAgICAgZ2xvYmFsU3VickluZGV4LFxuICAgICAgZmRTZWxlY3QsXG4gICAgICBmZEFycmF5LFxuICAgICAgcHJpdmF0ZURpY3RcbiAgICB9KSB7XG4gICAgICB2YXIgc2VhY3MgPSBbXTtcbiAgICAgIHZhciB3aWR0aHMgPSBbXTtcbiAgICAgIHZhciBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG4gICAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgICBjYWxsRGVwdGg6IDAsXG4gICAgICAgICAgc3RhY2tTaXplOiAwLFxuICAgICAgICAgIHN0YWNrOiBbXSxcbiAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlLFxuICAgICAgICAgIGhpbnRzOiAwLFxuICAgICAgICAgIGZpcnN0U3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICAgICAgICBzZWFjOiBudWxsLFxuICAgICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICAgIGhhc1ZTdGVtczogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGxvY2FsU3ViclRvVXNlID0gbnVsbDtcbiAgICAgICAgdmFyIHByaXZhdGVEaWN0VG9Vc2UgPSBwcml2YXRlRGljdDtcblxuICAgICAgICBpZiAoZmRTZWxlY3QgJiYgZmRBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkdseXBoIGluZGV4IGlzIG5vdCBpbiBmZCBzZWxlY3QuXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHByaXZhdGVEaWN0VG9Vc2UgPSBmZEFycmF5W2ZkSW5kZXhdLnByaXZhdGVEaWN0O1xuICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsU3VickluZGV4KSB7XG4gICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBsb2NhbFN1YnJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoXCJub21pbmFsV2lkdGhYXCIpO1xuICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKFwiZGVmYXVsdFdpZHRoWFwiKTtcbiAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgIHNlYWNzW2ldID0gc3RhdGUuc2VhYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICBjaGFyU3RyaW5ncy5zZXQoaSwgbmV3IFVpbnQ4QXJyYXkoWzE0XSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJTdHJpbmdzLFxuICAgICAgICBzZWFjcyxcbiAgICAgICAgd2lkdGhzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCkge1xuICAgICAgdmFyIHByaXZhdGVEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LCBbXSwgcGFyZW50RGljdC5zdHJpbmdzKTtcbiAgICAgIHBhcmVudERpY3Quc2V0QnlLZXkoMTgsIFswLCAwXSk7XG4gICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgfVxuXG4gICAgcGFyc2VQcml2YXRlRGljdChwYXJlbnREaWN0KSB7XG4gICAgICBpZiAoIXBhcmVudERpY3QuaGFzTmFtZShcIlByaXZhdGVcIikpIHtcbiAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwcml2YXRlT2Zmc2V0ID0gcGFyZW50RGljdC5nZXRCeU5hbWUoXCJQcml2YXRlXCIpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJpdmF0ZU9mZnNldCkgfHwgcHJpdmF0ZU9mZnNldC5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcGFyZW50RGljdC5yZW1vdmVCeU5hbWUoXCJQcml2YXRlXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzaXplID0gcHJpdmF0ZU9mZnNldFswXTtcbiAgICAgIHZhciBvZmZzZXQgPSBwcml2YXRlT2Zmc2V0WzFdO1xuXG4gICAgICBpZiAoc2l6ZSA9PT0gMCB8fCBvZmZzZXQgPj0gdGhpcy5ieXRlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwcml2YXRlRGljdEVuZCA9IG9mZnNldCArIHNpemU7XG4gICAgICB2YXIgZGljdERhdGEgPSB0aGlzLmJ5dGVzLnN1YmFycmF5KG9mZnNldCwgcHJpdmF0ZURpY3RFbmQpO1xuICAgICAgdmFyIGRpY3QgPSB0aGlzLnBhcnNlRGljdChkaWN0RGF0YSk7XG4gICAgICB2YXIgcHJpdmF0ZURpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsIGRpY3QsIHBhcmVudERpY3Quc3RyaW5ncyk7XG4gICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgIGlmICghcHJpdmF0ZURpY3QuZ2V0QnlOYW1lKFwiU3VicnNcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3VicnNPZmZzZXQgPSBwcml2YXRlRGljdC5nZXRCeU5hbWUoXCJTdWJyc1wiKTtcbiAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IG9mZnNldCArIHN1YnJzT2Zmc2V0O1xuXG4gICAgICBpZiAoc3VicnNPZmZzZXQgPT09IDAgfHwgcmVsYXRpdmVPZmZzZXQgPj0gdGhpcy5ieXRlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdWJyc0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHJlbGF0aXZlT2Zmc2V0KTtcbiAgICAgIHByaXZhdGVEaWN0LnN1YnJzSW5kZXggPSBzdWJyc0luZGV4Lm9iajtcbiAgICB9XG5cbiAgICBwYXJzZUNoYXJzZXRzKHBvcywgbGVuZ3RoLCBzdHJpbmdzLCBjaWQpIHtcbiAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KHRydWUsIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMuSVNPX0FET0JFLCBfY2hhcnNldHMuSVNPQWRvYmVDaGFyc2V0KTtcbiAgICAgIH0gZWxzZSBpZiAocG9zID09PSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLkVYUEVSVCwgX2NoYXJzZXRzLkV4cGVydENoYXJzZXQpO1xuICAgICAgfSBlbHNlIGlmIChwb3MgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KHRydWUsIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMuRVhQRVJUX1NVQlNFVCwgX2NoYXJzZXRzLkV4cGVydFN1YnNldENoYXJzZXQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgdmFyIHN0YXJ0ID0gcG9zO1xuICAgICAgdmFyIGZvcm1hdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgIGNvbnN0IGNoYXJzZXQgPSBbY2lkID8gMCA6IFwiLm5vdGRlZlwiXTtcbiAgICAgIHZhciBpZCwgY291bnQsIGk7XG4gICAgICBsZW5ndGggLT0gMTtcblxuICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCA6IHN0cmluZ3MuZ2V0KGlkKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHdoaWxlIChjaGFyc2V0Lmxlbmd0aCA8PSBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCsrIDogc3RyaW5ncy5nZXQoaWQrKykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB3aGlsZSAoY2hhcnNldC5sZW5ndGggPD0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCsrIDogc3RyaW5ncy5nZXQoaWQrKykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBjaGFyc2V0IGZvcm1hdFwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVuZCA9IHBvcztcbiAgICAgIHZhciByYXcgPSBieXRlcy5zdWJhcnJheShzdGFydCwgZW5kKTtcbiAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldChmYWxzZSwgZm9ybWF0LCBjaGFyc2V0LCByYXcpO1xuICAgIH1cblxuICAgIHBhcnNlRW5jb2RpbmcocG9zLCBwcm9wZXJ0aWVzLCBzdHJpbmdzLCBjaGFyc2V0KSB7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBwcmVkZWZpbmVkID0gZmFsc2U7XG4gICAgICB2YXIgZm9ybWF0LCBpLCBpaTtcbiAgICAgIHZhciByYXcgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpIHtcbiAgICAgICAgdmFyIHN1cHBsZW1lbnRzQ291bnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHN1cHBsZW1lbnRzQ291bnQ7IGkrKykge1xuICAgICAgICAgIHZhciBjb2RlID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgIHZhciBzaWQgPSAoYnl0ZXNbcG9zKytdIDw8IDgpICsgKGJ5dGVzW3BvcysrXSAmIDB4ZmYpO1xuICAgICAgICAgIGVuY29kaW5nW2NvZGVdID0gY2hhcnNldC5pbmRleE9mKHN0cmluZ3MuZ2V0KHNpZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPT09IDAgfHwgcG9zID09PSAxKSB7XG4gICAgICAgIHByZWRlZmluZWQgPSB0cnVlO1xuICAgICAgICBmb3JtYXQgPSBwb3M7XG4gICAgICAgIHZhciBiYXNlRW5jb2RpbmcgPSBwb3MgPyBfZW5jb2RpbmdzLkV4cGVydEVuY29kaW5nIDogX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gY2hhcnNldC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gYmFzZUVuY29kaW5nLmluZGV4T2YoY2hhcnNldFtpXSk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBlbmNvZGluZ1tpbmRleF0gPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGFTdGFydCA9IHBvcztcbiAgICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0ICYgMHg3Zikge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHZhciBnbHlwaHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBnbHlwaHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVuY29kaW5nW2J5dGVzW3BvcysrXV0gPSBpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHZhciByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIHZhciBnaWQgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgIHZhciBsZWZ0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8PSBzdGFydCArIGxlZnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nW2pdID0gZ2lkKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGVuY29kaW5nIGZvcm1hdDogJHtmb3JtYXR9IGluIENGRmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGFFbmQgPSBwb3M7XG5cbiAgICAgICAgaWYgKGZvcm1hdCAmIDB4ODApIHtcbiAgICAgICAgICBieXRlc1tkYXRhU3RhcnRdICY9IDB4N2Y7XG4gICAgICAgICAgcmVhZFN1cHBsZW1lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhdyA9IGJ5dGVzLnN1YmFycmF5KGRhdGFTdGFydCwgZGF0YUVuZCk7XG4gICAgICB9XG5cbiAgICAgIGZvcm1hdCA9IGZvcm1hdCAmIDB4N2Y7XG4gICAgICByZXR1cm4gbmV3IENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdyk7XG4gICAgfVxuXG4gICAgcGFyc2VGRFNlbGVjdChwb3MsIGxlbmd0aCkge1xuICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIHZhciBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICB2YXIgZmRTZWxlY3QgPSBbXTtcbiAgICAgIHZhciBpO1xuXG4gICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaWQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICBmZFNlbGVjdC5wdXNoKGlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHJhbmdlc0NvdW50ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgdmFyIGZpcnN0ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIGZpcnN0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMFwiICsgXCIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuXCIpO1xuICAgICAgICAgICAgICBmaXJzdCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBmZEluZGV4ID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgdmFyIG5leHQgPSBieXRlc1twb3NdIDw8IDggfCBieXRlc1twb3MgKyAxXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IGZpcnN0OyBqIDwgbmV4dDsgKytqKSB7XG4gICAgICAgICAgICAgIGZkU2VsZWN0LnB1c2goZmRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcG9zICs9IDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0IFwiJHtmb3JtYXR9XCIuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmZFNlbGVjdC5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ0ZGRkRTZWxlY3QoZm9ybWF0LCBmZFNlbGVjdCk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGUGFyc2VyO1xufSgpO1xuXG5leHBvcnRzLkNGRlBhcnNlciA9IENGRlBhcnNlcjtcblxuY2xhc3MgQ0ZGIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkZXIgPSBudWxsO1xuICAgIHRoaXMubmFtZXMgPSBbXTtcbiAgICB0aGlzLnRvcERpY3QgPSBudWxsO1xuICAgIHRoaXMuc3RyaW5ncyA9IG5ldyBDRkZTdHJpbmdzKCk7XG4gICAgdGhpcy5nbG9iYWxTdWJySW5kZXggPSBudWxsO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICAgIHRoaXMuY2hhcnNldCA9IG51bGw7XG4gICAgdGhpcy5jaGFyU3RyaW5ncyA9IG51bGw7XG4gICAgdGhpcy5mZEFycmF5ID0gW107XG4gICAgdGhpcy5mZFNlbGVjdCA9IG51bGw7XG4gICAgdGhpcy5pc0NJREZvbnQgPSBmYWxzZTtcbiAgfVxuXG4gIGR1cGxpY2F0ZUZpcnN0R2x5cGgoKSB7XG4gICAgaWYgKHRoaXMuY2hhclN0cmluZ3MuY291bnQgPj0gNjU1MzUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZ2x5cGhaZXJvID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7XG4gICAgdGhpcy5jaGFyU3RyaW5ncy5hZGQoZ2x5cGhaZXJvKTtcblxuICAgIGlmICh0aGlzLmlzQ0lERm9udCkge1xuICAgICAgdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0dseXBoSWQoaWQpIHtcbiAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMuY2hhclN0cmluZ3MuY291bnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZ2x5cGggPSB0aGlzLmNoYXJTdHJpbmdzLmdldChpZCk7XG4gICAgcmV0dXJuIGdseXBoLmxlbmd0aCA+IDA7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRiA9IENGRjtcblxuY2xhc3MgQ0ZGSGVhZGVyIHtcbiAgY29uc3RydWN0b3IobWFqb3IsIG1pbm9yLCBoZHJTaXplLCBvZmZTaXplKSB7XG4gICAgdGhpcy5tYWpvciA9IG1ham9yO1xuICAgIHRoaXMubWlub3IgPSBtaW5vcjtcbiAgICB0aGlzLmhkclNpemUgPSBoZHJTaXplO1xuICAgIHRoaXMub2ZmU2l6ZSA9IG9mZlNpemU7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkhlYWRlciA9IENGRkhlYWRlcjtcblxuY2xhc3MgQ0ZGU3RyaW5ncyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RyaW5ncyA9IFtdO1xuICB9XG5cbiAgZ2V0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTIC0gMSkge1xuICAgICAgcmV0dXJuIENGRlN0YW5kYXJkU3RyaW5nc1tpbmRleF07XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IC0gTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTIDw9IHRoaXMuc3RyaW5ncy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ3NbaW5kZXggLSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1NdO1xuICAgIH1cblxuICAgIHJldHVybiBDRkZTdGFuZGFyZFN0cmluZ3NbMF07XG4gIH1cblxuICBnZXRTSUQoc3RyKSB7XG4gICAgbGV0IGluZGV4ID0gQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2Yoc3RyKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBpbmRleCA9IHRoaXMuc3RyaW5ncy5pbmRleE9mKHN0cik7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gaW5kZXggKyBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1M7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgYWRkKHZhbHVlKSB7XG4gICAgdGhpcy5zdHJpbmdzLnB1c2godmFsdWUpO1xuICB9XG5cbiAgZ2V0IGNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RoO1xuICB9XG5cbn1cblxuZXhwb3J0cy5DRkZTdHJpbmdzID0gQ0ZGU3RyaW5ncztcblxuY2xhc3MgQ0ZGSW5kZXgge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBhZGQoZGF0YSkge1xuICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIHRoaXMub2JqZWN0cy5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2V0KGluZGV4LCBkYXRhKSB7XG4gICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGggLSB0aGlzLm9iamVjdHNbaW5kZXhdLmxlbmd0aDtcbiAgICB0aGlzLm9iamVjdHNbaW5kZXhdID0gZGF0YTtcbiAgfVxuXG4gIGdldChpbmRleCkge1xuICAgIHJldHVybiB0aGlzLm9iamVjdHNbaW5kZXhdO1xuICB9XG5cbiAgZ2V0IGNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm9iamVjdHMubGVuZ3RoO1xuICB9XG5cbn1cblxuZXhwb3J0cy5DRkZJbmRleCA9IENGRkluZGV4O1xuXG5jbGFzcyBDRkZEaWN0IHtcbiAgY29uc3RydWN0b3IodGFibGVzLCBzdHJpbmdzKSB7XG4gICAgdGhpcy5rZXlUb05hbWVNYXAgPSB0YWJsZXMua2V5VG9OYW1lTWFwO1xuICAgIHRoaXMubmFtZVRvS2V5TWFwID0gdGFibGVzLm5hbWVUb0tleU1hcDtcbiAgICB0aGlzLmRlZmF1bHRzID0gdGFibGVzLmRlZmF1bHRzO1xuICAgIHRoaXMudHlwZXMgPSB0YWJsZXMudHlwZXM7XG4gICAgdGhpcy5vcGNvZGVzID0gdGFibGVzLm9wY29kZXM7XG4gICAgdGhpcy5vcmRlciA9IHRhYmxlcy5vcmRlcjtcbiAgICB0aGlzLnN0cmluZ3MgPSBzdHJpbmdzO1xuICAgIHRoaXMudmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIHNldEJ5S2V5KGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5rZXlUb05hbWVNYXApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKHZhbHVlTGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpc05hTih2YWx1ZVtpXSkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6IFwiJyArIHZhbHVlICsgJ1wiIGZvciBrZXkgXCInICsga2V5ICsgJ1wiLicpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZXNba2V5XTtcblxuICAgIGlmICh0eXBlID09PSBcIm51bVwiIHx8IHR5cGUgPT09IFwic2lkXCIgfHwgdHlwZSA9PT0gXCJvZmZzZXRcIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRCeU5hbWUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSBcIiR7bmFtZX1cImApO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW25hbWVdIGluIHRoaXMudmFsdWVzO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke25hbWV9XCJgKTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV07XG5cbiAgICBpZiAoIShrZXkgaW4gdGhpcy52YWx1ZXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0c1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbHVlc1trZXldO1xuICB9XG5cbiAgcmVtb3ZlQnlOYW1lKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV1dO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRhYmxlcyhsYXlvdXQpIHtcbiAgICB2YXIgdGFibGVzID0ge1xuICAgICAga2V5VG9OYW1lTWFwOiB7fSxcbiAgICAgIG5hbWVUb0tleU1hcDoge30sXG4gICAgICBkZWZhdWx0czoge30sXG4gICAgICB0eXBlczoge30sXG4gICAgICBvcGNvZGVzOiB7fSxcbiAgICAgIG9yZGVyOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsYXlvdXQubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgdmFyIGVudHJ5ID0gbGF5b3V0W2ldO1xuICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gKGVudHJ5WzBdWzBdIDw8IDgpICsgZW50cnlbMF1bMV0gOiBlbnRyeVswXTtcbiAgICAgIHRhYmxlcy5rZXlUb05hbWVNYXBba2V5XSA9IGVudHJ5WzFdO1xuICAgICAgdGFibGVzLm5hbWVUb0tleU1hcFtlbnRyeVsxXV0gPSBrZXk7XG4gICAgICB0YWJsZXMudHlwZXNba2V5XSA9IGVudHJ5WzJdO1xuICAgICAgdGFibGVzLmRlZmF1bHRzW2tleV0gPSBlbnRyeVszXTtcbiAgICAgIHRhYmxlcy5vcGNvZGVzW2tleV0gPSBBcnJheS5pc0FycmF5KGVudHJ5WzBdKSA/IGVudHJ5WzBdIDogW2VudHJ5WzBdXTtcbiAgICAgIHRhYmxlcy5vcmRlci5wdXNoKGtleSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlcztcbiAgfVxuXG59XG5cbnZhciBDRkZUb3BEaWN0ID0gZnVuY3Rpb24gQ0ZGVG9wRGljdENsb3N1cmUoKSB7XG4gIHZhciBsYXlvdXQgPSBbW1sxMiwgMzBdLCBcIlJPU1wiLCBbXCJzaWRcIiwgXCJzaWRcIiwgXCJudW1cIl0sIG51bGxdLCBbWzEyLCAyMF0sIFwiU3ludGhldGljQmFzZVwiLCBcIm51bVwiLCBudWxsXSwgWzAsIFwidmVyc2lvblwiLCBcInNpZFwiLCBudWxsXSwgWzEsIFwiTm90aWNlXCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAwXSwgXCJDb3B5cmlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFsyLCBcIkZ1bGxOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbMywgXCJGYW1pbHlOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbNCwgXCJXZWlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDFdLCBcImlzRml4ZWRQaXRjaFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMl0sIFwiSXRhbGljQW5nbGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDNdLCBcIlVuZGVybGluZVBvc2l0aW9uXCIsIFwibnVtXCIsIC0xMDBdLCBbWzEyLCA0XSwgXCJVbmRlcmxpbmVUaGlja25lc3NcIiwgXCJudW1cIiwgNTBdLCBbWzEyLCA1XSwgXCJQYWludFR5cGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDZdLCBcIkNoYXJzdHJpbmdUeXBlXCIsIFwibnVtXCIsIDJdLCBbWzEyLCA3XSwgXCJGb250TWF0cml4XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsIFwiVW5pcXVlSURcIiwgXCJudW1cIiwgbnVsbF0sIFs1LCBcIkZvbnRCQm94XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAsIDAsIDAsIDBdXSwgW1sxMiwgOF0sIFwiU3Ryb2tlV2lkdGhcIiwgXCJudW1cIiwgMF0sIFsxNCwgXCJYVUlEXCIsIFwiYXJyYXlcIiwgbnVsbF0sIFsxNSwgXCJjaGFyc2V0XCIsIFwib2Zmc2V0XCIsIDBdLCBbMTYsIFwiRW5jb2RpbmdcIiwgXCJvZmZzZXRcIiwgMF0sIFsxNywgXCJDaGFyU3RyaW5nc1wiLCBcIm9mZnNldFwiLCAwXSwgWzE4LCBcIlByaXZhdGVcIiwgW1wib2Zmc2V0XCIsIFwib2Zmc2V0XCJdLCBudWxsXSwgW1sxMiwgMjFdLCBcIlBvc3RTY3JpcHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIyXSwgXCJCYXNlRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIzXSwgXCJCYXNlRm9udEJsZW5kXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDMxXSwgXCJDSURGb250VmVyc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzJdLCBcIkNJREZvbnRSZXZpc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzNdLCBcIkNJREZvbnRUeXBlXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAzNF0sIFwiQ0lEQ291bnRcIiwgXCJudW1cIiwgODcyMF0sIFtbMTIsIDM1XSwgXCJVSURCYXNlXCIsIFwibnVtXCIsIG51bGxdLCBbWzEyLCAzN10sIFwiRkRTZWxlY3RcIiwgXCJvZmZzZXRcIiwgbnVsbF0sIFtbMTIsIDM2XSwgXCJGREFycmF5XCIsIFwib2Zmc2V0XCIsIG51bGxdLCBbWzEyLCAzOF0sIFwiRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF1dO1xuICB2YXIgdGFibGVzID0gbnVsbDtcblxuICBjbGFzcyBDRkZUb3BEaWN0IGV4dGVuZHMgQ0ZGRGljdCB7XG4gICAgY29uc3RydWN0b3Ioc3RyaW5ncykge1xuICAgICAgaWYgKHRhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgfVxuXG4gICAgICBzdXBlcih0YWJsZXMsIHN0cmluZ3MpO1xuICAgICAgdGhpcy5wcml2YXRlRGljdCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGVG9wRGljdDtcbn0oKTtcblxuZXhwb3J0cy5DRkZUb3BEaWN0ID0gQ0ZGVG9wRGljdDtcblxudmFyIENGRlByaXZhdGVEaWN0ID0gZnVuY3Rpb24gQ0ZGUHJpdmF0ZURpY3RDbG9zdXJlKCkge1xuICB2YXIgbGF5b3V0ID0gW1s2LCBcIkJsdWVWYWx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgWzcsIFwiT3RoZXJCbHVlc1wiLCBcImRlbHRhXCIsIG51bGxdLCBbOCwgXCJGYW1pbHlCbHVlc1wiLCBcImRlbHRhXCIsIG51bGxdLCBbOSwgXCJGYW1pbHlPdGhlckJsdWVzXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDldLCBcIkJsdWVTY2FsZVwiLCBcIm51bVwiLCAwLjAzOTYyNV0sIFtbMTIsIDEwXSwgXCJCbHVlU2hpZnRcIiwgXCJudW1cIiwgN10sIFtbMTIsIDExXSwgXCJCbHVlRnV6elwiLCBcIm51bVwiLCAxXSwgWzEwLCBcIlN0ZEhXXCIsIFwibnVtXCIsIG51bGxdLCBbMTEsIFwiU3RkVldcIiwgXCJudW1cIiwgbnVsbF0sIFtbMTIsIDEyXSwgXCJTdGVtU25hcEhcIiwgXCJkZWx0YVwiLCBudWxsXSwgW1sxMiwgMTNdLCBcIlN0ZW1TbmFwVlwiLCBcImRlbHRhXCIsIG51bGxdLCBbWzEyLCAxNF0sIFwiRm9yY2VCb2xkXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAxN10sIFwiTGFuZ3VhZ2VHcm91cFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMThdLCBcIkV4cGFuc2lvbkZhY3RvclwiLCBcIm51bVwiLCAwLjA2XSwgW1sxMiwgMTldLCBcImluaXRpYWxSYW5kb21TZWVkXCIsIFwibnVtXCIsIDBdLCBbMjAsIFwiZGVmYXVsdFdpZHRoWFwiLCBcIm51bVwiLCAwXSwgWzIxLCBcIm5vbWluYWxXaWR0aFhcIiwgXCJudW1cIiwgMF0sIFsxOSwgXCJTdWJyc1wiLCBcIm9mZnNldFwiLCBudWxsXV07XG4gIHZhciB0YWJsZXMgPSBudWxsO1xuXG4gIGNsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdCB7XG4gICAgY29uc3RydWN0b3Ioc3RyaW5ncykge1xuICAgICAgaWYgKHRhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgfVxuXG4gICAgICBzdXBlcih0YWJsZXMsIHN0cmluZ3MpO1xuICAgICAgdGhpcy5zdWJyc0luZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDRkZQcml2YXRlRGljdDtcbn0oKTtcblxuZXhwb3J0cy5DRkZQcml2YXRlRGljdCA9IENGRlByaXZhdGVEaWN0O1xudmFyIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7XG4gIElTT19BRE9CRTogMCxcbiAgRVhQRVJUOiAxLFxuICBFWFBFUlRfU1VCU0VUOiAyXG59O1xuXG5jbGFzcyBDRkZDaGFyc2V0IHtcbiAgY29uc3RydWN0b3IocHJlZGVmaW5lZCwgZm9ybWF0LCBjaGFyc2V0LCByYXcpIHtcbiAgICB0aGlzLnByZWRlZmluZWQgPSBwcmVkZWZpbmVkO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgdGhpcy5yYXcgPSByYXc7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNoYXJzZXQgPSBDRkZDaGFyc2V0O1xuXG5jbGFzcyBDRkZFbmNvZGluZyB7XG4gIGNvbnN0cnVjdG9yKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIHRoaXMucmF3ID0gcmF3O1xuICB9XG5cbn1cblxuY2xhc3MgQ0ZGRkRTZWxlY3Qge1xuICBjb25zdHJ1Y3Rvcihmb3JtYXQsIGZkU2VsZWN0KSB7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5mZFNlbGVjdCA9IGZkU2VsZWN0O1xuICB9XG5cbiAgZ2V0RkRJbmRleChnbHlwaEluZGV4KSB7XG4gICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZFNlbGVjdFtnbHlwaEluZGV4XTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBDRkZGRFNlbGVjdDtcblxuY2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub2Zmc2V0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpc1RyYWNraW5nKGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gdGhpcy5vZmZzZXRzO1xuICB9XG5cbiAgdHJhY2soa2V5LCBsb2NhdGlvbikge1xuICAgIGlmIChrZXkgaW4gdGhpcy5vZmZzZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXRzW2tleV0gPSBsb2NhdGlvbjtcbiAgfVxuXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm9mZnNldHMpIHtcbiAgICAgIHRoaXMub2Zmc2V0c1trZXldICs9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEVudHJ5TG9jYXRpb24oa2V5LCB2YWx1ZXMsIG91dHB1dCkge1xuICAgIGlmICghKGtleSBpbiB0aGlzLm9mZnNldHMpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYE5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAke2tleX1gKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IG91dHB1dC5kYXRhO1xuICAgIHZhciBkYXRhT2Zmc2V0ID0gdGhpcy5vZmZzZXRzW2tleV07XG4gICAgdmFyIHNpemUgPSA1O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdmFsdWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHZhciBvZmZzZXQwID0gaSAqIHNpemUgKyBkYXRhT2Zmc2V0O1xuICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgMTtcbiAgICAgIHZhciBvZmZzZXQyID0gb2Zmc2V0MCArIDI7XG4gICAgICB2YXIgb2Zmc2V0MyA9IG9mZnNldDAgKyAzO1xuICAgICAgdmFyIG9mZnNldDQgPSBvZmZzZXQwICsgNDtcblxuICAgICAgaWYgKGRhdGFbb2Zmc2V0MF0gIT09IDB4MWQgfHwgZGF0YVtvZmZzZXQxXSAhPT0gMCB8fCBkYXRhW29mZnNldDJdICE9PSAwIHx8IGRhdGFbb2Zmc2V0M10gIT09IDAgfHwgZGF0YVtvZmZzZXQ0XSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgZGF0YVtvZmZzZXQwXSA9IDB4MWQ7XG4gICAgICBkYXRhW29mZnNldDFdID0gdmFsdWUgPj4gMjQgJiAweGZmO1xuICAgICAgZGF0YVtvZmZzZXQyXSA9IHZhbHVlID4+IDE2ICYgMHhmZjtcbiAgICAgIGRhdGFbb2Zmc2V0M10gPSB2YWx1ZSA+PiA4ICYgMHhmZjtcbiAgICAgIGRhdGFbb2Zmc2V0NF0gPSB2YWx1ZSAmIDB4ZmY7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ0ZGQ29tcGlsZXIge1xuICBjb25zdHJ1Y3RvcihjZmYpIHtcbiAgICB0aGlzLmNmZiA9IGNmZjtcbiAgfVxuXG4gIGNvbXBpbGUoKSB7XG4gICAgdmFyIGNmZiA9IHRoaXMuY2ZmO1xuICAgIHZhciBvdXRwdXQgPSB7XG4gICAgICBkYXRhOiBbXSxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfYWRkKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGhlYWRlciA9IHRoaXMuY29tcGlsZUhlYWRlcihjZmYuaGVhZGVyKTtcbiAgICBvdXRwdXQuYWRkKGhlYWRlcik7XG4gICAgdmFyIG5hbWVJbmRleCA9IHRoaXMuY29tcGlsZU5hbWVJbmRleChjZmYubmFtZXMpO1xuICAgIG91dHB1dC5hZGQobmFtZUluZGV4KTtcblxuICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICBpZiAoY2ZmLnRvcERpY3QuaGFzTmFtZShcIkZvbnRNYXRyaXhcIikpIHtcbiAgICAgICAgdmFyIGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuICAgICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNmZi5mZEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICB2YXIgc3ViRGljdCA9IGNmZi5mZEFycmF5W2ldO1xuICAgICAgICAgIHZhciBtYXRyaXggPSBiYXNlLnNsaWNlKDApO1xuXG4gICAgICAgICAgaWYgKHN1YkRpY3QuaGFzTmFtZShcIkZvbnRNYXRyaXhcIikpIHtcbiAgICAgICAgICAgIG1hdHJpeCA9IF91dGlsLlV0aWwudHJhbnNmb3JtKG1hdHJpeCwgc3ViRGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJEaWN0LnNldEJ5TmFtZShcIkZvbnRNYXRyaXhcIiwgbWF0cml4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNmZi50b3BEaWN0LnNldEJ5TmFtZShcImNoYXJzZXRcIiwgMCk7XG4gICAgdmFyIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoW2NmZi50b3BEaWN0XSwgb3V0cHV0Lmxlbmd0aCwgY2ZmLmlzQ0lERm9udCk7XG4gICAgb3V0cHV0LmFkZChjb21waWxlZC5vdXRwdXQpO1xuICAgIHZhciB0b3BEaWN0VHJhY2tlciA9IGNvbXBpbGVkLnRyYWNrZXJzWzBdO1xuICAgIHZhciBzdHJpbmdJbmRleCA9IHRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGNmZi5zdHJpbmdzLnN0cmluZ3MpO1xuICAgIG91dHB1dC5hZGQoc3RyaW5nSW5kZXgpO1xuICAgIHZhciBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChjZmYuZ2xvYmFsU3VickluZGV4KTtcbiAgICBvdXRwdXQuYWRkKGdsb2JhbFN1YnJJbmRleCk7XG5cbiAgICBpZiAoY2ZmLmVuY29kaW5nICYmIGNmZi50b3BEaWN0Lmhhc05hbWUoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgaWYgKGNmZi5lbmNvZGluZy5wcmVkZWZpbmVkKSB7XG4gICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZW5jb2RpbmcgPSB0aGlzLmNvbXBpbGVFbmNvZGluZyhjZmYuZW5jb2RpbmcpO1xuICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRW5jb2RpbmdcIiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICBvdXRwdXQuYWRkKGVuY29kaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhcnNldCA9IHRoaXMuY29tcGlsZUNoYXJzZXQoY2ZmLmNoYXJzZXQsIGNmZi5jaGFyU3RyaW5ncy5jb3VudCwgY2ZmLnN0cmluZ3MsIGNmZi5pc0NJREZvbnQpO1xuICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJjaGFyc2V0XCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKGNoYXJzZXQpO1xuICAgIHZhciBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7XG4gICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbihcIkNoYXJTdHJpbmdzXCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKGNoYXJTdHJpbmdzKTtcblxuICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRkRTZWxlY3RcIiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgdmFyIGZkU2VsZWN0ID0gdGhpcy5jb21waWxlRkRTZWxlY3QoY2ZmLmZkU2VsZWN0KTtcbiAgICAgIG91dHB1dC5hZGQoZmRTZWxlY3QpO1xuICAgICAgY29tcGlsZWQgPSB0aGlzLmNvbXBpbGVUb3BEaWN0cyhjZmYuZmRBcnJheSwgb3V0cHV0Lmxlbmd0aCwgdHJ1ZSk7XG4gICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRkRBcnJheVwiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICBvdXRwdXQuYWRkKGNvbXBpbGVkLm91dHB1dCk7XG4gICAgICB2YXIgZm9udERpY3RUcmFja2VycyA9IGNvbXBpbGVkLnRyYWNrZXJzO1xuICAgICAgdGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKGNmZi5mZEFycmF5LCBmb250RGljdFRyYWNrZXJzLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbY2ZmLnRvcERpY3RdLCBbdG9wRGljdFRyYWNrZXJdLCBvdXRwdXQpO1xuICAgIG91dHB1dC5hZGQoWzBdKTtcbiAgICByZXR1cm4gb3V0cHV0LmRhdGE7XG4gIH1cblxuICBlbmNvZGVOdW1iZXIodmFsdWUpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZUludGVnZXIodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVuY29kZUZsb2F0KHZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRW5jb2RlRmxvYXRSZWdFeHAoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiRW5jb2RlRmxvYXRSZWdFeHBcIiwgL1xcLihcXGQqPykoPzo5ezUsMjB9fDB7NSwyMH0pXFxkezAsMn0oPzplKC4rKXwkKS8pO1xuICB9XG5cbiAgZW5jb2RlRmxvYXQobnVtKSB7XG4gICAgdmFyIHZhbHVlID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgdmFyIG0gPSBDRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHZhbHVlKTtcblxuICAgIGlmIChtKSB7XG4gICAgICB2YXIgZXBzaWxvbiA9IHBhcnNlRmxvYXQoXCIxZVwiICsgKChtWzJdID8gK21bMl0gOiAwKSArIG1bMV0ubGVuZ3RoKSk7XG4gICAgICB2YWx1ZSA9IChNYXRoLnJvdW5kKG51bSAqIGVwc2lsb24pIC8gZXBzaWxvbikudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB2YXIgbmliYmxlcyA9IFwiXCI7XG4gICAgdmFyIGksIGlpO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSB2YWx1ZS5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgYSA9IHZhbHVlW2ldO1xuXG4gICAgICBpZiAoYSA9PT0gXCJlXCIpIHtcbiAgICAgICAgbmliYmxlcyArPSB2YWx1ZVsrK2ldID09PSBcIi1cIiA/IFwiY1wiIDogXCJiXCI7XG4gICAgICB9IGVsc2UgaWYgKGEgPT09IFwiLlwiKSB7XG4gICAgICAgIG5pYmJsZXMgKz0gXCJhXCI7XG4gICAgICB9IGVsc2UgaWYgKGEgPT09IFwiLVwiKSB7XG4gICAgICAgIG5pYmJsZXMgKz0gXCJlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuaWJibGVzICs9IGE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmliYmxlcyArPSBuaWJibGVzLmxlbmd0aCAmIDEgPyBcImZcIiA6IFwiZmZcIjtcbiAgICB2YXIgb3V0ID0gWzMwXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gbmliYmxlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGVuY29kZUludGVnZXIodmFsdWUpIHtcbiAgICB2YXIgY29kZTtcblxuICAgIGlmICh2YWx1ZSA+PSAtMTA3ICYmIHZhbHVlIDw9IDEwNykge1xuICAgICAgY29kZSA9IFt2YWx1ZSArIDEzOV07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDggJiYgdmFsdWUgPD0gMTEzMSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAtIDEwODtcbiAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjQ3LCB2YWx1ZSAmIDB4ZmZdO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTExMzEgJiYgdmFsdWUgPD0gLTEwOCkge1xuICAgICAgdmFsdWUgPSAtdmFsdWUgLSAxMDg7XG4gICAgICBjb2RlID0gWyh2YWx1ZSA+PiA4KSArIDI1MSwgdmFsdWUgJiAweGZmXTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IC0zMjc2OCAmJiB2YWx1ZSA8PSAzMjc2Nykge1xuICAgICAgY29kZSA9IFsweDFjLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZSA9IFsweDFkLCB2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZl07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cblxuICBjb21waWxlSGVhZGVyKGhlYWRlcikge1xuICAgIHJldHVybiBbaGVhZGVyLm1ham9yLCBoZWFkZXIubWlub3IsIGhlYWRlci5oZHJTaXplLCBoZWFkZXIub2ZmU2l6ZV07XG4gIH1cblxuICBjb21waWxlTmFtZUluZGV4KG5hbWVzKSB7XG4gICAgdmFyIG5hbWVJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihuYW1lLmxlbmd0aCwgMTI3KTtcbiAgICAgIHZhciBzYW5pdGl6ZWROYW1lID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGNoYXIgPSBuYW1lW2pdO1xuXG4gICAgICAgIGlmIChjaGFyIDwgXCIhXCIgfHwgY2hhciA+IFwiflwiIHx8IGNoYXIgPT09IFwiW1wiIHx8IGNoYXIgPT09IFwiXVwiIHx8IGNoYXIgPT09IFwiKFwiIHx8IGNoYXIgPT09IFwiKVwiIHx8IGNoYXIgPT09IFwie1wiIHx8IGNoYXIgPT09IFwifVwiIHx8IGNoYXIgPT09IFwiPFwiIHx8IGNoYXIgPT09IFwiPlwiIHx8IGNoYXIgPT09IFwiL1wiIHx8IGNoYXIgPT09IFwiJVwiKSB7XG4gICAgICAgICAgY2hhciA9IFwiX1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgc2FuaXRpemVkTmFtZVtqXSA9IGNoYXI7XG4gICAgICB9XG5cbiAgICAgIHNhbml0aXplZE5hbWUgPSBzYW5pdGl6ZWROYW1lLmpvaW4oXCJcIik7XG5cbiAgICAgIGlmIChzYW5pdGl6ZWROYW1lID09PSBcIlwiKSB7XG4gICAgICAgIHNhbml0aXplZE5hbWUgPSBcIkJhZF9Gb250X05hbWVcIjtcbiAgICAgIH1cblxuICAgICAgbmFtZUluZGV4LmFkZCgoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc2FuaXRpemVkTmFtZSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChuYW1lSW5kZXgpO1xuICB9XG5cbiAgY29tcGlsZVRvcERpY3RzKGRpY3RzLCBsZW5ndGgsIHJlbW92ZUNpZEtleXMpIHtcbiAgICB2YXIgZm9udERpY3RUcmFja2VycyA9IFtdO1xuICAgIHZhciBmZEFycmF5SW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRpY3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHZhciBmb250RGljdCA9IGRpY3RzW2ldO1xuXG4gICAgICBpZiAocmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURGb250VmVyc2lvblwiKTtcbiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKFwiQ0lERm9udFJldmlzaW9uXCIpO1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURGb250VHlwZVwiKTtcbiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKFwiQ0lEQ291bnRcIik7XG4gICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIlVJREJhc2VcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBmb250RGljdFRyYWNrZXIgPSBuZXcgQ0ZGT2Zmc2V0VHJhY2tlcigpO1xuICAgICAgdmFyIGZvbnREaWN0RGF0YSA9IHRoaXMuY29tcGlsZURpY3QoZm9udERpY3QsIGZvbnREaWN0VHJhY2tlcik7XG4gICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgIGZkQXJyYXlJbmRleC5hZGQoZm9udERpY3REYXRhKTtcbiAgICAgIGZvbnREaWN0VHJhY2tlci5vZmZzZXQobGVuZ3RoKTtcbiAgICB9XG5cbiAgICBmZEFycmF5SW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChmZEFycmF5SW5kZXgsIGZvbnREaWN0VHJhY2tlcnMpO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgIG91dHB1dDogZmRBcnJheUluZGV4XG4gICAgfTtcbiAgfVxuXG4gIGNvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgZm9udERpY3QgPSBkaWN0c1tpXTtcbiAgICAgIHZhciBwcml2YXRlRGljdCA9IGZvbnREaWN0LnByaXZhdGVEaWN0O1xuXG4gICAgICBpZiAoIXByaXZhdGVEaWN0IHx8ICFmb250RGljdC5oYXNOYW1lKFwiUHJpdmF0ZVwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUaGVyZSBtdXN0IGJlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByaXZhdGVEaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICB2YXIgcHJpdmF0ZURpY3REYXRhID0gdGhpcy5jb21waWxlRGljdChwcml2YXRlRGljdCwgcHJpdmF0ZURpY3RUcmFja2VyKTtcbiAgICAgIHZhciBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgcHJpdmF0ZURpY3RUcmFja2VyLm9mZnNldChvdXRwdXRMZW5ndGgpO1xuXG4gICAgICBpZiAoIXByaXZhdGVEaWN0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgb3V0cHV0TGVuZ3RoID0gMDtcbiAgICAgIH1cblxuICAgICAgdHJhY2tlcnNbaV0uc2V0RW50cnlMb2NhdGlvbihcIlByaXZhdGVcIiwgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGgsIG91dHB1dExlbmd0aF0sIG91dHB1dCk7XG4gICAgICBvdXRwdXQuYWRkKHByaXZhdGVEaWN0RGF0YSk7XG5cbiAgICAgIGlmIChwcml2YXRlRGljdC5zdWJyc0luZGV4ICYmIHByaXZhdGVEaWN0Lmhhc05hbWUoXCJTdWJyc1wiKSkge1xuICAgICAgICB2YXIgc3VicnMgPSB0aGlzLmNvbXBpbGVJbmRleChwcml2YXRlRGljdC5zdWJyc0luZGV4KTtcbiAgICAgICAgcHJpdmF0ZURpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJTdWJyc1wiLCBbcHJpdmF0ZURpY3REYXRhLmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgIG91dHB1dC5hZGQoc3VicnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBpbGVEaWN0KGRpY3QsIG9mZnNldFRyYWNrZXIpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIG9yZGVyID0gZGljdC5vcmRlcjtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBvcmRlcltpXTtcblxuICAgICAgaWYgKCEoa2V5IGluIGRpY3QudmFsdWVzKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlcyA9IGRpY3QudmFsdWVzW2tleV07XG4gICAgICB2YXIgdHlwZXMgPSBkaWN0LnR5cGVzW2tleV07XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0eXBlcykpIHtcbiAgICAgICAgdHlwZXMgPSBbdHlwZXNdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHR5cGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tqXTtcbiAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2pdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJudW1cIjpcbiAgICAgICAgICBjYXNlIFwic2lkXCI6XG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJvZmZzZXRcIjpcbiAgICAgICAgICAgIHZhciBuYW1lID0gZGljdC5rZXlUb05hbWVNYXBba2V5XTtcblxuICAgICAgICAgICAgaWYgKCFvZmZzZXRUcmFja2VyLmlzVHJhY2tpbmcobmFtZSkpIHtcbiAgICAgICAgICAgICAgb2Zmc2V0VHJhY2tlci50cmFjayhuYW1lLCBvdXQubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChbMHgxZCwgMCwgMCwgMCwgMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgICBjYXNlIFwiZGVsdGFcIjpcbiAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIodmFsdWUpKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDEsIGtrID0gdmFsdWVzLmxlbmd0aDsgayA8IGtrOyArK2spIHtcbiAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZXNba10pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGRhdGEgdHlwZSBvZiAke3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb3V0ID0gb3V0LmNvbmNhdChkaWN0Lm9wY29kZXNba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGNvbXBpbGVTdHJpbmdJbmRleChzdHJpbmdzKSB7XG4gICAgdmFyIHN0cmluZ0luZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdHJpbmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHN0cmluZ0luZGV4LmFkZCgoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc3RyaW5nc1tpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChzdHJpbmdJbmRleCk7XG4gIH1cblxuICBjb21waWxlR2xvYmFsU3VickluZGV4KCkge1xuICAgIHZhciBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7XG4gICAgdGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZ2xvYmFsU3VickluZGV4KSk7XG4gIH1cblxuICBjb21waWxlQ2hhclN0cmluZ3MoY2hhclN0cmluZ3MpIHtcbiAgICB2YXIgY2hhclN0cmluZ3NJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFyU3RyaW5ncy5jb3VudDsgaSsrKSB7XG4gICAgICB2YXIgZ2x5cGggPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG5cbiAgICAgIGlmIChnbHlwaC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQobmV3IFVpbnQ4QXJyYXkoWzB4OGIsIDB4MGVdKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChnbHlwaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KGNoYXJTdHJpbmdzSW5kZXgpO1xuICB9XG5cbiAgY29tcGlsZUNoYXJzZXQoY2hhcnNldCwgbnVtR2x5cGhzLCBzdHJpbmdzLCBpc0NJREZvbnQpIHtcbiAgICBsZXQgb3V0O1xuICAgIGNvbnN0IG51bUdseXBoc0xlc3NOb3REZWYgPSBudW1HbHlwaHMgLSAxO1xuXG4gICAgaWYgKGlzQ0lERm9udCkge1xuICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoWzIsIDAsIDAsIG51bUdseXBoc0xlc3NOb3REZWYgPj4gOCAmIDB4ZmYsIG51bUdseXBoc0xlc3NOb3REZWYgJiAweGZmXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IDEgKyBudW1HbHlwaHNMZXNzTm90RGVmICogMjtcbiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICBvdXRbMF0gPSAwO1xuICAgICAgbGV0IGNoYXJzZXRJbmRleCA9IDA7XG4gICAgICBjb25zdCBudW1DaGFyc2V0cyA9IGNoYXJzZXQuY2hhcnNldC5sZW5ndGg7XG4gICAgICBsZXQgd2FybmVkID0gZmFsc2U7XG5cbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3V0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIGxldCBzaWQgPSAwO1xuXG4gICAgICAgIGlmIChjaGFyc2V0SW5kZXggPCBudW1DaGFyc2V0cykge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBjaGFyc2V0LmNoYXJzZXRbY2hhcnNldEluZGV4KytdO1xuICAgICAgICAgIHNpZCA9IHN0cmluZ3MuZ2V0U0lEKG5hbWUpO1xuXG4gICAgICAgICAgaWYgKHNpZCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHNpZCA9IDA7XG5cbiAgICAgICAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgICAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgQ291bGRuJ3QgZmluZCAke25hbWV9IGluIENGRiBzdHJpbmdzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3V0W2ldID0gc2lkID4+IDggJiAweGZmO1xuICAgICAgICBvdXRbaSArIDFdID0gc2lkICYgMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpO1xuICB9XG5cbiAgY29tcGlsZUVuY29kaW5nKGVuY29kaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZW5jb2RpbmcucmF3KTtcbiAgfVxuXG4gIGNvbXBpbGVGRFNlbGVjdChmZFNlbGVjdCkge1xuICAgIGNvbnN0IGZvcm1hdCA9IGZkU2VsZWN0LmZvcm1hdDtcbiAgICBsZXQgb3V0LCBpO1xuXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoMSArIGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aCk7XG4gICAgICAgIG91dFswXSA9IGZvcm1hdDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvdXRbaSArIDFdID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAzOlxuICAgICAgICBjb25zdCBzdGFydCA9IDA7XG4gICAgICAgIGxldCBsYXN0RkQgPSBmZFNlbGVjdC5mZFNlbGVjdFswXTtcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gW2Zvcm1hdCwgMCwgMCwgc3RhcnQgPj4gOCAmIDB4ZmYsIHN0YXJ0ICYgMHhmZiwgbGFzdEZEXTtcblxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RkQgPSBmZFNlbGVjdC5mZFNlbGVjdFtpXTtcblxuICAgICAgICAgIGlmIChjdXJyZW50RkQgIT09IGxhc3RGRCkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhmZiwgaSAmIDB4ZmYsIGN1cnJlbnRGRCk7XG4gICAgICAgICAgICBsYXN0RkQgPSBjdXJyZW50RkQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtUmFuZ2VzID0gKHJhbmdlcy5sZW5ndGggLSAzKSAvIDM7XG4gICAgICAgIHJhbmdlc1sxXSA9IG51bVJhbmdlcyA+PiA4ICYgMHhmZjtcbiAgICAgICAgcmFuZ2VzWzJdID0gbnVtUmFuZ2VzICYgMHhmZjtcbiAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhmZiwgaSAmIDB4ZmYpO1xuICAgICAgICBvdXQgPSBuZXcgVWludDhBcnJheShyYW5nZXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpO1xuICB9XG5cbiAgY29tcGlsZVR5cGVkQXJyYXkoZGF0YSkge1xuICAgIHZhciBvdXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2VycyA9IFtdKSB7XG4gICAgdmFyIG9iamVjdHMgPSBpbmRleC5vYmplY3RzO1xuICAgIHZhciBjb3VudCA9IG9iamVjdHMubGVuZ3RoO1xuXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gW2NvdW50ID4+IDggJiAweGZmLCBjb3VudCAmIDB4ZmZdO1xuICAgIHZhciBsYXN0T2Zmc2V0ID0gMSxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBsYXN0T2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBvZmZzZXRTaXplO1xuXG4gICAgaWYgKGxhc3RPZmZzZXQgPCAweDEwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDI7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMDAwKSB7XG4gICAgICBvZmZzZXRTaXplID0gMztcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgfVxuXG4gICAgZGF0YS5wdXNoKG9mZnNldFNpemUpO1xuICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQgKyAxOyBpKyspIHtcbiAgICAgIGlmIChvZmZzZXRTaXplID09PSAxKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXRTaXplID09PSAyKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0U2l6ZSA9PT0gMykge1xuICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gMTYgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqZWN0c1tpXSkge1xuICAgICAgICByZWxhdGl2ZU9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgaWYgKHRyYWNrZXJzW2ldKSB7XG4gICAgICAgIHRyYWNrZXJzW2ldLm9mZnNldChkYXRhLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IG9iamVjdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBkYXRhLnB1c2gob2JqZWN0c1tpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNvbXBpbGVyID0gQ0ZGQ29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IGV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IGV4cG9ydHMuSVNPQWRvYmVDaGFyc2V0ID0gdm9pZCAwO1xuY29uc3QgSVNPQWRvYmVDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCJdO1xuZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG5jb25zdCBFeHBlcnRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIkNhcm9uc21hbGxcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJvbmVxdWFydGVyXCIsIFwib25laGFsZlwiLCBcInRocmVlcXVhcnRlcnNcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiXTtcbmV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IEV4cGVydENoYXJzZXQ7XG5jb25zdCBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJpc3VwZXJpb3JcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiXTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IEV4cGVydFN1YnNldENoYXJzZXQ7XG5cbi8qKiovIH0pLFxuLyogMzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0RW5jb2RpbmcgPSBnZXRFbmNvZGluZztcbmV4cG9ydHMuRXhwZXJ0RW5jb2RpbmcgPSBleHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gZXhwb3J0cy5TeW1ib2xTZXRFbmNvZGluZyA9IGV4cG9ydHMuTWFjUm9tYW5FbmNvZGluZyA9IGV4cG9ydHMuU3RhbmRhcmRFbmNvZGluZyA9IGV4cG9ydHMuV2luQW5zaUVuY29kaW5nID0gdm9pZCAwO1xuY29uc3QgRXhwZXJ0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbXNtYWxsXCIsIFwiSHVuZ2FydW1sYXV0c21hbGxcIiwgXCJcIiwgXCJkb2xsYXJvbGRzdHlsZVwiLCBcImRvbGxhcnN1cGVyaW9yXCIsIFwiYW1wZXJzYW5kc21hbGxcIiwgXCJBY3V0ZXNtYWxsXCIsIFwicGFyZW5sZWZ0c3VwZXJpb3JcIiwgXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIiwgXCJ0d29kb3RlbmxlYWRlclwiLCBcIm9uZWRvdGVubGVhZGVyXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJmcmFjdGlvblwiLCBcInplcm9vbGRzdHlsZVwiLCBcIm9uZW9sZHN0eWxlXCIsIFwidHdvb2xkc3R5bGVcIiwgXCJ0aHJlZW9sZHN0eWxlXCIsIFwiZm91cm9sZHN0eWxlXCIsIFwiZml2ZW9sZHN0eWxlXCIsIFwic2l4b2xkc3R5bGVcIiwgXCJzZXZlbm9sZHN0eWxlXCIsIFwiZWlnaHRvbGRzdHlsZVwiLCBcIm5pbmVvbGRzdHlsZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwiY29tbWFzdXBlcmlvclwiLCBcInRocmVlcXVhcnRlcnNlbWRhc2hcIiwgXCJwZXJpb2RzdXBlcmlvclwiLCBcInF1ZXN0aW9uc21hbGxcIiwgXCJcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJpc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcIlwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcIkNpcmN1bWZsZXhzbWFsbFwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiR3JhdmVzbWFsbFwiLCBcIkFzbWFsbFwiLCBcIkJzbWFsbFwiLCBcIkNzbWFsbFwiLCBcIkRzbWFsbFwiLCBcIkVzbWFsbFwiLCBcIkZzbWFsbFwiLCBcIkdzbWFsbFwiLCBcIkhzbWFsbFwiLCBcIklzbWFsbFwiLCBcIkpzbWFsbFwiLCBcIktzbWFsbFwiLCBcIkxzbWFsbFwiLCBcIk1zbWFsbFwiLCBcIk5zbWFsbFwiLCBcIk9zbWFsbFwiLCBcIlBzbWFsbFwiLCBcIlFzbWFsbFwiLCBcIlJzbWFsbFwiLCBcIlNzbWFsbFwiLCBcIlRzbWFsbFwiLCBcIlVzbWFsbFwiLCBcIlZzbWFsbFwiLCBcIldzbWFsbFwiLCBcIlhzbWFsbFwiLCBcIllzbWFsbFwiLCBcIlpzbWFsbFwiLCBcImNvbG9ubW9uZXRhcnlcIiwgXCJvbmVmaXR0ZWRcIiwgXCJydXBpYWhcIiwgXCJUaWxkZXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93bnNtYWxsXCIsIFwiY2VudG9sZHN0eWxlXCIsIFwiTHNsYXNoc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJTY2Fyb25zbWFsbFwiLCBcIlpjYXJvbnNtYWxsXCIsIFwiRGllcmVzaXNzbWFsbFwiLCBcIkJyZXZlc21hbGxcIiwgXCJDYXJvbnNtYWxsXCIsIFwiXCIsIFwiRG90YWNjZW50c21hbGxcIiwgXCJcIiwgXCJcIiwgXCJNYWNyb25zbWFsbFwiLCBcIlwiLCBcIlwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIlwiLCBcIlwiLCBcIk9nb25la3NtYWxsXCIsIFwiUmluZ3NtYWxsXCIsIFwiQ2VkaWxsYXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwicXVlc3Rpb25kb3duc21hbGxcIiwgXCJvbmVlaWdodGhcIiwgXCJ0aHJlZWVpZ2h0aHNcIiwgXCJmaXZlZWlnaHRoc1wiLCBcInNldmVuZWlnaHRoc1wiLCBcIm9uZXRoaXJkXCIsIFwidHdvdGhpcmRzXCIsIFwiXCIsIFwiXCIsIFwiemVyb3N1cGVyaW9yXCIsIFwib25lc3VwZXJpb3JcIiwgXCJ0d29zdXBlcmlvclwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJmb3Vyc3VwZXJpb3JcIiwgXCJmaXZlc3VwZXJpb3JcIiwgXCJzaXhzdXBlcmlvclwiLCBcInNldmVuc3VwZXJpb3JcIiwgXCJlaWdodHN1cGVyaW9yXCIsIFwibmluZXN1cGVyaW9yXCIsIFwiemVyb2luZmVyaW9yXCIsIFwib25laW5mZXJpb3JcIiwgXCJ0d29pbmZlcmlvclwiLCBcInRocmVlaW5mZXJpb3JcIiwgXCJmb3VyaW5mZXJpb3JcIiwgXCJmaXZlaW5mZXJpb3JcIiwgXCJzaXhpbmZlcmlvclwiLCBcInNldmVuaW5mZXJpb3JcIiwgXCJlaWdodGluZmVyaW9yXCIsIFwibmluZWluZmVyaW9yXCIsIFwiY2VudGluZmVyaW9yXCIsIFwiZG9sbGFyaW5mZXJpb3JcIiwgXCJwZXJpb2RpbmZlcmlvclwiLCBcImNvbW1haW5mZXJpb3JcIiwgXCJBZ3JhdmVzbWFsbFwiLCBcIkFhY3V0ZXNtYWxsXCIsIFwiQWNpcmN1bWZsZXhzbWFsbFwiLCBcIkF0aWxkZXNtYWxsXCIsIFwiQWRpZXJlc2lzc21hbGxcIiwgXCJBcmluZ3NtYWxsXCIsIFwiQUVzbWFsbFwiLCBcIkNjZWRpbGxhc21hbGxcIiwgXCJFZ3JhdmVzbWFsbFwiLCBcIkVhY3V0ZXNtYWxsXCIsIFwiRWNpcmN1bWZsZXhzbWFsbFwiLCBcIkVkaWVyZXNpc3NtYWxsXCIsIFwiSWdyYXZlc21hbGxcIiwgXCJJYWN1dGVzbWFsbFwiLCBcIkljaXJjdW1mbGV4c21hbGxcIiwgXCJJZGllcmVzaXNzbWFsbFwiLCBcIkV0aHNtYWxsXCIsIFwiTnRpbGRlc21hbGxcIiwgXCJPZ3JhdmVzbWFsbFwiLCBcIk9hY3V0ZXNtYWxsXCIsIFwiT2NpcmN1bWZsZXhzbWFsbFwiLCBcIk90aWxkZXNtYWxsXCIsIFwiT2RpZXJlc2lzc21hbGxcIiwgXCJPRXNtYWxsXCIsIFwiT3NsYXNoc21hbGxcIiwgXCJVZ3JhdmVzbWFsbFwiLCBcIlVhY3V0ZXNtYWxsXCIsIFwiVWNpcmN1bWZsZXhzbWFsbFwiLCBcIlVkaWVyZXNpc3NtYWxsXCIsIFwiWWFjdXRlc21hbGxcIiwgXCJUaG9ybnNtYWxsXCIsIFwiWWRpZXJlc2lzc21hbGxcIl07XG5leHBvcnRzLkV4cGVydEVuY29kaW5nID0gRXhwZXJ0RW5jb2Rpbmc7XG5jb25zdCBNYWNFeHBlcnRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwiXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkV0aHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwiXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJhc3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJBYWN1dGVzbWFsbFwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWNpcmN1bWZsZXhzbWFsbFwiLCBcIkFkaWVyZXNpc3NtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBcmluZ3NtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVhY3V0ZXNtYWxsXCIsIFwiRWdyYXZlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJYWN1dGVzbWFsbFwiLCBcIklncmF2ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiTnRpbGRlc21hbGxcIiwgXCJPYWN1dGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2NpcmN1bWZsZXhzbWFsbFwiLCBcIk9kaWVyZXNpc3NtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJVYWN1dGVzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWNpcmN1bWZsZXhzbWFsbFwiLCBcIlVkaWVyZXNpc3NtYWxsXCIsIFwiXCIsIFwiZWlnaHRzdXBlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcInRocmVlaW5mZXJpb3JcIiwgXCJzaXhpbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJzZXZlbmluZmVyaW9yXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJ0d29pbmZlcmlvclwiLCBcIlwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJcIiwgXCJDYXJvbnNtYWxsXCIsIFwib3N1cGVyaW9yXCIsIFwiZml2ZWluZmVyaW9yXCIsIFwiXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiWWFjdXRlc21hbGxcIiwgXCJcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcIlwiLCBcIlwiLCBcIlRob3Juc21hbGxcIiwgXCJcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkFFc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25laW5mZXJpb3JcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIk9Fc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIlwiLCBcIm9uZXN1cGVyaW9yXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJ0aHJlZXN1cGVyaW9yXCIsIFwiZm91cnN1cGVyaW9yXCIsIFwiZml2ZXN1cGVyaW9yXCIsIFwic2l4c3VwZXJpb3JcIiwgXCJzZXZlbnN1cGVyaW9yXCIsIFwibmluZXN1cGVyaW9yXCIsIFwiemVyb3N1cGVyaW9yXCIsIFwiXCIsIFwiZXN1cGVyaW9yXCIsIFwicnN1cGVyaW9yXCIsIFwidHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiaXN1cGVyaW9yXCIsIFwic3N1cGVyaW9yXCIsIFwiZHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwibHN1cGVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJic3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiXTtcbmNvbnN0IE1hY1JvbWFuRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza1wiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiYXRcIiwgXCJBXCIsIFwiQlwiLCBcIkNcIiwgXCJEXCIsIFwiRVwiLCBcIkZcIiwgXCJHXCIsIFwiSFwiLCBcIklcIiwgXCJKXCIsIFwiS1wiLCBcIkxcIiwgXCJNXCIsIFwiTlwiLCBcIk9cIiwgXCJQXCIsIFwiUVwiLCBcIlJcIiwgXCJTXCIsIFwiVFwiLCBcIlVcIiwgXCJWXCIsIFwiV1wiLCBcIlhcIiwgXCJZXCIsIFwiWlwiLCBcImJyYWNrZXRsZWZ0XCIsIFwiYmFja3NsYXNoXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwiYXNjaWljaXJjdW1cIiwgXCJ1bmRlcnNjb3JlXCIsIFwiZ3JhdmVcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiXCIsIFwiQWRpZXJlc2lzXCIsIFwiQXJpbmdcIiwgXCJDY2VkaWxsYVwiLCBcIkVhY3V0ZVwiLCBcIk50aWxkZVwiLCBcIk9kaWVyZXNpc1wiLCBcIlVkaWVyZXNpc1wiLCBcImFhY3V0ZVwiLCBcImFncmF2ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYXRpbGRlXCIsIFwiYXJpbmdcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVncmF2ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiaWFjdXRlXCIsIFwiaWdyYXZlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvZ3JhdmVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm90aWxkZVwiLCBcInVhY3V0ZVwiLCBcInVncmF2ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwiZGFnZ2VyXCIsIFwiZGVncmVlXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwic2VjdGlvblwiLCBcImJ1bGxldFwiLCBcInBhcmFncmFwaFwiLCBcImdlcm1hbmRibHNcIiwgXCJyZWdpc3RlcmVkXCIsIFwiY29weXJpZ2h0XCIsIFwidHJhZGVtYXJrXCIsIFwiYWN1dGVcIiwgXCJkaWVyZXNpc1wiLCBcIm5vdGVxdWFsXCIsIFwiQUVcIiwgXCJPc2xhc2hcIiwgXCJpbmZpbml0eVwiLCBcInBsdXNtaW51c1wiLCBcImxlc3NlcXVhbFwiLCBcImdyZWF0ZXJlcXVhbFwiLCBcInllblwiLCBcIm11XCIsIFwicGFydGlhbGRpZmZcIiwgXCJzdW1tYXRpb25cIiwgXCJwcm9kdWN0XCIsIFwicGlcIiwgXCJpbnRlZ3JhbFwiLCBcIm9yZGZlbWluaW5lXCIsIFwib3JkbWFzY3VsaW5lXCIsIFwiT21lZ2FcIiwgXCJhZVwiLCBcIm9zbGFzaFwiLCBcInF1ZXN0aW9uZG93blwiLCBcImV4Y2xhbWRvd25cIiwgXCJsb2dpY2Fsbm90XCIsIFwicmFkaWNhbFwiLCBcImZsb3JpblwiLCBcImFwcHJveGVxdWFsXCIsIFwiRGVsdGFcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwiZ3VpbGxlbW90cmlnaHRcIiwgXCJlbGxpcHNpc1wiLCBcInNwYWNlXCIsIFwiQWdyYXZlXCIsIFwiQXRpbGRlXCIsIFwiT3RpbGRlXCIsIFwiT0VcIiwgXCJvZVwiLCBcImVuZGFzaFwiLCBcImVtZGFzaFwiLCBcInF1b3RlZGJsbGVmdFwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJxdW90ZWxlZnRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwiZGl2aWRlXCIsIFwibG96ZW5nZVwiLCBcInlkaWVyZXNpc1wiLCBcIllkaWVyZXNpc1wiLCBcImZyYWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInBlcnRob3VzYW5kXCIsIFwiQWNpcmN1bWZsZXhcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkFhY3V0ZVwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJhcHBsZVwiLCBcIk9ncmF2ZVwiLCBcIlVhY3V0ZVwiLCBcIlVjaXJjdW1mbGV4XCIsIFwiVWdyYXZlXCIsIFwiZG90bGVzc2lcIiwgXCJjaXJjdW1mbGV4XCIsIFwidGlsZGVcIiwgXCJtYWNyb25cIiwgXCJicmV2ZVwiLCBcImRvdGFjY2VudFwiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIl07XG5leHBvcnRzLk1hY1JvbWFuRW5jb2RpbmcgPSBNYWNSb21hbkVuY29kaW5nO1xuY29uc3QgU3RhbmRhcmRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJcIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcIlwiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJBRVwiLCBcIlwiLCBcIm9yZGZlbWluaW5lXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJhZVwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImRvdGxlc3NpXCIsIFwiXCIsIFwiXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCJdO1xuZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gU3RhbmRhcmRFbmNvZGluZztcbmNvbnN0IFdpbkFuc2lFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3Rlc2luZ2xlXCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJncmF2ZVwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJidWxsZXRcIiwgXCJFdXJvXCIsIFwiYnVsbGV0XCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJmbG9yaW5cIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJlbGxpcHNpc1wiLCBcImRhZ2dlclwiLCBcImRhZ2dlcmRibFwiLCBcImNpcmN1bWZsZXhcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIlNjYXJvblwiLCBcImd1aWxzaW5nbGxlZnRcIiwgXCJPRVwiLCBcImJ1bGxldFwiLCBcIlpjYXJvblwiLCBcImJ1bGxldFwiLCBcImJ1bGxldFwiLCBcInF1b3RlbGVmdFwiLCBcInF1b3RlcmlnaHRcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwiYnVsbGV0XCIsIFwiZW5kYXNoXCIsIFwiZW1kYXNoXCIsIFwidGlsZGVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJzY2Fyb25cIiwgXCJndWlsc2luZ2xyaWdodFwiLCBcIm9lXCIsIFwiYnVsbGV0XCIsIFwiemNhcm9uXCIsIFwiWWRpZXJlc2lzXCIsIFwic3BhY2VcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiY3VycmVuY3lcIiwgXCJ5ZW5cIiwgXCJicm9rZW5iYXJcIiwgXCJzZWN0aW9uXCIsIFwiZGllcmVzaXNcIiwgXCJjb3B5cmlnaHRcIiwgXCJvcmRmZW1pbmluZVwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJsb2dpY2Fsbm90XCIsIFwiaHlwaGVuXCIsIFwicmVnaXN0ZXJlZFwiLCBcIm1hY3JvblwiLCBcImRlZ3JlZVwiLCBcInBsdXNtaW51c1wiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImFjdXRlXCIsIFwibXVcIiwgXCJwYXJhZ3JhcGhcIiwgXCJwZXJpb2RjZW50ZXJlZFwiLCBcImNlZGlsbGFcIiwgXCJvbmVzdXBlcmlvclwiLCBcIm9yZG1hc2N1bGluZVwiLCBcImd1aWxsZW1vdHJpZ2h0XCIsIFwib25lcXVhcnRlclwiLCBcIm9uZWhhbGZcIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiQWdyYXZlXCIsIFwiQWFjdXRlXCIsIFwiQWNpcmN1bWZsZXhcIiwgXCJBdGlsZGVcIiwgXCJBZGllcmVzaXNcIiwgXCJBcmluZ1wiLCBcIkFFXCIsIFwiQ2NlZGlsbGFcIiwgXCJFZ3JhdmVcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiRXRoXCIsIFwiTnRpbGRlXCIsIFwiT2dyYXZlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPdGlsZGVcIiwgXCJPZGllcmVzaXNcIiwgXCJtdWx0aXBseVwiLCBcIk9zbGFzaFwiLCBcIlVncmF2ZVwiLCBcIlVhY3V0ZVwiLCBcIlVjaXJjdW1mbGV4XCIsIFwiVWRpZXJlc2lzXCIsIFwiWWFjdXRlXCIsIFwiVGhvcm5cIiwgXCJnZXJtYW5kYmxzXCIsIFwiYWdyYXZlXCIsIFwiYWFjdXRlXCIsIFwiYWNpcmN1bWZsZXhcIiwgXCJhdGlsZGVcIiwgXCJhZGllcmVzaXNcIiwgXCJhcmluZ1wiLCBcImFlXCIsIFwiY2NlZGlsbGFcIiwgXCJlZ3JhdmVcIiwgXCJlYWN1dGVcIiwgXCJlY2lyY3VtZmxleFwiLCBcImVkaWVyZXNpc1wiLCBcImlncmF2ZVwiLCBcImlhY3V0ZVwiLCBcImljaXJjdW1mbGV4XCIsIFwiaWRpZXJlc2lzXCIsIFwiZXRoXCIsIFwibnRpbGRlXCIsIFwib2dyYXZlXCIsIFwib2FjdXRlXCIsIFwib2NpcmN1bWZsZXhcIiwgXCJvdGlsZGVcIiwgXCJvZGllcmVzaXNcIiwgXCJkaXZpZGVcIiwgXCJvc2xhc2hcIiwgXCJ1Z3JhdmVcIiwgXCJ1YWN1dGVcIiwgXCJ1Y2lyY3VtZmxleFwiLCBcInVkaWVyZXNpc1wiLCBcInlhY3V0ZVwiLCBcInRob3JuXCIsIFwieWRpZXJlc2lzXCJdO1xuZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7XG5jb25zdCBTeW1ib2xTZXRFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwidW5pdmVyc2FsXCIsIFwibnVtYmVyc2lnblwiLCBcImV4aXN0ZW50aWFsXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInN1Y2h0aGF0XCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrbWF0aFwiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcIm1pbnVzXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJjb25ncnVlbnRcIiwgXCJBbHBoYVwiLCBcIkJldGFcIiwgXCJDaGlcIiwgXCJEZWx0YVwiLCBcIkVwc2lsb25cIiwgXCJQaGlcIiwgXCJHYW1tYVwiLCBcIkV0YVwiLCBcIklvdGFcIiwgXCJ0aGV0YTFcIiwgXCJLYXBwYVwiLCBcIkxhbWJkYVwiLCBcIk11XCIsIFwiTnVcIiwgXCJPbWljcm9uXCIsIFwiUGlcIiwgXCJUaGV0YVwiLCBcIlJob1wiLCBcIlNpZ21hXCIsIFwiVGF1XCIsIFwiVXBzaWxvblwiLCBcInNpZ21hMVwiLCBcIk9tZWdhXCIsIFwiWGlcIiwgXCJQc2lcIiwgXCJaZXRhXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJ0aGVyZWZvcmVcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJwZXJwZW5kaWN1bGFyXCIsIFwidW5kZXJzY29yZVwiLCBcInJhZGljYWxleFwiLCBcImFscGhhXCIsIFwiYmV0YVwiLCBcImNoaVwiLCBcImRlbHRhXCIsIFwiZXBzaWxvblwiLCBcInBoaVwiLCBcImdhbW1hXCIsIFwiZXRhXCIsIFwiaW90YVwiLCBcInBoaTFcIiwgXCJrYXBwYVwiLCBcImxhbWJkYVwiLCBcIm11XCIsIFwibnVcIiwgXCJvbWljcm9uXCIsIFwicGlcIiwgXCJ0aGV0YVwiLCBcInJob1wiLCBcInNpZ21hXCIsIFwidGF1XCIsIFwidXBzaWxvblwiLCBcIm9tZWdhMVwiLCBcIm9tZWdhXCIsIFwieGlcIiwgXCJwc2lcIiwgXCJ6ZXRhXCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcInNpbWlsYXJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJFdXJvXCIsIFwiVXBzaWxvbjFcIiwgXCJtaW51dGVcIiwgXCJsZXNzZXF1YWxcIiwgXCJmcmFjdGlvblwiLCBcImluZmluaXR5XCIsIFwiZmxvcmluXCIsIFwiY2x1YlwiLCBcImRpYW1vbmRcIiwgXCJoZWFydFwiLCBcInNwYWRlXCIsIFwiYXJyb3dib3RoXCIsIFwiYXJyb3dsZWZ0XCIsIFwiYXJyb3d1cFwiLCBcImFycm93cmlnaHRcIiwgXCJhcnJvd2Rvd25cIiwgXCJkZWdyZWVcIiwgXCJwbHVzbWludXNcIiwgXCJzZWNvbmRcIiwgXCJncmVhdGVyZXF1YWxcIiwgXCJtdWx0aXBseVwiLCBcInByb3BvcnRpb25hbFwiLCBcInBhcnRpYWxkaWZmXCIsIFwiYnVsbGV0XCIsIFwiZGl2aWRlXCIsIFwibm90ZXF1YWxcIiwgXCJlcXVpdmFsZW5jZVwiLCBcImFwcHJveGVxdWFsXCIsIFwiZWxsaXBzaXNcIiwgXCJhcnJvd3ZlcnRleFwiLCBcImFycm93aG9yaXpleFwiLCBcImNhcnJpYWdlcmV0dXJuXCIsIFwiYWxlcGhcIiwgXCJJZnJha3R1clwiLCBcIlJmcmFrdHVyXCIsIFwid2VpZXJzdHJhc3NcIiwgXCJjaXJjbGVtdWx0aXBseVwiLCBcImNpcmNsZXBsdXNcIiwgXCJlbXB0eXNldFwiLCBcImludGVyc2VjdGlvblwiLCBcInVuaW9uXCIsIFwicHJvcGVyc3VwZXJzZXRcIiwgXCJyZWZsZXhzdXBlcnNldFwiLCBcIm5vdHN1YnNldFwiLCBcInByb3BlcnN1YnNldFwiLCBcInJlZmxleHN1YnNldFwiLCBcImVsZW1lbnRcIiwgXCJub3RlbGVtZW50XCIsIFwiYW5nbGVcIiwgXCJncmFkaWVudFwiLCBcInJlZ2lzdGVyc2VyaWZcIiwgXCJjb3B5cmlnaHRzZXJpZlwiLCBcInRyYWRlbWFya3NlcmlmXCIsIFwicHJvZHVjdFwiLCBcInJhZGljYWxcIiwgXCJkb3RtYXRoXCIsIFwibG9naWNhbG5vdFwiLCBcImxvZ2ljYWxhbmRcIiwgXCJsb2dpY2Fsb3JcIiwgXCJhcnJvd2RibGJvdGhcIiwgXCJhcnJvd2RibGxlZnRcIiwgXCJhcnJvd2RibHVwXCIsIFwiYXJyb3dkYmxyaWdodFwiLCBcImFycm93ZGJsZG93blwiLCBcImxvemVuZ2VcIiwgXCJhbmdsZWxlZnRcIiwgXCJyZWdpc3RlcnNhbnNcIiwgXCJjb3B5cmlnaHRzYW5zXCIsIFwidHJhZGVtYXJrc2Fuc1wiLCBcInN1bW1hdGlvblwiLCBcInBhcmVubGVmdHRwXCIsIFwicGFyZW5sZWZ0ZXhcIiwgXCJwYXJlbmxlZnRidFwiLCBcImJyYWNrZXRsZWZ0dHBcIiwgXCJicmFja2V0bGVmdGV4XCIsIFwiYnJhY2tldGxlZnRidFwiLCBcImJyYWNlbGVmdHRwXCIsIFwiYnJhY2VsZWZ0bWlkXCIsIFwiYnJhY2VsZWZ0YnRcIiwgXCJicmFjZWV4XCIsIFwiXCIsIFwiYW5nbGVyaWdodFwiLCBcImludGVncmFsXCIsIFwiaW50ZWdyYWx0cFwiLCBcImludGVncmFsZXhcIiwgXCJpbnRlZ3JhbGJ0XCIsIFwicGFyZW5yaWdodHRwXCIsIFwicGFyZW5yaWdodGV4XCIsIFwicGFyZW5yaWdodGJ0XCIsIFwiYnJhY2tldHJpZ2h0dHBcIiwgXCJicmFja2V0cmlnaHRleFwiLCBcImJyYWNrZXRyaWdodGJ0XCIsIFwiYnJhY2VyaWdodHRwXCIsIFwiYnJhY2VyaWdodG1pZFwiLCBcImJyYWNlcmlnaHRidFwiLCBcIlwiXTtcbmV4cG9ydHMuU3ltYm9sU2V0RW5jb2RpbmcgPSBTeW1ib2xTZXRFbmNvZGluZztcbmNvbnN0IFphcGZEaW5nYmF0c0VuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJhMVwiLCBcImEyXCIsIFwiYTIwMlwiLCBcImEzXCIsIFwiYTRcIiwgXCJhNVwiLCBcImExMTlcIiwgXCJhMTE4XCIsIFwiYTExN1wiLCBcImExMVwiLCBcImExMlwiLCBcImExM1wiLCBcImExNFwiLCBcImExNVwiLCBcImExNlwiLCBcImExMDVcIiwgXCJhMTdcIiwgXCJhMThcIiwgXCJhMTlcIiwgXCJhMjBcIiwgXCJhMjFcIiwgXCJhMjJcIiwgXCJhMjNcIiwgXCJhMjRcIiwgXCJhMjVcIiwgXCJhMjZcIiwgXCJhMjdcIiwgXCJhMjhcIiwgXCJhNlwiLCBcImE3XCIsIFwiYThcIiwgXCJhOVwiLCBcImExMFwiLCBcImEyOVwiLCBcImEzMFwiLCBcImEzMVwiLCBcImEzMlwiLCBcImEzM1wiLCBcImEzNFwiLCBcImEzNVwiLCBcImEzNlwiLCBcImEzN1wiLCBcImEzOFwiLCBcImEzOVwiLCBcImE0MFwiLCBcImE0MVwiLCBcImE0MlwiLCBcImE0M1wiLCBcImE0NFwiLCBcImE0NVwiLCBcImE0NlwiLCBcImE0N1wiLCBcImE0OFwiLCBcImE0OVwiLCBcImE1MFwiLCBcImE1MVwiLCBcImE1MlwiLCBcImE1M1wiLCBcImE1NFwiLCBcImE1NVwiLCBcImE1NlwiLCBcImE1N1wiLCBcImE1OFwiLCBcImE1OVwiLCBcImE2MFwiLCBcImE2MVwiLCBcImE2MlwiLCBcImE2M1wiLCBcImE2NFwiLCBcImE2NVwiLCBcImE2NlwiLCBcImE2N1wiLCBcImE2OFwiLCBcImE2OVwiLCBcImE3MFwiLCBcImE3MVwiLCBcImE3MlwiLCBcImE3M1wiLCBcImE3NFwiLCBcImEyMDNcIiwgXCJhNzVcIiwgXCJhMjA0XCIsIFwiYTc2XCIsIFwiYTc3XCIsIFwiYTc4XCIsIFwiYTc5XCIsIFwiYTgxXCIsIFwiYTgyXCIsIFwiYTgzXCIsIFwiYTg0XCIsIFwiYTk3XCIsIFwiYTk4XCIsIFwiYTk5XCIsIFwiYTEwMFwiLCBcIlwiLCBcImE4OVwiLCBcImE5MFwiLCBcImE5M1wiLCBcImE5NFwiLCBcImE5MVwiLCBcImE5MlwiLCBcImEyMDVcIiwgXCJhODVcIiwgXCJhMjA2XCIsIFwiYTg2XCIsIFwiYTg3XCIsIFwiYTg4XCIsIFwiYTk1XCIsIFwiYTk2XCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiYTEwMVwiLCBcImExMDJcIiwgXCJhMTAzXCIsIFwiYTEwNFwiLCBcImExMDZcIiwgXCJhMTA3XCIsIFwiYTEwOFwiLCBcImExMTJcIiwgXCJhMTExXCIsIFwiYTExMFwiLCBcImExMDlcIiwgXCJhMTIwXCIsIFwiYTEyMVwiLCBcImExMjJcIiwgXCJhMTIzXCIsIFwiYTEyNFwiLCBcImExMjVcIiwgXCJhMTI2XCIsIFwiYTEyN1wiLCBcImExMjhcIiwgXCJhMTI5XCIsIFwiYTEzMFwiLCBcImExMzFcIiwgXCJhMTMyXCIsIFwiYTEzM1wiLCBcImExMzRcIiwgXCJhMTM1XCIsIFwiYTEzNlwiLCBcImExMzdcIiwgXCJhMTM4XCIsIFwiYTEzOVwiLCBcImExNDBcIiwgXCJhMTQxXCIsIFwiYTE0MlwiLCBcImExNDNcIiwgXCJhMTQ0XCIsIFwiYTE0NVwiLCBcImExNDZcIiwgXCJhMTQ3XCIsIFwiYTE0OFwiLCBcImExNDlcIiwgXCJhMTUwXCIsIFwiYTE1MVwiLCBcImExNTJcIiwgXCJhMTUzXCIsIFwiYTE1NFwiLCBcImExNTVcIiwgXCJhMTU2XCIsIFwiYTE1N1wiLCBcImExNThcIiwgXCJhMTU5XCIsIFwiYTE2MFwiLCBcImExNjFcIiwgXCJhMTYzXCIsIFwiYTE2NFwiLCBcImExOTZcIiwgXCJhMTY1XCIsIFwiYTE5MlwiLCBcImExNjZcIiwgXCJhMTY3XCIsIFwiYTE2OFwiLCBcImExNjlcIiwgXCJhMTcwXCIsIFwiYTE3MVwiLCBcImExNzJcIiwgXCJhMTczXCIsIFwiYTE2MlwiLCBcImExNzRcIiwgXCJhMTc1XCIsIFwiYTE3NlwiLCBcImExNzdcIiwgXCJhMTc4XCIsIFwiYTE3OVwiLCBcImExOTNcIiwgXCJhMTgwXCIsIFwiYTE5OVwiLCBcImExODFcIiwgXCJhMjAwXCIsIFwiYTE4MlwiLCBcIlwiLCBcImEyMDFcIiwgXCJhMTgzXCIsIFwiYTE4NFwiLCBcImExOTdcIiwgXCJhMTg1XCIsIFwiYTE5NFwiLCBcImExOThcIiwgXCJhMTg2XCIsIFwiYTE5NVwiLCBcImExODdcIiwgXCJhMTg4XCIsIFwiYTE4OVwiLCBcImExOTBcIiwgXCJhMTkxXCIsIFwiXCJdO1xuZXhwb3J0cy5aYXBmRGluZ2JhdHNFbmNvZGluZyA9IFphcGZEaW5nYmF0c0VuY29kaW5nO1xuXG5mdW5jdGlvbiBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpIHtcbiAgc3dpdGNoIChlbmNvZGluZ05hbWUpIHtcbiAgICBjYXNlIFwiV2luQW5zaUVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gV2luQW5zaUVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlN0YW5kYXJkRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBTdGFuZGFyZEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIk1hY1JvbWFuRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlN5bWJvbFNldEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gU3ltYm9sU2V0RW5jb2Rpbmc7XG5cbiAgICBjYXNlIFwiWmFwZkRpbmdiYXRzRW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBaYXBmRGluZ2JhdHNFbmNvZGluZztcblxuICAgIGNhc2UgXCJFeHBlcnRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIEV4cGVydEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIk1hY0V4cGVydEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gTWFjRXhwZXJ0RW5jb2Rpbmc7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG52YXIgZ2V0TG9va3VwVGFibGVGYWN0b3J5ID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KS5nZXRMb29rdXBUYWJsZUZhY3Rvcnk7XG52YXIgZ2V0R2x5cGhzVW5pY29kZSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuIHQuQSA9IDB4MDA0MTtcbiB0LkFFID0gMHgwMGM2O1xuIHQuQUVhY3V0ZSA9IDB4MDFmYztcbiB0LkFFbWFjcm9uID0gMHgwMWUyO1xuIHQuQUVzbWFsbCA9IDB4ZjdlNjtcbiB0LkFhY3V0ZSA9IDB4MDBjMTtcbiB0LkFhY3V0ZXNtYWxsID0gMHhmN2UxO1xuIHQuQWJyZXZlID0gMHgwMTAyO1xuIHQuQWJyZXZlYWN1dGUgPSAweDFlYWU7XG4gdC5BYnJldmVjeXJpbGxpYyA9IDB4MDRkMDtcbiB0LkFicmV2ZWRvdGJlbG93ID0gMHgxZWI2O1xuIHQuQWJyZXZlZ3JhdmUgPSAweDFlYjA7XG4gdC5BYnJldmVob29rYWJvdmUgPSAweDFlYjI7XG4gdC5BYnJldmV0aWxkZSA9IDB4MWViNDtcbiB0LkFjYXJvbiA9IDB4MDFjZDtcbiB0LkFjaXJjbGUgPSAweDI0YjY7XG4gdC5BY2lyY3VtZmxleCA9IDB4MDBjMjtcbiB0LkFjaXJjdW1mbGV4YWN1dGUgPSAweDFlYTQ7XG4gdC5BY2lyY3VtZmxleGRvdGJlbG93ID0gMHgxZWFjO1xuIHQuQWNpcmN1bWZsZXhncmF2ZSA9IDB4MWVhNjtcbiB0LkFjaXJjdW1mbGV4aG9va2Fib3ZlID0gMHgxZWE4O1xuIHQuQWNpcmN1bWZsZXhzbWFsbCA9IDB4ZjdlMjtcbiB0LkFjaXJjdW1mbGV4dGlsZGUgPSAweDFlYWE7XG4gdC5BY3V0ZSA9IDB4ZjZjOTtcbiB0LkFjdXRlc21hbGwgPSAweGY3YjQ7XG4gdC5BY3lyaWxsaWMgPSAweDA0MTA7XG4gdC5BZGJsZ3JhdmUgPSAweDAyMDA7XG4gdC5BZGllcmVzaXMgPSAweDAwYzQ7XG4gdC5BZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkMjtcbiB0LkFkaWVyZXNpc21hY3JvbiA9IDB4MDFkZTtcbiB0LkFkaWVyZXNpc3NtYWxsID0gMHhmN2U0O1xuIHQuQWRvdGJlbG93ID0gMHgxZWEwO1xuIHQuQWRvdG1hY3JvbiA9IDB4MDFlMDtcbiB0LkFncmF2ZSA9IDB4MDBjMDtcbiB0LkFncmF2ZXNtYWxsID0gMHhmN2UwO1xuIHQuQWhvb2thYm92ZSA9IDB4MWVhMjtcbiB0LkFpZWN5cmlsbGljID0gMHgwNGQ0O1xuIHQuQWludmVydGVkYnJldmUgPSAweDAyMDI7XG4gdC5BbHBoYSA9IDB4MDM5MTtcbiB0LkFscGhhdG9ub3MgPSAweDAzODY7XG4gdC5BbWFjcm9uID0gMHgwMTAwO1xuIHQuQW1vbm9zcGFjZSA9IDB4ZmYyMTtcbiB0LkFvZ29uZWsgPSAweDAxMDQ7XG4gdC5BcmluZyA9IDB4MDBjNTtcbiB0LkFyaW5nYWN1dGUgPSAweDAxZmE7XG4gdC5BcmluZ2JlbG93ID0gMHgxZTAwO1xuIHQuQXJpbmdzbWFsbCA9IDB4ZjdlNTtcbiB0LkFzbWFsbCA9IDB4Zjc2MTtcbiB0LkF0aWxkZSA9IDB4MDBjMztcbiB0LkF0aWxkZXNtYWxsID0gMHhmN2UzO1xuIHQuQXliYXJtZW5pYW4gPSAweDA1MzE7XG4gdC5CID0gMHgwMDQyO1xuIHQuQmNpcmNsZSA9IDB4MjRiNztcbiB0LkJkb3RhY2NlbnQgPSAweDFlMDI7XG4gdC5CZG90YmVsb3cgPSAweDFlMDQ7XG4gdC5CZWN5cmlsbGljID0gMHgwNDExO1xuIHQuQmVuYXJtZW5pYW4gPSAweDA1MzI7XG4gdC5CZXRhID0gMHgwMzkyO1xuIHQuQmhvb2sgPSAweDAxODE7XG4gdC5CbGluZWJlbG93ID0gMHgxZTA2O1xuIHQuQm1vbm9zcGFjZSA9IDB4ZmYyMjtcbiB0LkJyZXZlc21hbGwgPSAweGY2ZjQ7XG4gdC5Cc21hbGwgPSAweGY3NjI7XG4gdC5CdG9wYmFyID0gMHgwMTgyO1xuIHQuQyA9IDB4MDA0MztcbiB0LkNhYXJtZW5pYW4gPSAweDA1M2U7XG4gdC5DYWN1dGUgPSAweDAxMDY7XG4gdC5DYXJvbiA9IDB4ZjZjYTtcbiB0LkNhcm9uc21hbGwgPSAweGY2ZjU7XG4gdC5DY2Fyb24gPSAweDAxMGM7XG4gdC5DY2VkaWxsYSA9IDB4MDBjNztcbiB0LkNjZWRpbGxhYWN1dGUgPSAweDFlMDg7XG4gdC5DY2VkaWxsYXNtYWxsID0gMHhmN2U3O1xuIHQuQ2NpcmNsZSA9IDB4MjRiODtcbiB0LkNjaXJjdW1mbGV4ID0gMHgwMTA4O1xuIHQuQ2RvdCA9IDB4MDEwYTtcbiB0LkNkb3RhY2NlbnQgPSAweDAxMGE7XG4gdC5DZWRpbGxhc21hbGwgPSAweGY3Yjg7XG4gdC5DaGFhcm1lbmlhbiA9IDB4MDU0OTtcbiB0LkNoZWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGJjO1xuIHQuQ2hlY3lyaWxsaWMgPSAweDA0Mjc7XG4gdC5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRiZTtcbiB0LkNoZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGI2O1xuIHQuQ2hlZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmNDtcbiB0LkNoZWhhcm1lbmlhbiA9IDB4MDU0MztcbiB0LkNoZWtoYWthc3NpYW5jeXJpbGxpYyA9IDB4MDRjYjtcbiB0LkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMgPSAweDA0Yjg7XG4gdC5DaGkgPSAweDAzYTc7XG4gdC5DaG9vayA9IDB4MDE4NztcbiB0LkNpcmN1bWZsZXhzbWFsbCA9IDB4ZjZmNjtcbiB0LkNtb25vc3BhY2UgPSAweGZmMjM7XG4gdC5Db2FybWVuaWFuID0gMHgwNTUxO1xuIHQuQ3NtYWxsID0gMHhmNzYzO1xuIHQuRCA9IDB4MDA0NDtcbiB0LkRaID0gMHgwMWYxO1xuIHQuRFpjYXJvbiA9IDB4MDFjNDtcbiB0LkRhYXJtZW5pYW4gPSAweDA1MzQ7XG4gdC5EYWZyaWNhbiA9IDB4MDE4OTtcbiB0LkRjYXJvbiA9IDB4MDEwZTtcbiB0LkRjZWRpbGxhID0gMHgxZTEwO1xuIHQuRGNpcmNsZSA9IDB4MjRiOTtcbiB0LkRjaXJjdW1mbGV4YmVsb3cgPSAweDFlMTI7XG4gdC5EY3JvYXQgPSAweDAxMTA7XG4gdC5EZG90YWNjZW50ID0gMHgxZTBhO1xuIHQuRGRvdGJlbG93ID0gMHgxZTBjO1xuIHQuRGVjeXJpbGxpYyA9IDB4MDQxNDtcbiB0LkRlaWNvcHRpYyA9IDB4MDNlZTtcbiB0LkRlbHRhID0gMHgyMjA2O1xuIHQuRGVsdGFncmVlayA9IDB4MDM5NDtcbiB0LkRob29rID0gMHgwMThhO1xuIHQuRGllcmVzaXMgPSAweGY2Y2I7XG4gdC5EaWVyZXNpc0FjdXRlID0gMHhmNmNjO1xuIHQuRGllcmVzaXNHcmF2ZSA9IDB4ZjZjZDtcbiB0LkRpZXJlc2lzc21hbGwgPSAweGY3YTg7XG4gdC5EaWdhbW1hZ3JlZWsgPSAweDAzZGM7XG4gdC5EamVjeXJpbGxpYyA9IDB4MDQwMjtcbiB0LkRsaW5lYmVsb3cgPSAweDFlMGU7XG4gdC5EbW9ub3NwYWNlID0gMHhmZjI0O1xuIHQuRG90YWNjZW50c21hbGwgPSAweGY2Zjc7XG4gdC5Ec2xhc2ggPSAweDAxMTA7XG4gdC5Ec21hbGwgPSAweGY3NjQ7XG4gdC5EdG9wYmFyID0gMHgwMThiO1xuIHQuRHogPSAweDAxZjI7XG4gdC5EemNhcm9uID0gMHgwMWM1O1xuIHQuRHplYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0ZTA7XG4gdC5EemVjeXJpbGxpYyA9IDB4MDQwNTtcbiB0LkR6aGVjeXJpbGxpYyA9IDB4MDQwZjtcbiB0LkUgPSAweDAwNDU7XG4gdC5FYWN1dGUgPSAweDAwYzk7XG4gdC5FYWN1dGVzbWFsbCA9IDB4ZjdlOTtcbiB0LkVicmV2ZSA9IDB4MDExNDtcbiB0LkVjYXJvbiA9IDB4MDExYTtcbiB0LkVjZWRpbGxhYnJldmUgPSAweDFlMWM7XG4gdC5FY2hhcm1lbmlhbiA9IDB4MDUzNTtcbiB0LkVjaXJjbGUgPSAweDI0YmE7XG4gdC5FY2lyY3VtZmxleCA9IDB4MDBjYTtcbiB0LkVjaXJjdW1mbGV4YWN1dGUgPSAweDFlYmU7XG4gdC5FY2lyY3VtZmxleGJlbG93ID0gMHgxZTE4O1xuIHQuRWNpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVjNjtcbiB0LkVjaXJjdW1mbGV4Z3JhdmUgPSAweDFlYzA7XG4gdC5FY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVjMjtcbiB0LkVjaXJjdW1mbGV4c21hbGwgPSAweGY3ZWE7XG4gdC5FY2lyY3VtZmxleHRpbGRlID0gMHgxZWM0O1xuIHQuRWN5cmlsbGljID0gMHgwNDA0O1xuIHQuRWRibGdyYXZlID0gMHgwMjA0O1xuIHQuRWRpZXJlc2lzID0gMHgwMGNiO1xuIHQuRWRpZXJlc2lzc21hbGwgPSAweGY3ZWI7XG4gdC5FZG90ID0gMHgwMTE2O1xuIHQuRWRvdGFjY2VudCA9IDB4MDExNjtcbiB0LkVkb3RiZWxvdyA9IDB4MWViODtcbiB0LkVmY3lyaWxsaWMgPSAweDA0MjQ7XG4gdC5FZ3JhdmUgPSAweDAwYzg7XG4gdC5FZ3JhdmVzbWFsbCA9IDB4ZjdlODtcbiB0LkVoYXJtZW5pYW4gPSAweDA1Mzc7XG4gdC5FaG9va2Fib3ZlID0gMHgxZWJhO1xuIHQuRWlnaHRyb21hbiA9IDB4MjE2NztcbiB0LkVpbnZlcnRlZGJyZXZlID0gMHgwMjA2O1xuIHQuRWlvdGlmaWVkY3lyaWxsaWMgPSAweDA0NjQ7XG4gdC5FbGN5cmlsbGljID0gMHgwNDFiO1xuIHQuRWxldmVucm9tYW4gPSAweDIxNmE7XG4gdC5FbWFjcm9uID0gMHgwMTEyO1xuIHQuRW1hY3JvbmFjdXRlID0gMHgxZTE2O1xuIHQuRW1hY3JvbmdyYXZlID0gMHgxZTE0O1xuIHQuRW1jeXJpbGxpYyA9IDB4MDQxYztcbiB0LkVtb25vc3BhY2UgPSAweGZmMjU7XG4gdC5FbmN5cmlsbGljID0gMHgwNDFkO1xuIHQuRW5kZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhMjtcbiB0LkVuZyA9IDB4MDE0YTtcbiB0LkVuZ2hlY3lyaWxsaWMgPSAweDA0YTQ7XG4gdC5Fbmhvb2tjeXJpbGxpYyA9IDB4MDRjNztcbiB0LkVvZ29uZWsgPSAweDAxMTg7XG4gdC5Fb3BlbiA9IDB4MDE5MDtcbiB0LkVwc2lsb24gPSAweDAzOTU7XG4gdC5FcHNpbG9udG9ub3MgPSAweDAzODg7XG4gdC5FcmN5cmlsbGljID0gMHgwNDIwO1xuIHQuRXJldmVyc2VkID0gMHgwMThlO1xuIHQuRXJldmVyc2VkY3lyaWxsaWMgPSAweDA0MmQ7XG4gdC5Fc2N5cmlsbGljID0gMHgwNDIxO1xuIHQuRXNkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhYTtcbiB0LkVzaCA9IDB4MDFhOTtcbiB0LkVzbWFsbCA9IDB4Zjc2NTtcbiB0LkV0YSA9IDB4MDM5NztcbiB0LkV0YXJtZW5pYW4gPSAweDA1Mzg7XG4gdC5FdGF0b25vcyA9IDB4MDM4OTtcbiB0LkV0aCA9IDB4MDBkMDtcbiB0LkV0aHNtYWxsID0gMHhmN2YwO1xuIHQuRXRpbGRlID0gMHgxZWJjO1xuIHQuRXRpbGRlYmVsb3cgPSAweDFlMWE7XG4gdC5FdXJvID0gMHgyMGFjO1xuIHQuRXpoID0gMHgwMWI3O1xuIHQuRXpoY2Fyb24gPSAweDAxZWU7XG4gdC5FemhyZXZlcnNlZCA9IDB4MDFiODtcbiB0LkYgPSAweDAwNDY7XG4gdC5GY2lyY2xlID0gMHgyNGJiO1xuIHQuRmRvdGFjY2VudCA9IDB4MWUxZTtcbiB0LkZlaGFybWVuaWFuID0gMHgwNTU2O1xuIHQuRmVpY29wdGljID0gMHgwM2U0O1xuIHQuRmhvb2sgPSAweDAxOTE7XG4gdC5GaXRhY3lyaWxsaWMgPSAweDA0NzI7XG4gdC5GaXZlcm9tYW4gPSAweDIxNjQ7XG4gdC5GbW9ub3NwYWNlID0gMHhmZjI2O1xuIHQuRm91cnJvbWFuID0gMHgyMTYzO1xuIHQuRnNtYWxsID0gMHhmNzY2O1xuIHQuRyA9IDB4MDA0NztcbiB0LkdCc3F1YXJlID0gMHgzMzg3O1xuIHQuR2FjdXRlID0gMHgwMWY0O1xuIHQuR2FtbWEgPSAweDAzOTM7XG4gdC5HYW1tYWFmcmljYW4gPSAweDAxOTQ7XG4gdC5HYW5naWFjb3B0aWMgPSAweDAzZWE7XG4gdC5HYnJldmUgPSAweDAxMWU7XG4gdC5HY2Fyb24gPSAweDAxZTY7XG4gdC5HY2VkaWxsYSA9IDB4MDEyMjtcbiB0LkdjaXJjbGUgPSAweDI0YmM7XG4gdC5HY2lyY3VtZmxleCA9IDB4MDExYztcbiB0Lkdjb21tYWFjY2VudCA9IDB4MDEyMjtcbiB0Lkdkb3QgPSAweDAxMjA7XG4gdC5HZG90YWNjZW50ID0gMHgwMTIwO1xuIHQuR2VjeXJpbGxpYyA9IDB4MDQxMztcbiB0LkdoYWRhcm1lbmlhbiA9IDB4MDU0MjtcbiB0LkdoZW1pZGRsZWhvb2tjeXJpbGxpYyA9IDB4MDQ5NDtcbiB0LkdoZXN0cm9rZWN5cmlsbGljID0gMHgwNDkyO1xuIHQuR2hldXB0dXJuY3lyaWxsaWMgPSAweDA0OTA7XG4gdC5HaG9vayA9IDB4MDE5MztcbiB0LkdpbWFybWVuaWFuID0gMHgwNTMzO1xuIHQuR2plY3lyaWxsaWMgPSAweDA0MDM7XG4gdC5HbWFjcm9uID0gMHgxZTIwO1xuIHQuR21vbm9zcGFjZSA9IDB4ZmYyNztcbiB0LkdyYXZlID0gMHhmNmNlO1xuIHQuR3JhdmVzbWFsbCA9IDB4Zjc2MDtcbiB0LkdzbWFsbCA9IDB4Zjc2NztcbiB0LkdzbWFsbGhvb2sgPSAweDAyOWI7XG4gdC5Hc3Ryb2tlID0gMHgwMWU0O1xuIHQuSCA9IDB4MDA0ODtcbiB0LkgxODUzMyA9IDB4MjVjZjtcbiB0LkgxODU0MyA9IDB4MjVhYTtcbiB0LkgxODU1MSA9IDB4MjVhYjtcbiB0LkgyMjA3MyA9IDB4MjVhMTtcbiB0LkhQc3F1YXJlID0gMHgzM2NiO1xuIHQuSGFhYmtoYXNpYW5jeXJpbGxpYyA9IDB4MDRhODtcbiB0LkhhZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YjI7XG4gdC5IYXJkc2lnbmN5cmlsbGljID0gMHgwNDJhO1xuIHQuSGJhciA9IDB4MDEyNjtcbiB0LkhicmV2ZWJlbG93ID0gMHgxZTJhO1xuIHQuSGNlZGlsbGEgPSAweDFlMjg7XG4gdC5IY2lyY2xlID0gMHgyNGJkO1xuIHQuSGNpcmN1bWZsZXggPSAweDAxMjQ7XG4gdC5IZGllcmVzaXMgPSAweDFlMjY7XG4gdC5IZG90YWNjZW50ID0gMHgxZTIyO1xuIHQuSGRvdGJlbG93ID0gMHgxZTI0O1xuIHQuSG1vbm9zcGFjZSA9IDB4ZmYyODtcbiB0LkhvYXJtZW5pYW4gPSAweDA1NDA7XG4gdC5Ib3JpY29wdGljID0gMHgwM2U4O1xuIHQuSHNtYWxsID0gMHhmNzY4O1xuIHQuSHVuZ2FydW1sYXV0ID0gMHhmNmNmO1xuIHQuSHVuZ2FydW1sYXV0c21hbGwgPSAweGY2Zjg7XG4gdC5IenNxdWFyZSA9IDB4MzM5MDtcbiB0LkkgPSAweDAwNDk7XG4gdC5JQWN5cmlsbGljID0gMHgwNDJmO1xuIHQuSUogPSAweDAxMzI7XG4gdC5JVWN5cmlsbGljID0gMHgwNDJlO1xuIHQuSWFjdXRlID0gMHgwMGNkO1xuIHQuSWFjdXRlc21hbGwgPSAweGY3ZWQ7XG4gdC5JYnJldmUgPSAweDAxMmM7XG4gdC5JY2Fyb24gPSAweDAxY2Y7XG4gdC5JY2lyY2xlID0gMHgyNGJlO1xuIHQuSWNpcmN1bWZsZXggPSAweDAwY2U7XG4gdC5JY2lyY3VtZmxleHNtYWxsID0gMHhmN2VlO1xuIHQuSWN5cmlsbGljID0gMHgwNDA2O1xuIHQuSWRibGdyYXZlID0gMHgwMjA4O1xuIHQuSWRpZXJlc2lzID0gMHgwMGNmO1xuIHQuSWRpZXJlc2lzYWN1dGUgPSAweDFlMmU7XG4gdC5JZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlNDtcbiB0LklkaWVyZXNpc3NtYWxsID0gMHhmN2VmO1xuIHQuSWRvdCA9IDB4MDEzMDtcbiB0Lklkb3RhY2NlbnQgPSAweDAxMzA7XG4gdC5JZG90YmVsb3cgPSAweDFlY2E7XG4gdC5JZWJyZXZlY3lyaWxsaWMgPSAweDA0ZDY7XG4gdC5JZWN5cmlsbGljID0gMHgwNDE1O1xuIHQuSWZyYWt0dXIgPSAweDIxMTE7XG4gdC5JZ3JhdmUgPSAweDAwY2M7XG4gdC5JZ3JhdmVzbWFsbCA9IDB4ZjdlYztcbiB0Lklob29rYWJvdmUgPSAweDFlYzg7XG4gdC5JaWN5cmlsbGljID0gMHgwNDE4O1xuIHQuSWludmVydGVkYnJldmUgPSAweDAyMGE7XG4gdC5JaXNob3J0Y3lyaWxsaWMgPSAweDA0MTk7XG4gdC5JbWFjcm9uID0gMHgwMTJhO1xuIHQuSW1hY3JvbmN5cmlsbGljID0gMHgwNGUyO1xuIHQuSW1vbm9zcGFjZSA9IDB4ZmYyOTtcbiB0LkluaWFybWVuaWFuID0gMHgwNTNiO1xuIHQuSW9jeXJpbGxpYyA9IDB4MDQwMTtcbiB0LklvZ29uZWsgPSAweDAxMmU7XG4gdC5Jb3RhID0gMHgwMzk5O1xuIHQuSW90YWFmcmljYW4gPSAweDAxOTY7XG4gdC5Jb3RhZGllcmVzaXMgPSAweDAzYWE7XG4gdC5Jb3RhdG9ub3MgPSAweDAzOGE7XG4gdC5Jc21hbGwgPSAweGY3Njk7XG4gdC5Jc3Ryb2tlID0gMHgwMTk3O1xuIHQuSXRpbGRlID0gMHgwMTI4O1xuIHQuSXRpbGRlYmVsb3cgPSAweDFlMmM7XG4gdC5JemhpdHNhY3lyaWxsaWMgPSAweDA0NzQ7XG4gdC5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYyA9IDB4MDQ3NjtcbiB0LkogPSAweDAwNGE7XG4gdC5KYWFybWVuaWFuID0gMHgwNTQxO1xuIHQuSmNpcmNsZSA9IDB4MjRiZjtcbiB0LkpjaXJjdW1mbGV4ID0gMHgwMTM0O1xuIHQuSmVjeXJpbGxpYyA9IDB4MDQwODtcbiB0LkpoZWhhcm1lbmlhbiA9IDB4MDU0YjtcbiB0Lkptb25vc3BhY2UgPSAweGZmMmE7XG4gdC5Kc21hbGwgPSAweGY3NmE7XG4gdC5LID0gMHgwMDRiO1xuIHQuS0JzcXVhcmUgPSAweDMzODU7XG4gdC5LS3NxdWFyZSA9IDB4MzNjZDtcbiB0LkthYmFzaGtpcmN5cmlsbGljID0gMHgwNGEwO1xuIHQuS2FjdXRlID0gMHgxZTMwO1xuIHQuS2FjeXJpbGxpYyA9IDB4MDQxYTtcbiB0LkthZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OWE7XG4gdC5LYWhvb2tjeXJpbGxpYyA9IDB4MDRjMztcbiB0LkthcHBhID0gMHgwMzlhO1xuIHQuS2FzdHJva2VjeXJpbGxpYyA9IDB4MDQ5ZTtcbiB0LkthdmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDQ5YztcbiB0LktjYXJvbiA9IDB4MDFlODtcbiB0LktjZWRpbGxhID0gMHgwMTM2O1xuIHQuS2NpcmNsZSA9IDB4MjRjMDtcbiB0Lktjb21tYWFjY2VudCA9IDB4MDEzNjtcbiB0Lktkb3RiZWxvdyA9IDB4MWUzMjtcbiB0LktlaGFybWVuaWFuID0gMHgwNTU0O1xuIHQuS2VuYXJtZW5pYW4gPSAweDA1M2Y7XG4gdC5LaGFjeXJpbGxpYyA9IDB4MDQyNTtcbiB0LktoZWljb3B0aWMgPSAweDAzZTY7XG4gdC5LaG9vayA9IDB4MDE5ODtcbiB0LktqZWN5cmlsbGljID0gMHgwNDBjO1xuIHQuS2xpbmViZWxvdyA9IDB4MWUzNDtcbiB0Lkttb25vc3BhY2UgPSAweGZmMmI7XG4gdC5Lb3BwYWN5cmlsbGljID0gMHgwNDgwO1xuIHQuS29wcGFncmVlayA9IDB4MDNkZTtcbiB0LktzaWN5cmlsbGljID0gMHgwNDZlO1xuIHQuS3NtYWxsID0gMHhmNzZiO1xuIHQuTCA9IDB4MDA0YztcbiB0LkxKID0gMHgwMWM3O1xuIHQuTEwgPSAweGY2YmY7XG4gdC5MYWN1dGUgPSAweDAxMzk7XG4gdC5MYW1iZGEgPSAweDAzOWI7XG4gdC5MY2Fyb24gPSAweDAxM2Q7XG4gdC5MY2VkaWxsYSA9IDB4MDEzYjtcbiB0LkxjaXJjbGUgPSAweDI0YzE7XG4gdC5MY2lyY3VtZmxleGJlbG93ID0gMHgxZTNjO1xuIHQuTGNvbW1hYWNjZW50ID0gMHgwMTNiO1xuIHQuTGRvdCA9IDB4MDEzZjtcbiB0Lkxkb3RhY2NlbnQgPSAweDAxM2Y7XG4gdC5MZG90YmVsb3cgPSAweDFlMzY7XG4gdC5MZG90YmVsb3dtYWNyb24gPSAweDFlMzg7XG4gdC5MaXduYXJtZW5pYW4gPSAweDA1M2M7XG4gdC5MaiA9IDB4MDFjODtcbiB0LkxqZWN5cmlsbGljID0gMHgwNDA5O1xuIHQuTGxpbmViZWxvdyA9IDB4MWUzYTtcbiB0Lkxtb25vc3BhY2UgPSAweGZmMmM7XG4gdC5Mc2xhc2ggPSAweDAxNDE7XG4gdC5Mc2xhc2hzbWFsbCA9IDB4ZjZmOTtcbiB0LkxzbWFsbCA9IDB4Zjc2YztcbiB0Lk0gPSAweDAwNGQ7XG4gdC5NQnNxdWFyZSA9IDB4MzM4NjtcbiB0Lk1hY3JvbiA9IDB4ZjZkMDtcbiB0Lk1hY3JvbnNtYWxsID0gMHhmN2FmO1xuIHQuTWFjdXRlID0gMHgxZTNlO1xuIHQuTWNpcmNsZSA9IDB4MjRjMjtcbiB0Lk1kb3RhY2NlbnQgPSAweDFlNDA7XG4gdC5NZG90YmVsb3cgPSAweDFlNDI7XG4gdC5NZW5hcm1lbmlhbiA9IDB4MDU0NDtcbiB0Lk1tb25vc3BhY2UgPSAweGZmMmQ7XG4gdC5Nc21hbGwgPSAweGY3NmQ7XG4gdC5NdHVybmVkID0gMHgwMTljO1xuIHQuTXUgPSAweDAzOWM7XG4gdC5OID0gMHgwMDRlO1xuIHQuTkogPSAweDAxY2E7XG4gdC5OYWN1dGUgPSAweDAxNDM7XG4gdC5OY2Fyb24gPSAweDAxNDc7XG4gdC5OY2VkaWxsYSA9IDB4MDE0NTtcbiB0Lk5jaXJjbGUgPSAweDI0YzM7XG4gdC5OY2lyY3VtZmxleGJlbG93ID0gMHgxZTRhO1xuIHQuTmNvbW1hYWNjZW50ID0gMHgwMTQ1O1xuIHQuTmRvdGFjY2VudCA9IDB4MWU0NDtcbiB0Lk5kb3RiZWxvdyA9IDB4MWU0NjtcbiB0Lk5ob29rbGVmdCA9IDB4MDE5ZDtcbiB0Lk5pbmVyb21hbiA9IDB4MjE2ODtcbiB0Lk5qID0gMHgwMWNiO1xuIHQuTmplY3lyaWxsaWMgPSAweDA0MGE7XG4gdC5ObGluZWJlbG93ID0gMHgxZTQ4O1xuIHQuTm1vbm9zcGFjZSA9IDB4ZmYyZTtcbiB0Lk5vd2FybWVuaWFuID0gMHgwNTQ2O1xuIHQuTnNtYWxsID0gMHhmNzZlO1xuIHQuTnRpbGRlID0gMHgwMGQxO1xuIHQuTnRpbGRlc21hbGwgPSAweGY3ZjE7XG4gdC5OdSA9IDB4MDM5ZDtcbiB0Lk8gPSAweDAwNGY7XG4gdC5PRSA9IDB4MDE1MjtcbiB0Lk9Fc21hbGwgPSAweGY2ZmE7XG4gdC5PYWN1dGUgPSAweDAwZDM7XG4gdC5PYWN1dGVzbWFsbCA9IDB4ZjdmMztcbiB0Lk9iYXJyZWRjeXJpbGxpYyA9IDB4MDRlODtcbiB0Lk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljID0gMHgwNGVhO1xuIHQuT2JyZXZlID0gMHgwMTRlO1xuIHQuT2Nhcm9uID0gMHgwMWQxO1xuIHQuT2NlbnRlcmVkdGlsZGUgPSAweDAxOWY7XG4gdC5PY2lyY2xlID0gMHgyNGM0O1xuIHQuT2NpcmN1bWZsZXggPSAweDAwZDQ7XG4gdC5PY2lyY3VtZmxleGFjdXRlID0gMHgxZWQwO1xuIHQuT2NpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVkODtcbiB0Lk9jaXJjdW1mbGV4Z3JhdmUgPSAweDFlZDI7XG4gdC5PY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVkNDtcbiB0Lk9jaXJjdW1mbGV4c21hbGwgPSAweGY3ZjQ7XG4gdC5PY2lyY3VtZmxleHRpbGRlID0gMHgxZWQ2O1xuIHQuT2N5cmlsbGljID0gMHgwNDFlO1xuIHQuT2RibGFjdXRlID0gMHgwMTUwO1xuIHQuT2RibGdyYXZlID0gMHgwMjBjO1xuIHQuT2RpZXJlc2lzID0gMHgwMGQ2O1xuIHQuT2RpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZTY7XG4gdC5PZGllcmVzaXNzbWFsbCA9IDB4ZjdmNjtcbiB0Lk9kb3RiZWxvdyA9IDB4MWVjYztcbiB0Lk9nb25la3NtYWxsID0gMHhmNmZiO1xuIHQuT2dyYXZlID0gMHgwMGQyO1xuIHQuT2dyYXZlc21hbGwgPSAweGY3ZjI7XG4gdC5PaGFybWVuaWFuID0gMHgwNTU1O1xuIHQuT2htID0gMHgyMTI2O1xuIHQuT2hvb2thYm92ZSA9IDB4MWVjZTtcbiB0Lk9ob3JuID0gMHgwMWEwO1xuIHQuT2hvcm5hY3V0ZSA9IDB4MWVkYTtcbiB0Lk9ob3JuZG90YmVsb3cgPSAweDFlZTI7XG4gdC5PaG9ybmdyYXZlID0gMHgxZWRjO1xuIHQuT2hvcm5ob29rYWJvdmUgPSAweDFlZGU7XG4gdC5PaG9ybnRpbGRlID0gMHgxZWUwO1xuIHQuT2h1bmdhcnVtbGF1dCA9IDB4MDE1MDtcbiB0Lk9pID0gMHgwMWEyO1xuIHQuT2ludmVydGVkYnJldmUgPSAweDAyMGU7XG4gdC5PbWFjcm9uID0gMHgwMTRjO1xuIHQuT21hY3JvbmFjdXRlID0gMHgxZTUyO1xuIHQuT21hY3JvbmdyYXZlID0gMHgxZTUwO1xuIHQuT21lZ2EgPSAweDIxMjY7XG4gdC5PbWVnYWN5cmlsbGljID0gMHgwNDYwO1xuIHQuT21lZ2FncmVlayA9IDB4MDNhOTtcbiB0Lk9tZWdhcm91bmRjeXJpbGxpYyA9IDB4MDQ3YTtcbiB0Lk9tZWdhdGl0bG9jeXJpbGxpYyA9IDB4MDQ3YztcbiB0Lk9tZWdhdG9ub3MgPSAweDAzOGY7XG4gdC5PbWljcm9uID0gMHgwMzlmO1xuIHQuT21pY3JvbnRvbm9zID0gMHgwMzhjO1xuIHQuT21vbm9zcGFjZSA9IDB4ZmYyZjtcbiB0Lk9uZXJvbWFuID0gMHgyMTYwO1xuIHQuT29nb25layA9IDB4MDFlYTtcbiB0Lk9vZ29uZWttYWNyb24gPSAweDAxZWM7XG4gdC5Pb3BlbiA9IDB4MDE4NjtcbiB0Lk9zbGFzaCA9IDB4MDBkODtcbiB0Lk9zbGFzaGFjdXRlID0gMHgwMWZlO1xuIHQuT3NsYXNoc21hbGwgPSAweGY3Zjg7XG4gdC5Pc21hbGwgPSAweGY3NmY7XG4gdC5Pc3Ryb2tlYWN1dGUgPSAweDAxZmU7XG4gdC5PdGN5cmlsbGljID0gMHgwNDdlO1xuIHQuT3RpbGRlID0gMHgwMGQ1O1xuIHQuT3RpbGRlYWN1dGUgPSAweDFlNGM7XG4gdC5PdGlsZGVkaWVyZXNpcyA9IDB4MWU0ZTtcbiB0Lk90aWxkZXNtYWxsID0gMHhmN2Y1O1xuIHQuUCA9IDB4MDA1MDtcbiB0LlBhY3V0ZSA9IDB4MWU1NDtcbiB0LlBjaXJjbGUgPSAweDI0YzU7XG4gdC5QZG90YWNjZW50ID0gMHgxZTU2O1xuIHQuUGVjeXJpbGxpYyA9IDB4MDQxZjtcbiB0LlBlaGFybWVuaWFuID0gMHgwNTRhO1xuIHQuUGVtaWRkbGVob29rY3lyaWxsaWMgPSAweDA0YTY7XG4gdC5QaGkgPSAweDAzYTY7XG4gdC5QaG9vayA9IDB4MDFhNDtcbiB0LlBpID0gMHgwM2EwO1xuIHQuUGl3cmFybWVuaWFuID0gMHgwNTUzO1xuIHQuUG1vbm9zcGFjZSA9IDB4ZmYzMDtcbiB0LlBzaSA9IDB4MDNhODtcbiB0LlBzaWN5cmlsbGljID0gMHgwNDcwO1xuIHQuUHNtYWxsID0gMHhmNzcwO1xuIHQuUSA9IDB4MDA1MTtcbiB0LlFjaXJjbGUgPSAweDI0YzY7XG4gdC5RbW9ub3NwYWNlID0gMHhmZjMxO1xuIHQuUXNtYWxsID0gMHhmNzcxO1xuIHQuUiA9IDB4MDA1MjtcbiB0LlJhYXJtZW5pYW4gPSAweDA1NGM7XG4gdC5SYWN1dGUgPSAweDAxNTQ7XG4gdC5SY2Fyb24gPSAweDAxNTg7XG4gdC5SY2VkaWxsYSA9IDB4MDE1NjtcbiB0LlJjaXJjbGUgPSAweDI0Yzc7XG4gdC5SY29tbWFhY2NlbnQgPSAweDAxNTY7XG4gdC5SZGJsZ3JhdmUgPSAweDAyMTA7XG4gdC5SZG90YWNjZW50ID0gMHgxZTU4O1xuIHQuUmRvdGJlbG93ID0gMHgxZTVhO1xuIHQuUmRvdGJlbG93bWFjcm9uID0gMHgxZTVjO1xuIHQuUmVoYXJtZW5pYW4gPSAweDA1NTA7XG4gdC5SZnJha3R1ciA9IDB4MjExYztcbiB0LlJobyA9IDB4MDNhMTtcbiB0LlJpbmdzbWFsbCA9IDB4ZjZmYztcbiB0LlJpbnZlcnRlZGJyZXZlID0gMHgwMjEyO1xuIHQuUmxpbmViZWxvdyA9IDB4MWU1ZTtcbiB0LlJtb25vc3BhY2UgPSAweGZmMzI7XG4gdC5Sc21hbGwgPSAweGY3NzI7XG4gdC5Sc21hbGxpbnZlcnRlZCA9IDB4MDI4MTtcbiB0LlJzbWFsbGludmVydGVkc3VwZXJpb3IgPSAweDAyYjY7XG4gdC5TID0gMHgwMDUzO1xuIHQuU0YwMTAwMDAgPSAweDI1MGM7XG4gdC5TRjAyMDAwMCA9IDB4MjUxNDtcbiB0LlNGMDMwMDAwID0gMHgyNTEwO1xuIHQuU0YwNDAwMDAgPSAweDI1MTg7XG4gdC5TRjA1MDAwMCA9IDB4MjUzYztcbiB0LlNGMDYwMDAwID0gMHgyNTJjO1xuIHQuU0YwNzAwMDAgPSAweDI1MzQ7XG4gdC5TRjA4MDAwMCA9IDB4MjUxYztcbiB0LlNGMDkwMDAwID0gMHgyNTI0O1xuIHQuU0YxMDAwMDAgPSAweDI1MDA7XG4gdC5TRjExMDAwMCA9IDB4MjUwMjtcbiB0LlNGMTkwMDAwID0gMHgyNTYxO1xuIHQuU0YyMDAwMDAgPSAweDI1NjI7XG4gdC5TRjIxMDAwMCA9IDB4MjU1NjtcbiB0LlNGMjIwMDAwID0gMHgyNTU1O1xuIHQuU0YyMzAwMDAgPSAweDI1NjM7XG4gdC5TRjI0MDAwMCA9IDB4MjU1MTtcbiB0LlNGMjUwMDAwID0gMHgyNTU3O1xuIHQuU0YyNjAwMDAgPSAweDI1NWQ7XG4gdC5TRjI3MDAwMCA9IDB4MjU1YztcbiB0LlNGMjgwMDAwID0gMHgyNTViO1xuIHQuU0YzNjAwMDAgPSAweDI1NWU7XG4gdC5TRjM3MDAwMCA9IDB4MjU1ZjtcbiB0LlNGMzgwMDAwID0gMHgyNTVhO1xuIHQuU0YzOTAwMDAgPSAweDI1NTQ7XG4gdC5TRjQwMDAwMCA9IDB4MjU2OTtcbiB0LlNGNDEwMDAwID0gMHgyNTY2O1xuIHQuU0Y0MjAwMDAgPSAweDI1NjA7XG4gdC5TRjQzMDAwMCA9IDB4MjU1MDtcbiB0LlNGNDQwMDAwID0gMHgyNTZjO1xuIHQuU0Y0NTAwMDAgPSAweDI1Njc7XG4gdC5TRjQ2MDAwMCA9IDB4MjU2ODtcbiB0LlNGNDcwMDAwID0gMHgyNTY0O1xuIHQuU0Y0ODAwMDAgPSAweDI1NjU7XG4gdC5TRjQ5MDAwMCA9IDB4MjU1OTtcbiB0LlNGNTAwMDAwID0gMHgyNTU4O1xuIHQuU0Y1MTAwMDAgPSAweDI1NTI7XG4gdC5TRjUyMDAwMCA9IDB4MjU1MztcbiB0LlNGNTMwMDAwID0gMHgyNTZiO1xuIHQuU0Y1NDAwMDAgPSAweDI1NmE7XG4gdC5TYWN1dGUgPSAweDAxNWE7XG4gdC5TYWN1dGVkb3RhY2NlbnQgPSAweDFlNjQ7XG4gdC5TYW1waWdyZWVrID0gMHgwM2UwO1xuIHQuU2Nhcm9uID0gMHgwMTYwO1xuIHQuU2Nhcm9uZG90YWNjZW50ID0gMHgxZTY2O1xuIHQuU2Nhcm9uc21hbGwgPSAweGY2ZmQ7XG4gdC5TY2VkaWxsYSA9IDB4MDE1ZTtcbiB0LlNjaHdhID0gMHgwMThmO1xuIHQuU2Nod2FjeXJpbGxpYyA9IDB4MDRkODtcbiB0LlNjaHdhZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRkYTtcbiB0LlNjaXJjbGUgPSAweDI0Yzg7XG4gdC5TY2lyY3VtZmxleCA9IDB4MDE1YztcbiB0LlNjb21tYWFjY2VudCA9IDB4MDIxODtcbiB0LlNkb3RhY2NlbnQgPSAweDFlNjA7XG4gdC5TZG90YmVsb3cgPSAweDFlNjI7XG4gdC5TZG90YmVsb3dkb3RhY2NlbnQgPSAweDFlNjg7XG4gdC5TZWhhcm1lbmlhbiA9IDB4MDU0ZDtcbiB0LlNldmVucm9tYW4gPSAweDIxNjY7XG4gdC5TaGFhcm1lbmlhbiA9IDB4MDU0NztcbiB0LlNoYWN5cmlsbGljID0gMHgwNDI4O1xuIHQuU2hjaGFjeXJpbGxpYyA9IDB4MDQyOTtcbiB0LlNoZWljb3B0aWMgPSAweDAzZTI7XG4gdC5TaGhhY3lyaWxsaWMgPSAweDA0YmE7XG4gdC5TaGltYWNvcHRpYyA9IDB4MDNlYztcbiB0LlNpZ21hID0gMHgwM2EzO1xuIHQuU2l4cm9tYW4gPSAweDIxNjU7XG4gdC5TbW9ub3NwYWNlID0gMHhmZjMzO1xuIHQuU29mdHNpZ25jeXJpbGxpYyA9IDB4MDQyYztcbiB0LlNzbWFsbCA9IDB4Zjc3MztcbiB0LlN0aWdtYWdyZWVrID0gMHgwM2RhO1xuIHQuVCA9IDB4MDA1NDtcbiB0LlRhdSA9IDB4MDNhNDtcbiB0LlRiYXIgPSAweDAxNjY7XG4gdC5UY2Fyb24gPSAweDAxNjQ7XG4gdC5UY2VkaWxsYSA9IDB4MDE2MjtcbiB0LlRjaXJjbGUgPSAweDI0Yzk7XG4gdC5UY2lyY3VtZmxleGJlbG93ID0gMHgxZTcwO1xuIHQuVGNvbW1hYWNjZW50ID0gMHgwMTYyO1xuIHQuVGRvdGFjY2VudCA9IDB4MWU2YTtcbiB0LlRkb3RiZWxvdyA9IDB4MWU2YztcbiB0LlRlY3lyaWxsaWMgPSAweDA0MjI7XG4gdC5UZWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGFjO1xuIHQuVGVucm9tYW4gPSAweDIxNjk7XG4gdC5UZXRzZWN5cmlsbGljID0gMHgwNGI0O1xuIHQuVGhldGEgPSAweDAzOTg7XG4gdC5UaG9vayA9IDB4MDFhYztcbiB0LlRob3JuID0gMHgwMGRlO1xuIHQuVGhvcm5zbWFsbCA9IDB4ZjdmZTtcbiB0LlRocmVlcm9tYW4gPSAweDIxNjI7XG4gdC5UaWxkZXNtYWxsID0gMHhmNmZlO1xuIHQuVGl3bmFybWVuaWFuID0gMHgwNTRmO1xuIHQuVGxpbmViZWxvdyA9IDB4MWU2ZTtcbiB0LlRtb25vc3BhY2UgPSAweGZmMzQ7XG4gdC5Ub2FybWVuaWFuID0gMHgwNTM5O1xuIHQuVG9uZWZpdmUgPSAweDAxYmM7XG4gdC5Ub25lc2l4ID0gMHgwMTg0O1xuIHQuVG9uZXR3byA9IDB4MDFhNztcbiB0LlRyZXRyb2ZsZXhob29rID0gMHgwMWFlO1xuIHQuVHNlY3lyaWxsaWMgPSAweDA0MjY7XG4gdC5Uc2hlY3lyaWxsaWMgPSAweDA0MGI7XG4gdC5Uc21hbGwgPSAweGY3NzQ7XG4gdC5Ud2VsdmVyb21hbiA9IDB4MjE2YjtcbiB0LlR3b3JvbWFuID0gMHgyMTYxO1xuIHQuVSA9IDB4MDA1NTtcbiB0LlVhY3V0ZSA9IDB4MDBkYTtcbiB0LlVhY3V0ZXNtYWxsID0gMHhmN2ZhO1xuIHQuVWJyZXZlID0gMHgwMTZjO1xuIHQuVWNhcm9uID0gMHgwMWQzO1xuIHQuVWNpcmNsZSA9IDB4MjRjYTtcbiB0LlVjaXJjdW1mbGV4ID0gMHgwMGRiO1xuIHQuVWNpcmN1bWZsZXhiZWxvdyA9IDB4MWU3NjtcbiB0LlVjaXJjdW1mbGV4c21hbGwgPSAweGY3ZmI7XG4gdC5VY3lyaWxsaWMgPSAweDA0MjM7XG4gdC5VZGJsYWN1dGUgPSAweDAxNzA7XG4gdC5VZGJsZ3JhdmUgPSAweDAyMTQ7XG4gdC5VZGllcmVzaXMgPSAweDAwZGM7XG4gdC5VZGllcmVzaXNhY3V0ZSA9IDB4MDFkNztcbiB0LlVkaWVyZXNpc2JlbG93ID0gMHgxZTcyO1xuIHQuVWRpZXJlc2lzY2Fyb24gPSAweDAxZDk7XG4gdC5VZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmMDtcbiB0LlVkaWVyZXNpc2dyYXZlID0gMHgwMWRiO1xuIHQuVWRpZXJlc2lzbWFjcm9uID0gMHgwMWQ1O1xuIHQuVWRpZXJlc2lzc21hbGwgPSAweGY3ZmM7XG4gdC5VZG90YmVsb3cgPSAweDFlZTQ7XG4gdC5VZ3JhdmUgPSAweDAwZDk7XG4gdC5VZ3JhdmVzbWFsbCA9IDB4ZjdmOTtcbiB0LlVob29rYWJvdmUgPSAweDFlZTY7XG4gdC5VaG9ybiA9IDB4MDFhZjtcbiB0LlVob3JuYWN1dGUgPSAweDFlZTg7XG4gdC5VaG9ybmRvdGJlbG93ID0gMHgxZWYwO1xuIHQuVWhvcm5ncmF2ZSA9IDB4MWVlYTtcbiB0LlVob3JuaG9va2Fib3ZlID0gMHgxZWVjO1xuIHQuVWhvcm50aWxkZSA9IDB4MWVlZTtcbiB0LlVodW5nYXJ1bWxhdXQgPSAweDAxNzA7XG4gdC5VaHVuZ2FydW1sYXV0Y3lyaWxsaWMgPSAweDA0ZjI7XG4gdC5VaW52ZXJ0ZWRicmV2ZSA9IDB4MDIxNjtcbiB0LlVrY3lyaWxsaWMgPSAweDA0Nzg7XG4gdC5VbWFjcm9uID0gMHgwMTZhO1xuIHQuVW1hY3JvbmN5cmlsbGljID0gMHgwNGVlO1xuIHQuVW1hY3JvbmRpZXJlc2lzID0gMHgxZTdhO1xuIHQuVW1vbm9zcGFjZSA9IDB4ZmYzNTtcbiB0LlVvZ29uZWsgPSAweDAxNzI7XG4gdC5VcHNpbG9uID0gMHgwM2E1O1xuIHQuVXBzaWxvbjEgPSAweDAzZDI7XG4gdC5VcHNpbG9uYWN1dGVob29rc3ltYm9sZ3JlZWsgPSAweDAzZDM7XG4gdC5VcHNpbG9uYWZyaWNhbiA9IDB4MDFiMTtcbiB0LlVwc2lsb25kaWVyZXNpcyA9IDB4MDNhYjtcbiB0LlVwc2lsb25kaWVyZXNpc2hvb2tzeW1ib2xncmVlayA9IDB4MDNkNDtcbiB0LlVwc2lsb25ob29rc3ltYm9sID0gMHgwM2QyO1xuIHQuVXBzaWxvbnRvbm9zID0gMHgwMzhlO1xuIHQuVXJpbmcgPSAweDAxNmU7XG4gdC5Vc2hvcnRjeXJpbGxpYyA9IDB4MDQwZTtcbiB0LlVzbWFsbCA9IDB4Zjc3NTtcbiB0LlVzdHJhaWdodGN5cmlsbGljID0gMHgwNGFlO1xuIHQuVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMgPSAweDA0YjA7XG4gdC5VdGlsZGUgPSAweDAxNjg7XG4gdC5VdGlsZGVhY3V0ZSA9IDB4MWU3ODtcbiB0LlV0aWxkZWJlbG93ID0gMHgxZTc0O1xuIHQuViA9IDB4MDA1NjtcbiB0LlZjaXJjbGUgPSAweDI0Y2I7XG4gdC5WZG90YmVsb3cgPSAweDFlN2U7XG4gdC5WZWN5cmlsbGljID0gMHgwNDEyO1xuIHQuVmV3YXJtZW5pYW4gPSAweDA1NGU7XG4gdC5WaG9vayA9IDB4MDFiMjtcbiB0LlZtb25vc3BhY2UgPSAweGZmMzY7XG4gdC5Wb2FybWVuaWFuID0gMHgwNTQ4O1xuIHQuVnNtYWxsID0gMHhmNzc2O1xuIHQuVnRpbGRlID0gMHgxZTdjO1xuIHQuVyA9IDB4MDA1NztcbiB0LldhY3V0ZSA9IDB4MWU4MjtcbiB0LldjaXJjbGUgPSAweDI0Y2M7XG4gdC5XY2lyY3VtZmxleCA9IDB4MDE3NDtcbiB0LldkaWVyZXNpcyA9IDB4MWU4NDtcbiB0Lldkb3RhY2NlbnQgPSAweDFlODY7XG4gdC5XZG90YmVsb3cgPSAweDFlODg7XG4gdC5XZ3JhdmUgPSAweDFlODA7XG4gdC5XbW9ub3NwYWNlID0gMHhmZjM3O1xuIHQuV3NtYWxsID0gMHhmNzc3O1xuIHQuWCA9IDB4MDA1ODtcbiB0LlhjaXJjbGUgPSAweDI0Y2Q7XG4gdC5YZGllcmVzaXMgPSAweDFlOGM7XG4gdC5YZG90YWNjZW50ID0gMHgxZThhO1xuIHQuWGVoYXJtZW5pYW4gPSAweDA1M2Q7XG4gdC5YaSA9IDB4MDM5ZTtcbiB0Llhtb25vc3BhY2UgPSAweGZmMzg7XG4gdC5Yc21hbGwgPSAweGY3Nzg7XG4gdC5ZID0gMHgwMDU5O1xuIHQuWWFjdXRlID0gMHgwMGRkO1xuIHQuWWFjdXRlc21hbGwgPSAweGY3ZmQ7XG4gdC5ZYXRjeXJpbGxpYyA9IDB4MDQ2MjtcbiB0LlljaXJjbGUgPSAweDI0Y2U7XG4gdC5ZY2lyY3VtZmxleCA9IDB4MDE3NjtcbiB0LllkaWVyZXNpcyA9IDB4MDE3ODtcbiB0LllkaWVyZXNpc3NtYWxsID0gMHhmN2ZmO1xuIHQuWWRvdGFjY2VudCA9IDB4MWU4ZTtcbiB0Lllkb3RiZWxvdyA9IDB4MWVmNDtcbiB0LlllcmljeXJpbGxpYyA9IDB4MDQyYjtcbiB0LlllcnVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGY4O1xuIHQuWWdyYXZlID0gMHgxZWYyO1xuIHQuWWhvb2sgPSAweDAxYjM7XG4gdC5ZaG9va2Fib3ZlID0gMHgxZWY2O1xuIHQuWWlhcm1lbmlhbiA9IDB4MDU0NTtcbiB0LllpY3lyaWxsaWMgPSAweDA0MDc7XG4gdC5ZaXduYXJtZW5pYW4gPSAweDA1NTI7XG4gdC5ZbW9ub3NwYWNlID0gMHhmZjM5O1xuIHQuWXNtYWxsID0gMHhmNzc5O1xuIHQuWXRpbGRlID0gMHgxZWY4O1xuIHQuWXVzYmlnY3lyaWxsaWMgPSAweDA0NmE7XG4gdC5ZdXNiaWdpb3RpZmllZGN5cmlsbGljID0gMHgwNDZjO1xuIHQuWXVzbGl0dGxlY3lyaWxsaWMgPSAweDA0NjY7XG4gdC5ZdXNsaXR0bGVpb3RpZmllZGN5cmlsbGljID0gMHgwNDY4O1xuIHQuWiA9IDB4MDA1YTtcbiB0LlphYXJtZW5pYW4gPSAweDA1MzY7XG4gdC5aYWN1dGUgPSAweDAxNzk7XG4gdC5aY2Fyb24gPSAweDAxN2Q7XG4gdC5aY2Fyb25zbWFsbCA9IDB4ZjZmZjtcbiB0LlpjaXJjbGUgPSAweDI0Y2Y7XG4gdC5aY2lyY3VtZmxleCA9IDB4MWU5MDtcbiB0Llpkb3QgPSAweDAxN2I7XG4gdC5aZG90YWNjZW50ID0gMHgwMTdiO1xuIHQuWmRvdGJlbG93ID0gMHgxZTkyO1xuIHQuWmVjeXJpbGxpYyA9IDB4MDQxNztcbiB0LlplZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OTg7XG4gdC5aZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGU7XG4gdC5aZXRhID0gMHgwMzk2O1xuIHQuWmhlYXJtZW5pYW4gPSAweDA1M2E7XG4gdC5aaGVicmV2ZWN5cmlsbGljID0gMHgwNGMxO1xuIHQuWmhlY3lyaWxsaWMgPSAweDA0MTY7XG4gdC5aaGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5NjtcbiB0LlpoZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGM7XG4gdC5abGluZWJlbG93ID0gMHgxZTk0O1xuIHQuWm1vbm9zcGFjZSA9IDB4ZmYzYTtcbiB0LlpzbWFsbCA9IDB4Zjc3YTtcbiB0LlpzdHJva2UgPSAweDAxYjU7XG4gdC5hID0gMHgwMDYxO1xuIHQuYWFiZW5nYWxpID0gMHgwOTg2O1xuIHQuYWFjdXRlID0gMHgwMGUxO1xuIHQuYWFkZXZhID0gMHgwOTA2O1xuIHQuYWFndWphcmF0aSA9IDB4MGE4NjtcbiB0LmFhZ3VybXVraGkgPSAweDBhMDY7XG4gdC5hYW1hdHJhZ3VybXVraGkgPSAweDBhM2U7XG4gdC5hYXJ1c3F1YXJlID0gMHgzMzAzO1xuIHQuYWF2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWJlO1xuIHQuYWF2b3dlbHNpZ25kZXZhID0gMHgwOTNlO1xuIHQuYWF2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFiZTtcbiB0LmFiYnJldmlhdGlvbm1hcmthcm1lbmlhbiA9IDB4MDU1ZjtcbiB0LmFiYnJldmlhdGlvbnNpZ25kZXZhID0gMHgwOTcwO1xuIHQuYWJlbmdhbGkgPSAweDA5ODU7XG4gdC5hYm9wb21vZm8gPSAweDMxMWE7XG4gdC5hYnJldmUgPSAweDAxMDM7XG4gdC5hYnJldmVhY3V0ZSA9IDB4MWVhZjtcbiB0LmFicmV2ZWN5cmlsbGljID0gMHgwNGQxO1xuIHQuYWJyZXZlZG90YmVsb3cgPSAweDFlYjc7XG4gdC5hYnJldmVncmF2ZSA9IDB4MWViMTtcbiB0LmFicmV2ZWhvb2thYm92ZSA9IDB4MWViMztcbiB0LmFicmV2ZXRpbGRlID0gMHgxZWI1O1xuIHQuYWNhcm9uID0gMHgwMWNlO1xuIHQuYWNpcmNsZSA9IDB4MjRkMDtcbiB0LmFjaXJjdW1mbGV4ID0gMHgwMGUyO1xuIHQuYWNpcmN1bWZsZXhhY3V0ZSA9IDB4MWVhNTtcbiB0LmFjaXJjdW1mbGV4ZG90YmVsb3cgPSAweDFlYWQ7XG4gdC5hY2lyY3VtZmxleGdyYXZlID0gMHgxZWE3O1xuIHQuYWNpcmN1bWZsZXhob29rYWJvdmUgPSAweDFlYTk7XG4gdC5hY2lyY3VtZmxleHRpbGRlID0gMHgxZWFiO1xuIHQuYWN1dGUgPSAweDAwYjQ7XG4gdC5hY3V0ZWJlbG93Y21iID0gMHgwMzE3O1xuIHQuYWN1dGVjbWIgPSAweDAzMDE7XG4gdC5hY3V0ZWNvbWIgPSAweDAzMDE7XG4gdC5hY3V0ZWRldmEgPSAweDA5NTQ7XG4gdC5hY3V0ZWxvd21vZCA9IDB4MDJjZjtcbiB0LmFjdXRldG9uZWNtYiA9IDB4MDM0MTtcbiB0LmFjeXJpbGxpYyA9IDB4MDQzMDtcbiB0LmFkYmxncmF2ZSA9IDB4MDIwMTtcbiB0LmFkZGFrZ3VybXVraGkgPSAweDBhNzE7XG4gdC5hZGV2YSA9IDB4MDkwNTtcbiB0LmFkaWVyZXNpcyA9IDB4MDBlNDtcbiB0LmFkaWVyZXNpc2N5cmlsbGljID0gMHgwNGQzO1xuIHQuYWRpZXJlc2lzbWFjcm9uID0gMHgwMWRmO1xuIHQuYWRvdGJlbG93ID0gMHgxZWExO1xuIHQuYWRvdG1hY3JvbiA9IDB4MDFlMTtcbiB0LmFlID0gMHgwMGU2O1xuIHQuYWVhY3V0ZSA9IDB4MDFmZDtcbiB0LmFla29yZWFuID0gMHgzMTUwO1xuIHQuYWVtYWNyb24gPSAweDAxZTM7XG4gdC5hZmlpMDAyMDggPSAweDIwMTU7XG4gdC5hZmlpMDg5NDEgPSAweDIwYTQ7XG4gdC5hZmlpMTAwMTcgPSAweDA0MTA7XG4gdC5hZmlpMTAwMTggPSAweDA0MTE7XG4gdC5hZmlpMTAwMTkgPSAweDA0MTI7XG4gdC5hZmlpMTAwMjAgPSAweDA0MTM7XG4gdC5hZmlpMTAwMjEgPSAweDA0MTQ7XG4gdC5hZmlpMTAwMjIgPSAweDA0MTU7XG4gdC5hZmlpMTAwMjMgPSAweDA0MDE7XG4gdC5hZmlpMTAwMjQgPSAweDA0MTY7XG4gdC5hZmlpMTAwMjUgPSAweDA0MTc7XG4gdC5hZmlpMTAwMjYgPSAweDA0MTg7XG4gdC5hZmlpMTAwMjcgPSAweDA0MTk7XG4gdC5hZmlpMTAwMjggPSAweDA0MWE7XG4gdC5hZmlpMTAwMjkgPSAweDA0MWI7XG4gdC5hZmlpMTAwMzAgPSAweDA0MWM7XG4gdC5hZmlpMTAwMzEgPSAweDA0MWQ7XG4gdC5hZmlpMTAwMzIgPSAweDA0MWU7XG4gdC5hZmlpMTAwMzMgPSAweDA0MWY7XG4gdC5hZmlpMTAwMzQgPSAweDA0MjA7XG4gdC5hZmlpMTAwMzUgPSAweDA0MjE7XG4gdC5hZmlpMTAwMzYgPSAweDA0MjI7XG4gdC5hZmlpMTAwMzcgPSAweDA0MjM7XG4gdC5hZmlpMTAwMzggPSAweDA0MjQ7XG4gdC5hZmlpMTAwMzkgPSAweDA0MjU7XG4gdC5hZmlpMTAwNDAgPSAweDA0MjY7XG4gdC5hZmlpMTAwNDEgPSAweDA0Mjc7XG4gdC5hZmlpMTAwNDIgPSAweDA0Mjg7XG4gdC5hZmlpMTAwNDMgPSAweDA0Mjk7XG4gdC5hZmlpMTAwNDQgPSAweDA0MmE7XG4gdC5hZmlpMTAwNDUgPSAweDA0MmI7XG4gdC5hZmlpMTAwNDYgPSAweDA0MmM7XG4gdC5hZmlpMTAwNDcgPSAweDA0MmQ7XG4gdC5hZmlpMTAwNDggPSAweDA0MmU7XG4gdC5hZmlpMTAwNDkgPSAweDA0MmY7XG4gdC5hZmlpMTAwNTAgPSAweDA0OTA7XG4gdC5hZmlpMTAwNTEgPSAweDA0MDI7XG4gdC5hZmlpMTAwNTIgPSAweDA0MDM7XG4gdC5hZmlpMTAwNTMgPSAweDA0MDQ7XG4gdC5hZmlpMTAwNTQgPSAweDA0MDU7XG4gdC5hZmlpMTAwNTUgPSAweDA0MDY7XG4gdC5hZmlpMTAwNTYgPSAweDA0MDc7XG4gdC5hZmlpMTAwNTcgPSAweDA0MDg7XG4gdC5hZmlpMTAwNTggPSAweDA0MDk7XG4gdC5hZmlpMTAwNTkgPSAweDA0MGE7XG4gdC5hZmlpMTAwNjAgPSAweDA0MGI7XG4gdC5hZmlpMTAwNjEgPSAweDA0MGM7XG4gdC5hZmlpMTAwNjIgPSAweDA0MGU7XG4gdC5hZmlpMTAwNjMgPSAweGY2YzQ7XG4gdC5hZmlpMTAwNjQgPSAweGY2YzU7XG4gdC5hZmlpMTAwNjUgPSAweDA0MzA7XG4gdC5hZmlpMTAwNjYgPSAweDA0MzE7XG4gdC5hZmlpMTAwNjcgPSAweDA0MzI7XG4gdC5hZmlpMTAwNjggPSAweDA0MzM7XG4gdC5hZmlpMTAwNjkgPSAweDA0MzQ7XG4gdC5hZmlpMTAwNzAgPSAweDA0MzU7XG4gdC5hZmlpMTAwNzEgPSAweDA0NTE7XG4gdC5hZmlpMTAwNzIgPSAweDA0MzY7XG4gdC5hZmlpMTAwNzMgPSAweDA0Mzc7XG4gdC5hZmlpMTAwNzQgPSAweDA0Mzg7XG4gdC5hZmlpMTAwNzUgPSAweDA0Mzk7XG4gdC5hZmlpMTAwNzYgPSAweDA0M2E7XG4gdC5hZmlpMTAwNzcgPSAweDA0M2I7XG4gdC5hZmlpMTAwNzggPSAweDA0M2M7XG4gdC5hZmlpMTAwNzkgPSAweDA0M2Q7XG4gdC5hZmlpMTAwODAgPSAweDA0M2U7XG4gdC5hZmlpMTAwODEgPSAweDA0M2Y7XG4gdC5hZmlpMTAwODIgPSAweDA0NDA7XG4gdC5hZmlpMTAwODMgPSAweDA0NDE7XG4gdC5hZmlpMTAwODQgPSAweDA0NDI7XG4gdC5hZmlpMTAwODUgPSAweDA0NDM7XG4gdC5hZmlpMTAwODYgPSAweDA0NDQ7XG4gdC5hZmlpMTAwODcgPSAweDA0NDU7XG4gdC5hZmlpMTAwODggPSAweDA0NDY7XG4gdC5hZmlpMTAwODkgPSAweDA0NDc7XG4gdC5hZmlpMTAwOTAgPSAweDA0NDg7XG4gdC5hZmlpMTAwOTEgPSAweDA0NDk7XG4gdC5hZmlpMTAwOTIgPSAweDA0NGE7XG4gdC5hZmlpMTAwOTMgPSAweDA0NGI7XG4gdC5hZmlpMTAwOTQgPSAweDA0NGM7XG4gdC5hZmlpMTAwOTUgPSAweDA0NGQ7XG4gdC5hZmlpMTAwOTYgPSAweDA0NGU7XG4gdC5hZmlpMTAwOTcgPSAweDA0NGY7XG4gdC5hZmlpMTAwOTggPSAweDA0OTE7XG4gdC5hZmlpMTAwOTkgPSAweDA0NTI7XG4gdC5hZmlpMTAxMDAgPSAweDA0NTM7XG4gdC5hZmlpMTAxMDEgPSAweDA0NTQ7XG4gdC5hZmlpMTAxMDIgPSAweDA0NTU7XG4gdC5hZmlpMTAxMDMgPSAweDA0NTY7XG4gdC5hZmlpMTAxMDQgPSAweDA0NTc7XG4gdC5hZmlpMTAxMDUgPSAweDA0NTg7XG4gdC5hZmlpMTAxMDYgPSAweDA0NTk7XG4gdC5hZmlpMTAxMDcgPSAweDA0NWE7XG4gdC5hZmlpMTAxMDggPSAweDA0NWI7XG4gdC5hZmlpMTAxMDkgPSAweDA0NWM7XG4gdC5hZmlpMTAxMTAgPSAweDA0NWU7XG4gdC5hZmlpMTAxNDUgPSAweDA0MGY7XG4gdC5hZmlpMTAxNDYgPSAweDA0NjI7XG4gdC5hZmlpMTAxNDcgPSAweDA0NzI7XG4gdC5hZmlpMTAxNDggPSAweDA0NzQ7XG4gdC5hZmlpMTAxOTIgPSAweGY2YzY7XG4gdC5hZmlpMTAxOTMgPSAweDA0NWY7XG4gdC5hZmlpMTAxOTQgPSAweDA0NjM7XG4gdC5hZmlpMTAxOTUgPSAweDA0NzM7XG4gdC5hZmlpMTAxOTYgPSAweDA0NzU7XG4gdC5hZmlpMTA4MzEgPSAweGY2Yzc7XG4gdC5hZmlpMTA4MzIgPSAweGY2Yzg7XG4gdC5hZmlpMTA4NDYgPSAweDA0ZDk7XG4gdC5hZmlpMjk5ID0gMHgyMDBlO1xuIHQuYWZpaTMwMCA9IDB4MjAwZjtcbiB0LmFmaWkzMDEgPSAweDIwMGQ7XG4gdC5hZmlpNTczODEgPSAweDA2NmE7XG4gdC5hZmlpNTczODggPSAweDA2MGM7XG4gdC5hZmlpNTczOTIgPSAweDA2NjA7XG4gdC5hZmlpNTczOTMgPSAweDA2NjE7XG4gdC5hZmlpNTczOTQgPSAweDA2NjI7XG4gdC5hZmlpNTczOTUgPSAweDA2NjM7XG4gdC5hZmlpNTczOTYgPSAweDA2NjQ7XG4gdC5hZmlpNTczOTcgPSAweDA2NjU7XG4gdC5hZmlpNTczOTggPSAweDA2NjY7XG4gdC5hZmlpNTczOTkgPSAweDA2Njc7XG4gdC5hZmlpNTc0MDAgPSAweDA2Njg7XG4gdC5hZmlpNTc0MDEgPSAweDA2Njk7XG4gdC5hZmlpNTc0MDMgPSAweDA2MWI7XG4gdC5hZmlpNTc0MDcgPSAweDA2MWY7XG4gdC5hZmlpNTc0MDkgPSAweDA2MjE7XG4gdC5hZmlpNTc0MTAgPSAweDA2MjI7XG4gdC5hZmlpNTc0MTEgPSAweDA2MjM7XG4gdC5hZmlpNTc0MTIgPSAweDA2MjQ7XG4gdC5hZmlpNTc0MTMgPSAweDA2MjU7XG4gdC5hZmlpNTc0MTQgPSAweDA2MjY7XG4gdC5hZmlpNTc0MTUgPSAweDA2Mjc7XG4gdC5hZmlpNTc0MTYgPSAweDA2Mjg7XG4gdC5hZmlpNTc0MTcgPSAweDA2Mjk7XG4gdC5hZmlpNTc0MTggPSAweDA2MmE7XG4gdC5hZmlpNTc0MTkgPSAweDA2MmI7XG4gdC5hZmlpNTc0MjAgPSAweDA2MmM7XG4gdC5hZmlpNTc0MjEgPSAweDA2MmQ7XG4gdC5hZmlpNTc0MjIgPSAweDA2MmU7XG4gdC5hZmlpNTc0MjMgPSAweDA2MmY7XG4gdC5hZmlpNTc0MjQgPSAweDA2MzA7XG4gdC5hZmlpNTc0MjUgPSAweDA2MzE7XG4gdC5hZmlpNTc0MjYgPSAweDA2MzI7XG4gdC5hZmlpNTc0MjcgPSAweDA2MzM7XG4gdC5hZmlpNTc0MjggPSAweDA2MzQ7XG4gdC5hZmlpNTc0MjkgPSAweDA2MzU7XG4gdC5hZmlpNTc0MzAgPSAweDA2MzY7XG4gdC5hZmlpNTc0MzEgPSAweDA2Mzc7XG4gdC5hZmlpNTc0MzIgPSAweDA2Mzg7XG4gdC5hZmlpNTc0MzMgPSAweDA2Mzk7XG4gdC5hZmlpNTc0MzQgPSAweDA2M2E7XG4gdC5hZmlpNTc0NDAgPSAweDA2NDA7XG4gdC5hZmlpNTc0NDEgPSAweDA2NDE7XG4gdC5hZmlpNTc0NDIgPSAweDA2NDI7XG4gdC5hZmlpNTc0NDMgPSAweDA2NDM7XG4gdC5hZmlpNTc0NDQgPSAweDA2NDQ7XG4gdC5hZmlpNTc0NDUgPSAweDA2NDU7XG4gdC5hZmlpNTc0NDYgPSAweDA2NDY7XG4gdC5hZmlpNTc0NDggPSAweDA2NDg7XG4gdC5hZmlpNTc0NDkgPSAweDA2NDk7XG4gdC5hZmlpNTc0NTAgPSAweDA2NGE7XG4gdC5hZmlpNTc0NTEgPSAweDA2NGI7XG4gdC5hZmlpNTc0NTIgPSAweDA2NGM7XG4gdC5hZmlpNTc0NTMgPSAweDA2NGQ7XG4gdC5hZmlpNTc0NTQgPSAweDA2NGU7XG4gdC5hZmlpNTc0NTUgPSAweDA2NGY7XG4gdC5hZmlpNTc0NTYgPSAweDA2NTA7XG4gdC5hZmlpNTc0NTcgPSAweDA2NTE7XG4gdC5hZmlpNTc0NTggPSAweDA2NTI7XG4gdC5hZmlpNTc0NzAgPSAweDA2NDc7XG4gdC5hZmlpNTc1MDUgPSAweDA2YTQ7XG4gdC5hZmlpNTc1MDYgPSAweDA2N2U7XG4gdC5hZmlpNTc1MDcgPSAweDA2ODY7XG4gdC5hZmlpNTc1MDggPSAweDA2OTg7XG4gdC5hZmlpNTc1MDkgPSAweDA2YWY7XG4gdC5hZmlpNTc1MTEgPSAweDA2Nzk7XG4gdC5hZmlpNTc1MTIgPSAweDA2ODg7XG4gdC5hZmlpNTc1MTMgPSAweDA2OTE7XG4gdC5hZmlpNTc1MTQgPSAweDA2YmE7XG4gdC5hZmlpNTc1MTkgPSAweDA2ZDI7XG4gdC5hZmlpNTc1MzQgPSAweDA2ZDU7XG4gdC5hZmlpNTc2MzYgPSAweDIwYWE7XG4gdC5hZmlpNTc2NDUgPSAweDA1YmU7XG4gdC5hZmlpNTc2NTggPSAweDA1YzM7XG4gdC5hZmlpNTc2NjQgPSAweDA1ZDA7XG4gdC5hZmlpNTc2NjUgPSAweDA1ZDE7XG4gdC5hZmlpNTc2NjYgPSAweDA1ZDI7XG4gdC5hZmlpNTc2NjcgPSAweDA1ZDM7XG4gdC5hZmlpNTc2NjggPSAweDA1ZDQ7XG4gdC5hZmlpNTc2NjkgPSAweDA1ZDU7XG4gdC5hZmlpNTc2NzAgPSAweDA1ZDY7XG4gdC5hZmlpNTc2NzEgPSAweDA1ZDc7XG4gdC5hZmlpNTc2NzIgPSAweDA1ZDg7XG4gdC5hZmlpNTc2NzMgPSAweDA1ZDk7XG4gdC5hZmlpNTc2NzQgPSAweDA1ZGE7XG4gdC5hZmlpNTc2NzUgPSAweDA1ZGI7XG4gdC5hZmlpNTc2NzYgPSAweDA1ZGM7XG4gdC5hZmlpNTc2NzcgPSAweDA1ZGQ7XG4gdC5hZmlpNTc2NzggPSAweDA1ZGU7XG4gdC5hZmlpNTc2NzkgPSAweDA1ZGY7XG4gdC5hZmlpNTc2ODAgPSAweDA1ZTA7XG4gdC5hZmlpNTc2ODEgPSAweDA1ZTE7XG4gdC5hZmlpNTc2ODIgPSAweDA1ZTI7XG4gdC5hZmlpNTc2ODMgPSAweDA1ZTM7XG4gdC5hZmlpNTc2ODQgPSAweDA1ZTQ7XG4gdC5hZmlpNTc2ODUgPSAweDA1ZTU7XG4gdC5hZmlpNTc2ODYgPSAweDA1ZTY7XG4gdC5hZmlpNTc2ODcgPSAweDA1ZTc7XG4gdC5hZmlpNTc2ODggPSAweDA1ZTg7XG4gdC5hZmlpNTc2ODkgPSAweDA1ZTk7XG4gdC5hZmlpNTc2OTAgPSAweDA1ZWE7XG4gdC5hZmlpNTc2OTQgPSAweGZiMmE7XG4gdC5hZmlpNTc2OTUgPSAweGZiMmI7XG4gdC5hZmlpNTc3MDAgPSAweGZiNGI7XG4gdC5hZmlpNTc3MDUgPSAweGZiMWY7XG4gdC5hZmlpNTc3MTYgPSAweDA1ZjA7XG4gdC5hZmlpNTc3MTcgPSAweDA1ZjE7XG4gdC5hZmlpNTc3MTggPSAweDA1ZjI7XG4gdC5hZmlpNTc3MjMgPSAweGZiMzU7XG4gdC5hZmlpNTc3OTMgPSAweDA1YjQ7XG4gdC5hZmlpNTc3OTQgPSAweDA1YjU7XG4gdC5hZmlpNTc3OTUgPSAweDA1YjY7XG4gdC5hZmlpNTc3OTYgPSAweDA1YmI7XG4gdC5hZmlpNTc3OTcgPSAweDA1Yjg7XG4gdC5hZmlpNTc3OTggPSAweDA1Yjc7XG4gdC5hZmlpNTc3OTkgPSAweDA1YjA7XG4gdC5hZmlpNTc4MDAgPSAweDA1YjI7XG4gdC5hZmlpNTc4MDEgPSAweDA1YjE7XG4gdC5hZmlpNTc4MDIgPSAweDA1YjM7XG4gdC5hZmlpNTc4MDMgPSAweDA1YzI7XG4gdC5hZmlpNTc4MDQgPSAweDA1YzE7XG4gdC5hZmlpNTc4MDYgPSAweDA1Yjk7XG4gdC5hZmlpNTc4MDcgPSAweDA1YmM7XG4gdC5hZmlpNTc4MzkgPSAweDA1YmQ7XG4gdC5hZmlpNTc4NDEgPSAweDA1YmY7XG4gdC5hZmlpNTc4NDIgPSAweDA1YzA7XG4gdC5hZmlpNTc5MjkgPSAweDAyYmM7XG4gdC5hZmlpNjEyNDggPSAweDIxMDU7XG4gdC5hZmlpNjEyODkgPSAweDIxMTM7XG4gdC5hZmlpNjEzNTIgPSAweDIxMTY7XG4gdC5hZmlpNjE1NzMgPSAweDIwMmM7XG4gdC5hZmlpNjE1NzQgPSAweDIwMmQ7XG4gdC5hZmlpNjE1NzUgPSAweDIwMmU7XG4gdC5hZmlpNjE2NjQgPSAweDIwMGM7XG4gdC5hZmlpNjMxNjcgPSAweDA2NmQ7XG4gdC5hZmlpNjQ5MzcgPSAweDAyYmQ7XG4gdC5hZ3JhdmUgPSAweDAwZTA7XG4gdC5hZ3VqYXJhdGkgPSAweDBhODU7XG4gdC5hZ3VybXVraGkgPSAweDBhMDU7XG4gdC5haGlyYWdhbmEgPSAweDMwNDI7XG4gdC5haG9va2Fib3ZlID0gMHgxZWEzO1xuIHQuYWliZW5nYWxpID0gMHgwOTkwO1xuIHQuYWlib3BvbW9mbyA9IDB4MzExZTtcbiB0LmFpZGV2YSA9IDB4MDkxMDtcbiB0LmFpZWN5cmlsbGljID0gMHgwNGQ1O1xuIHQuYWlndWphcmF0aSA9IDB4MGE5MDtcbiB0LmFpZ3VybXVraGkgPSAweDBhMTA7XG4gdC5haW1hdHJhZ3VybXVraGkgPSAweDBhNDg7XG4gdC5haW5hcmFiaWMgPSAweDA2Mzk7XG4gdC5haW5maW5hbGFyYWJpYyA9IDB4ZmVjYTtcbiB0LmFpbmluaXRpYWxhcmFiaWMgPSAweGZlY2I7XG4gdC5haW5tZWRpYWxhcmFiaWMgPSAweGZlY2M7XG4gdC5haW52ZXJ0ZWRicmV2ZSA9IDB4MDIwMztcbiB0LmFpdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljODtcbiB0LmFpdm93ZWxzaWduZGV2YSA9IDB4MDk0ODtcbiB0LmFpdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzg7XG4gdC5ha2F0YWthbmEgPSAweDMwYTI7XG4gdC5ha2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzE7XG4gdC5ha29yZWFuID0gMHgzMTRmO1xuIHQuYWxlZiA9IDB4MDVkMDtcbiB0LmFsZWZhcmFiaWMgPSAweDA2Mjc7XG4gdC5hbGVmZGFnZXNoaGVicmV3ID0gMHhmYjMwO1xuIHQuYWxlZmZpbmFsYXJhYmljID0gMHhmZThlO1xuIHQuYWxlZmhhbXphYWJvdmVhcmFiaWMgPSAweDA2MjM7XG4gdC5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmZTg0O1xuIHQuYWxlZmhhbXphYmVsb3dhcmFiaWMgPSAweDA2MjU7XG4gdC5hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljID0gMHhmZTg4O1xuIHQuYWxlZmhlYnJldyA9IDB4MDVkMDtcbiB0LmFsZWZsYW1lZGhlYnJldyA9IDB4ZmI0ZjtcbiB0LmFsZWZtYWRkYWFib3ZlYXJhYmljID0gMHgwNjIyO1xuIHQuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmU4MjtcbiB0LmFsZWZtYWtzdXJhYXJhYmljID0gMHgwNjQ5O1xuIHQuYWxlZm1ha3N1cmFmaW5hbGFyYWJpYyA9IDB4ZmVmMDtcbiB0LmFsZWZtYWtzdXJhaW5pdGlhbGFyYWJpYyA9IDB4ZmVmMztcbiB0LmFsZWZtYWtzdXJhbWVkaWFsYXJhYmljID0gMHhmZWY0O1xuIHQuYWxlZnBhdGFoaGVicmV3ID0gMHhmYjJlO1xuIHQuYWxlZnFhbWF0c2hlYnJldyA9IDB4ZmIyZjtcbiB0LmFsZXBoID0gMHgyMTM1O1xuIHQuYWxsZXF1YWwgPSAweDIyNGM7XG4gdC5hbHBoYSA9IDB4MDNiMTtcbiB0LmFscGhhdG9ub3MgPSAweDAzYWM7XG4gdC5hbWFjcm9uID0gMHgwMTAxO1xuIHQuYW1vbm9zcGFjZSA9IDB4ZmY0MTtcbiB0LmFtcGVyc2FuZCA9IDB4MDAyNjtcbiB0LmFtcGVyc2FuZG1vbm9zcGFjZSA9IDB4ZmYwNjtcbiB0LmFtcGVyc2FuZHNtYWxsID0gMHhmNzI2O1xuIHQuYW1zcXVhcmUgPSAweDMzYzI7XG4gdC5hbmJvcG9tb2ZvID0gMHgzMTIyO1xuIHQuYW5nYm9wb21vZm8gPSAweDMxMjQ7XG4gdC5hbmdicmFja2V0bGVmdCA9IDB4MzAwODtcbiB0LmFuZ2JyYWNrZXRyaWdodCA9IDB4MzAwOTtcbiB0LmFuZ2toYW5raHV0aGFpID0gMHgwZTVhO1xuIHQuYW5nbGUgPSAweDIyMjA7XG4gdC5hbmdsZWJyYWNrZXRsZWZ0ID0gMHgzMDA4O1xuIHQuYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsID0gMHhmZTNmO1xuIHQuYW5nbGVicmFja2V0cmlnaHQgPSAweDMwMDk7XG4gdC5hbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTQwO1xuIHQuYW5nbGVsZWZ0ID0gMHgyMzI5O1xuIHQuYW5nbGVyaWdodCA9IDB4MjMyYTtcbiB0LmFuZ3N0cm9tID0gMHgyMTJiO1xuIHQuYW5vdGVsZWlhID0gMHgwMzg3O1xuIHQuYW51ZGF0dGFkZXZhID0gMHgwOTUyO1xuIHQuYW51c3ZhcmFiZW5nYWxpID0gMHgwOTgyO1xuIHQuYW51c3ZhcmFkZXZhID0gMHgwOTAyO1xuIHQuYW51c3ZhcmFndWphcmF0aSA9IDB4MGE4MjtcbiB0LmFvZ29uZWsgPSAweDAxMDU7XG4gdC5hcGFhdG9zcXVhcmUgPSAweDMzMDA7XG4gdC5hcGFyZW4gPSAweDI0OWM7XG4gdC5hcG9zdHJvcGhlYXJtZW5pYW4gPSAweDA1NWE7XG4gdC5hcG9zdHJvcGhlbW9kID0gMHgwMmJjO1xuIHQuYXBwbGUgPSAweGY4ZmY7XG4gdC5hcHByb2FjaGVzID0gMHgyMjUwO1xuIHQuYXBwcm94ZXF1YWwgPSAweDIyNDg7XG4gdC5hcHByb3hlcXVhbG9yaW1hZ2UgPSAweDIyNTI7XG4gdC5hcHByb3hpbWF0ZWx5ZXF1YWwgPSAweDIyNDU7XG4gdC5hcmFlYWVrb3JlYW4gPSAweDMxOGU7XG4gdC5hcmFlYWtvcmVhbiA9IDB4MzE4ZDtcbiB0LmFyYyA9IDB4MjMxMjtcbiB0LmFyaWdodGhhbGZyaW5nID0gMHgxZTlhO1xuIHQuYXJpbmcgPSAweDAwZTU7XG4gdC5hcmluZ2FjdXRlID0gMHgwMWZiO1xuIHQuYXJpbmdiZWxvdyA9IDB4MWUwMTtcbiB0LmFycm93Ym90aCA9IDB4MjE5NDtcbiB0LmFycm93ZGFzaGRvd24gPSAweDIxZTM7XG4gdC5hcnJvd2Rhc2hsZWZ0ID0gMHgyMWUwO1xuIHQuYXJyb3dkYXNocmlnaHQgPSAweDIxZTI7XG4gdC5hcnJvd2Rhc2h1cCA9IDB4MjFlMTtcbiB0LmFycm93ZGJsYm90aCA9IDB4MjFkNDtcbiB0LmFycm93ZGJsZG93biA9IDB4MjFkMztcbiB0LmFycm93ZGJsbGVmdCA9IDB4MjFkMDtcbiB0LmFycm93ZGJscmlnaHQgPSAweDIxZDI7XG4gdC5hcnJvd2RibHVwID0gMHgyMWQxO1xuIHQuYXJyb3dkb3duID0gMHgyMTkzO1xuIHQuYXJyb3dkb3dubGVmdCA9IDB4MjE5OTtcbiB0LmFycm93ZG93bnJpZ2h0ID0gMHgyMTk4O1xuIHQuYXJyb3dkb3dud2hpdGUgPSAweDIxZTk7XG4gdC5hcnJvd2hlYWRkb3dubW9kID0gMHgwMmM1O1xuIHQuYXJyb3doZWFkbGVmdG1vZCA9IDB4MDJjMjtcbiB0LmFycm93aGVhZHJpZ2h0bW9kID0gMHgwMmMzO1xuIHQuYXJyb3doZWFkdXBtb2QgPSAweDAyYzQ7XG4gdC5hcnJvd2hvcml6ZXggPSAweGY4ZTc7XG4gdC5hcnJvd2xlZnQgPSAweDIxOTA7XG4gdC5hcnJvd2xlZnRkYmwgPSAweDIxZDA7XG4gdC5hcnJvd2xlZnRkYmxzdHJva2UgPSAweDIxY2Q7XG4gdC5hcnJvd2xlZnRvdmVycmlnaHQgPSAweDIxYzY7XG4gdC5hcnJvd2xlZnR3aGl0ZSA9IDB4MjFlNjtcbiB0LmFycm93cmlnaHQgPSAweDIxOTI7XG4gdC5hcnJvd3JpZ2h0ZGJsc3Ryb2tlID0gMHgyMWNmO1xuIHQuYXJyb3dyaWdodGhlYXZ5ID0gMHgyNzllO1xuIHQuYXJyb3dyaWdodG92ZXJsZWZ0ID0gMHgyMWM0O1xuIHQuYXJyb3dyaWdodHdoaXRlID0gMHgyMWU4O1xuIHQuYXJyb3d0YWJsZWZ0ID0gMHgyMWU0O1xuIHQuYXJyb3d0YWJyaWdodCA9IDB4MjFlNTtcbiB0LmFycm93dXAgPSAweDIxOTE7XG4gdC5hcnJvd3VwZG4gPSAweDIxOTU7XG4gdC5hcnJvd3VwZG5ic2UgPSAweDIxYTg7XG4gdC5hcnJvd3VwZG93bmJhc2UgPSAweDIxYTg7XG4gdC5hcnJvd3VwbGVmdCA9IDB4MjE5NjtcbiB0LmFycm93dXBsZWZ0b2Zkb3duID0gMHgyMWM1O1xuIHQuYXJyb3d1cHJpZ2h0ID0gMHgyMTk3O1xuIHQuYXJyb3d1cHdoaXRlID0gMHgyMWU3O1xuIHQuYXJyb3d2ZXJ0ZXggPSAweGY4ZTY7XG4gdC5hc2NpaWNpcmN1bSA9IDB4MDA1ZTtcbiB0LmFzY2lpY2lyY3VtbW9ub3NwYWNlID0gMHhmZjNlO1xuIHQuYXNjaWl0aWxkZSA9IDB4MDA3ZTtcbiB0LmFzY2lpdGlsZGVtb25vc3BhY2UgPSAweGZmNWU7XG4gdC5hc2NyaXB0ID0gMHgwMjUxO1xuIHQuYXNjcmlwdHR1cm5lZCA9IDB4MDI1MjtcbiB0LmFzbWFsbGhpcmFnYW5hID0gMHgzMDQxO1xuIHQuYXNtYWxsa2F0YWthbmEgPSAweDMwYTE7XG4gdC5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2NztcbiB0LmFzdGVyaXNrID0gMHgwMDJhO1xuIHQuYXN0ZXJpc2thbHRvbmVhcmFiaWMgPSAweDA2NmQ7XG4gdC5hc3Rlcmlza2FyYWJpYyA9IDB4MDY2ZDtcbiB0LmFzdGVyaXNrbWF0aCA9IDB4MjIxNztcbiB0LmFzdGVyaXNrbW9ub3NwYWNlID0gMHhmZjBhO1xuIHQuYXN0ZXJpc2tzbWFsbCA9IDB4ZmU2MTtcbiB0LmFzdGVyaXNtID0gMHgyMDQyO1xuIHQuYXN1cGVyaW9yID0gMHhmNmU5O1xuIHQuYXN5bXB0b3RpY2FsbHllcXVhbCA9IDB4MjI0MztcbiB0LmF0ID0gMHgwMDQwO1xuIHQuYXRpbGRlID0gMHgwMGUzO1xuIHQuYXRtb25vc3BhY2UgPSAweGZmMjA7XG4gdC5hdHNtYWxsID0gMHhmZTZiO1xuIHQuYXR1cm5lZCA9IDB4MDI1MDtcbiB0LmF1YmVuZ2FsaSA9IDB4MDk5NDtcbiB0LmF1Ym9wb21vZm8gPSAweDMxMjA7XG4gdC5hdWRldmEgPSAweDA5MTQ7XG4gdC5hdWd1amFyYXRpID0gMHgwYTk0O1xuIHQuYXVndXJtdWtoaSA9IDB4MGExNDtcbiB0LmF1bGVuZ3RobWFya2JlbmdhbGkgPSAweDA5ZDc7XG4gdC5hdW1hdHJhZ3VybXVraGkgPSAweDBhNGM7XG4gdC5hdXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Y2M7XG4gdC5hdXZvd2Vsc2lnbmRldmEgPSAweDA5NGM7XG4gdC5hdXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWNjO1xuIHQuYXZhZ3JhaGFkZXZhID0gMHgwOTNkO1xuIHQuYXliYXJtZW5pYW4gPSAweDA1NjE7XG4gdC5heWluID0gMHgwNWUyO1xuIHQuYXlpbmFsdG9uZWhlYnJldyA9IDB4ZmIyMDtcbiB0LmF5aW5oZWJyZXcgPSAweDA1ZTI7XG4gdC5iID0gMHgwMDYyO1xuIHQuYmFiZW5nYWxpID0gMHgwOWFjO1xuIHQuYmFja3NsYXNoID0gMHgwMDVjO1xuIHQuYmFja3NsYXNobW9ub3NwYWNlID0gMHhmZjNjO1xuIHQuYmFkZXZhID0gMHgwOTJjO1xuIHQuYmFndWphcmF0aSA9IDB4MGFhYztcbiB0LmJhZ3VybXVraGkgPSAweDBhMmM7XG4gdC5iYWhpcmFnYW5hID0gMHgzMDcwO1xuIHQuYmFodHRoYWkgPSAweDBlM2Y7XG4gdC5iYWthdGFrYW5hID0gMHgzMGQwO1xuIHQuYmFyID0gMHgwMDdjO1xuIHQuYmFybW9ub3NwYWNlID0gMHhmZjVjO1xuIHQuYmJvcG9tb2ZvID0gMHgzMTA1O1xuIHQuYmNpcmNsZSA9IDB4MjRkMTtcbiB0LmJkb3RhY2NlbnQgPSAweDFlMDM7XG4gdC5iZG90YmVsb3cgPSAweDFlMDU7XG4gdC5iZWFtZWRzaXh0ZWVudGhub3RlcyA9IDB4MjY2YztcbiB0LmJlY2F1c2UgPSAweDIyMzU7XG4gdC5iZWN5cmlsbGljID0gMHgwNDMxO1xuIHQuYmVoYXJhYmljID0gMHgwNjI4O1xuIHQuYmVoZmluYWxhcmFiaWMgPSAweGZlOTA7XG4gdC5iZWhpbml0aWFsYXJhYmljID0gMHhmZTkxO1xuIHQuYmVoaXJhZ2FuYSA9IDB4MzA3OTtcbiB0LmJlaG1lZGlhbGFyYWJpYyA9IDB4ZmU5MjtcbiB0LmJlaG1lZW1pbml0aWFsYXJhYmljID0gMHhmYzlmO1xuIHQuYmVobWVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzA4O1xuIHQuYmVobm9vbmZpbmFsYXJhYmljID0gMHhmYzZkO1xuIHQuYmVrYXRha2FuYSA9IDB4MzBkOTtcbiB0LmJlbmFybWVuaWFuID0gMHgwNTYyO1xuIHQuYmV0ID0gMHgwNWQxO1xuIHQuYmV0YSA9IDB4MDNiMjtcbiB0LmJldGFzeW1ib2xncmVlayA9IDB4MDNkMDtcbiB0LmJldGRhZ2VzaCA9IDB4ZmIzMTtcbiB0LmJldGRhZ2VzaGhlYnJldyA9IDB4ZmIzMTtcbiB0LmJldGhlYnJldyA9IDB4MDVkMTtcbiB0LmJldHJhZmVoZWJyZXcgPSAweGZiNGM7XG4gdC5iaGFiZW5nYWxpID0gMHgwOWFkO1xuIHQuYmhhZGV2YSA9IDB4MDkyZDtcbiB0LmJoYWd1amFyYXRpID0gMHgwYWFkO1xuIHQuYmhhZ3VybXVraGkgPSAweDBhMmQ7XG4gdC5iaG9vayA9IDB4MDI1MztcbiB0LmJpaGlyYWdhbmEgPSAweDMwNzM7XG4gdC5iaWthdGFrYW5hID0gMHgzMGQzO1xuIHQuYmlsYWJpYWxjbGljayA9IDB4MDI5ODtcbiB0LmJpbmRpZ3VybXVraGkgPSAweDBhMDI7XG4gdC5iaXJ1c3F1YXJlID0gMHgzMzMxO1xuIHQuYmxhY2tjaXJjbGUgPSAweDI1Y2Y7XG4gdC5ibGFja2RpYW1vbmQgPSAweDI1YzY7XG4gdC5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlID0gMHgyNWJjO1xuIHQuYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyID0gMHgyNWM0O1xuIHQuYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZSA9IDB4MjVjMDtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0ID0gMHgzMDEwO1xuIHQuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzYjtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodCA9IDB4MzAxMTtcbiB0LmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTNjO1xuIHQuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZSA9IDB4MjVlMztcbiB0LmJsYWNrbG93ZXJyaWdodHRyaWFuZ2xlID0gMHgyNWUyO1xuIHQuYmxhY2tyZWN0YW5nbGUgPSAweDI1YWM7XG4gdC5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyID0gMHgyNWJhO1xuIHQuYmxhY2tyaWdodHBvaW50aW5ndHJpYW5nbGUgPSAweDI1YjY7XG4gdC5ibGFja3NtYWxsc3F1YXJlID0gMHgyNWFhO1xuIHQuYmxhY2tzbWlsaW5nZmFjZSA9IDB4MjYzYjtcbiB0LmJsYWNrc3F1YXJlID0gMHgyNWEwO1xuIHQuYmxhY2tzdGFyID0gMHgyNjA1O1xuIHQuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZSA9IDB4MjVlNDtcbiB0LmJsYWNrdXBwZXJyaWdodHRyaWFuZ2xlID0gMHgyNWU1O1xuIHQuYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZSA9IDB4MjViNDtcbiB0LmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWIyO1xuIHQuYmxhbmsgPSAweDI0MjM7XG4gdC5ibGluZWJlbG93ID0gMHgxZTA3O1xuIHQuYmxvY2sgPSAweDI1ODg7XG4gdC5ibW9ub3NwYWNlID0gMHhmZjQyO1xuIHQuYm9iYWltYWl0aGFpID0gMHgwZTFhO1xuIHQuYm9oaXJhZ2FuYSA9IDB4MzA3YztcbiB0LmJva2F0YWthbmEgPSAweDMwZGM7XG4gdC5icGFyZW4gPSAweDI0OWQ7XG4gdC5icXNxdWFyZSA9IDB4MzNjMztcbiB0LmJyYWNlZXggPSAweGY4ZjQ7XG4gdC5icmFjZWxlZnQgPSAweDAwN2I7XG4gdC5icmFjZWxlZnRidCA9IDB4ZjhmMztcbiB0LmJyYWNlbGVmdG1pZCA9IDB4ZjhmMjtcbiB0LmJyYWNlbGVmdG1vbm9zcGFjZSA9IDB4ZmY1YjtcbiB0LmJyYWNlbGVmdHNtYWxsID0gMHhmZTViO1xuIHQuYnJhY2VsZWZ0dHAgPSAweGY4ZjE7XG4gdC5icmFjZWxlZnR2ZXJ0aWNhbCA9IDB4ZmUzNztcbiB0LmJyYWNlcmlnaHQgPSAweDAwN2Q7XG4gdC5icmFjZXJpZ2h0YnQgPSAweGY4ZmU7XG4gdC5icmFjZXJpZ2h0bWlkID0gMHhmOGZkO1xuIHQuYnJhY2VyaWdodG1vbm9zcGFjZSA9IDB4ZmY1ZDtcbiB0LmJyYWNlcmlnaHRzbWFsbCA9IDB4ZmU1YztcbiB0LmJyYWNlcmlnaHR0cCA9IDB4ZjhmYztcbiB0LmJyYWNlcmlnaHR2ZXJ0aWNhbCA9IDB4ZmUzODtcbiB0LmJyYWNrZXRsZWZ0ID0gMHgwMDViO1xuIHQuYnJhY2tldGxlZnRidCA9IDB4ZjhmMDtcbiB0LmJyYWNrZXRsZWZ0ZXggPSAweGY4ZWY7XG4gdC5icmFja2V0bGVmdG1vbm9zcGFjZSA9IDB4ZmYzYjtcbiB0LmJyYWNrZXRsZWZ0dHAgPSAweGY4ZWU7XG4gdC5icmFja2V0cmlnaHQgPSAweDAwNWQ7XG4gdC5icmFja2V0cmlnaHRidCA9IDB4ZjhmYjtcbiB0LmJyYWNrZXRyaWdodGV4ID0gMHhmOGZhO1xuIHQuYnJhY2tldHJpZ2h0bW9ub3NwYWNlID0gMHhmZjNkO1xuIHQuYnJhY2tldHJpZ2h0dHAgPSAweGY4Zjk7XG4gdC5icmV2ZSA9IDB4MDJkODtcbiB0LmJyZXZlYmVsb3djbWIgPSAweDAzMmU7XG4gdC5icmV2ZWNtYiA9IDB4MDMwNjtcbiB0LmJyZXZlaW52ZXJ0ZWRiZWxvd2NtYiA9IDB4MDMyZjtcbiB0LmJyZXZlaW52ZXJ0ZWRjbWIgPSAweDAzMTE7XG4gdC5icmV2ZWludmVydGVkZG91YmxlY21iID0gMHgwMzYxO1xuIHQuYnJpZGdlYmVsb3djbWIgPSAweDAzMmE7XG4gdC5icmlkZ2VpbnZlcnRlZGJlbG93Y21iID0gMHgwMzNhO1xuIHQuYnJva2VuYmFyID0gMHgwMGE2O1xuIHQuYnN0cm9rZSA9IDB4MDE4MDtcbiB0LmJzdXBlcmlvciA9IDB4ZjZlYTtcbiB0LmJ0b3BiYXIgPSAweDAxODM7XG4gdC5idWhpcmFnYW5hID0gMHgzMDc2O1xuIHQuYnVrYXRha2FuYSA9IDB4MzBkNjtcbiB0LmJ1bGxldCA9IDB4MjAyMjtcbiB0LmJ1bGxldGludmVyc2UgPSAweDI1ZDg7XG4gdC5idWxsZXRvcGVyYXRvciA9IDB4MjIxOTtcbiB0LmJ1bGxzZXllID0gMHgyNWNlO1xuIHQuYyA9IDB4MDA2MztcbiB0LmNhYXJtZW5pYW4gPSAweDA1NmU7XG4gdC5jYWJlbmdhbGkgPSAweDA5OWE7XG4gdC5jYWN1dGUgPSAweDAxMDc7XG4gdC5jYWRldmEgPSAweDA5MWE7XG4gdC5jYWd1amFyYXRpID0gMHgwYTlhO1xuIHQuY2FndXJtdWtoaSA9IDB4MGExYTtcbiB0LmNhbHNxdWFyZSA9IDB4MzM4ODtcbiB0LmNhbmRyYWJpbmR1YmVuZ2FsaSA9IDB4MDk4MTtcbiB0LmNhbmRyYWJpbmR1Y21iID0gMHgwMzEwO1xuIHQuY2FuZHJhYmluZHVkZXZhID0gMHgwOTAxO1xuIHQuY2FuZHJhYmluZHVndWphcmF0aSA9IDB4MGE4MTtcbiB0LmNhcHNsb2NrID0gMHgyMWVhO1xuIHQuY2FyZW9mID0gMHgyMTA1O1xuIHQuY2Fyb24gPSAweDAyYzc7XG4gdC5jYXJvbmJlbG93Y21iID0gMHgwMzJjO1xuIHQuY2Fyb25jbWIgPSAweDAzMGM7XG4gdC5jYXJyaWFnZXJldHVybiA9IDB4MjFiNTtcbiB0LmNib3BvbW9mbyA9IDB4MzExODtcbiB0LmNjYXJvbiA9IDB4MDEwZDtcbiB0LmNjZWRpbGxhID0gMHgwMGU3O1xuIHQuY2NlZGlsbGFhY3V0ZSA9IDB4MWUwOTtcbiB0LmNjaXJjbGUgPSAweDI0ZDI7XG4gdC5jY2lyY3VtZmxleCA9IDB4MDEwOTtcbiB0LmNjdXJsID0gMHgwMjU1O1xuIHQuY2RvdCA9IDB4MDEwYjtcbiB0LmNkb3RhY2NlbnQgPSAweDAxMGI7XG4gdC5jZHNxdWFyZSA9IDB4MzNjNTtcbiB0LmNlZGlsbGEgPSAweDAwYjg7XG4gdC5jZWRpbGxhY21iID0gMHgwMzI3O1xuIHQuY2VudCA9IDB4MDBhMjtcbiB0LmNlbnRpZ3JhZGUgPSAweDIxMDM7XG4gdC5jZW50aW5mZXJpb3IgPSAweGY2ZGY7XG4gdC5jZW50bW9ub3NwYWNlID0gMHhmZmUwO1xuIHQuY2VudG9sZHN0eWxlID0gMHhmN2EyO1xuIHQuY2VudHN1cGVyaW9yID0gMHhmNmUwO1xuIHQuY2hhYXJtZW5pYW4gPSAweDA1Nzk7XG4gdC5jaGFiZW5nYWxpID0gMHgwOTliO1xuIHQuY2hhZGV2YSA9IDB4MDkxYjtcbiB0LmNoYWd1amFyYXRpID0gMHgwYTliO1xuIHQuY2hhZ3VybXVraGkgPSAweDBhMWI7XG4gdC5jaGJvcG9tb2ZvID0gMHgzMTE0O1xuIHQuY2hlYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0YmQ7XG4gdC5jaGVja21hcmsgPSAweDI3MTM7XG4gdC5jaGVjeXJpbGxpYyA9IDB4MDQ0NztcbiB0LmNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljID0gMHgwNGJmO1xuIHQuY2hlZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0Yjc7XG4gdC5jaGVkaWVyZXNpc2N5cmlsbGljID0gMHgwNGY1O1xuIHQuY2hlaGFybWVuaWFuID0gMHgwNTczO1xuIHQuY2hla2hha2Fzc2lhbmN5cmlsbGljID0gMHgwNGNjO1xuIHQuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDRiOTtcbiB0LmNoaSA9IDB4MDNjNztcbiB0LmNoaWV1Y2hhY2lyY2xla29yZWFuID0gMHgzMjc3O1xuIHQuY2hpZXVjaGFwYXJlbmtvcmVhbiA9IDB4MzIxNztcbiB0LmNoaWV1Y2hjaXJjbGVrb3JlYW4gPSAweDMyNjk7XG4gdC5jaGlldWNoa29yZWFuID0gMHgzMTRhO1xuIHQuY2hpZXVjaHBhcmVua29yZWFuID0gMHgzMjA5O1xuIHQuY2hvY2hhbmd0aGFpID0gMHgwZTBhO1xuIHQuY2hvY2hhbnRoYWkgPSAweDBlMDg7XG4gdC5jaG9jaGluZ3RoYWkgPSAweDBlMDk7XG4gdC5jaG9jaG9ldGhhaSA9IDB4MGUwYztcbiB0LmNob29rID0gMHgwMTg4O1xuIHQuY2lldWNhY2lyY2xla29yZWFuID0gMHgzMjc2O1xuIHQuY2lldWNhcGFyZW5rb3JlYW4gPSAweDMyMTY7XG4gdC5jaWV1Y2NpcmNsZWtvcmVhbiA9IDB4MzI2ODtcbiB0LmNpZXVja29yZWFuID0gMHgzMTQ4O1xuIHQuY2lldWNwYXJlbmtvcmVhbiA9IDB4MzIwODtcbiB0LmNpZXVjdXBhcmVua29yZWFuID0gMHgzMjFjO1xuIHQuY2lyY2xlID0gMHgyNWNiO1xuIHQuY2lyY2xlY29weXJ0ID0gMHgwMGE5O1xuIHQuY2lyY2xlbXVsdGlwbHkgPSAweDIyOTc7XG4gdC5jaXJjbGVvdCA9IDB4MjI5OTtcbiB0LmNpcmNsZXBsdXMgPSAweDIyOTU7XG4gdC5jaXJjbGVwb3N0YWxtYXJrID0gMHgzMDM2O1xuIHQuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2sgPSAweDI1ZDA7XG4gdC5jaXJjbGV3aXRocmlnaHRoYWxmYmxhY2sgPSAweDI1ZDE7XG4gdC5jaXJjdW1mbGV4ID0gMHgwMmM2O1xuIHQuY2lyY3VtZmxleGJlbG93Y21iID0gMHgwMzJkO1xuIHQuY2lyY3VtZmxleGNtYiA9IDB4MDMwMjtcbiB0LmNsZWFyID0gMHgyMzI3O1xuIHQuY2xpY2thbHZlb2xhciA9IDB4MDFjMjtcbiB0LmNsaWNrZGVudGFsID0gMHgwMWMwO1xuIHQuY2xpY2tsYXRlcmFsID0gMHgwMWMxO1xuIHQuY2xpY2tyZXRyb2ZsZXggPSAweDAxYzM7XG4gdC5jbHViID0gMHgyNjYzO1xuIHQuY2x1YnN1aXRibGFjayA9IDB4MjY2MztcbiB0LmNsdWJzdWl0d2hpdGUgPSAweDI2Njc7XG4gdC5jbWN1YmVkc3F1YXJlID0gMHgzM2E0O1xuIHQuY21vbm9zcGFjZSA9IDB4ZmY0MztcbiB0LmNtc3F1YXJlZHNxdWFyZSA9IDB4MzNhMDtcbiB0LmNvYXJtZW5pYW4gPSAweDA1ODE7XG4gdC5jb2xvbiA9IDB4MDAzYTtcbiB0LmNvbG9ubW9uZXRhcnkgPSAweDIwYTE7XG4gdC5jb2xvbm1vbm9zcGFjZSA9IDB4ZmYxYTtcbiB0LmNvbG9uc2lnbiA9IDB4MjBhMTtcbiB0LmNvbG9uc21hbGwgPSAweGZlNTU7XG4gdC5jb2xvbnRyaWFuZ3VsYXJoYWxmbW9kID0gMHgwMmQxO1xuIHQuY29sb250cmlhbmd1bGFybW9kID0gMHgwMmQwO1xuIHQuY29tbWEgPSAweDAwMmM7XG4gdC5jb21tYWFib3ZlY21iID0gMHgwMzEzO1xuIHQuY29tbWFhYm92ZXJpZ2h0Y21iID0gMHgwMzE1O1xuIHQuY29tbWFhY2NlbnQgPSAweGY2YzM7XG4gdC5jb21tYWFyYWJpYyA9IDB4MDYwYztcbiB0LmNvbW1hYXJtZW5pYW4gPSAweDA1NWQ7XG4gdC5jb21tYWluZmVyaW9yID0gMHhmNmUxO1xuIHQuY29tbWFtb25vc3BhY2UgPSAweGZmMGM7XG4gdC5jb21tYXJldmVyc2VkYWJvdmVjbWIgPSAweDAzMTQ7XG4gdC5jb21tYXJldmVyc2VkbW9kID0gMHgwMmJkO1xuIHQuY29tbWFzbWFsbCA9IDB4ZmU1MDtcbiB0LmNvbW1hc3VwZXJpb3IgPSAweGY2ZTI7XG4gdC5jb21tYXR1cm5lZGFib3ZlY21iID0gMHgwMzEyO1xuIHQuY29tbWF0dXJuZWRtb2QgPSAweDAyYmI7XG4gdC5jb21wYXNzID0gMHgyNjNjO1xuIHQuY29uZ3J1ZW50ID0gMHgyMjQ1O1xuIHQuY29udG91cmludGVncmFsID0gMHgyMjJlO1xuIHQuY29udHJvbCA9IDB4MjMwMztcbiB0LmNvbnRyb2xBQ0sgPSAweDAwMDY7XG4gdC5jb250cm9sQkVMID0gMHgwMDA3O1xuIHQuY29udHJvbEJTID0gMHgwMDA4O1xuIHQuY29udHJvbENBTiA9IDB4MDAxODtcbiB0LmNvbnRyb2xDUiA9IDB4MDAwZDtcbiB0LmNvbnRyb2xEQzEgPSAweDAwMTE7XG4gdC5jb250cm9sREMyID0gMHgwMDEyO1xuIHQuY29udHJvbERDMyA9IDB4MDAxMztcbiB0LmNvbnRyb2xEQzQgPSAweDAwMTQ7XG4gdC5jb250cm9sREVMID0gMHgwMDdmO1xuIHQuY29udHJvbERMRSA9IDB4MDAxMDtcbiB0LmNvbnRyb2xFTSA9IDB4MDAxOTtcbiB0LmNvbnRyb2xFTlEgPSAweDAwMDU7XG4gdC5jb250cm9sRU9UID0gMHgwMDA0O1xuIHQuY29udHJvbEVTQyA9IDB4MDAxYjtcbiB0LmNvbnRyb2xFVEIgPSAweDAwMTc7XG4gdC5jb250cm9sRVRYID0gMHgwMDAzO1xuIHQuY29udHJvbEZGID0gMHgwMDBjO1xuIHQuY29udHJvbEZTID0gMHgwMDFjO1xuIHQuY29udHJvbEdTID0gMHgwMDFkO1xuIHQuY29udHJvbEhUID0gMHgwMDA5O1xuIHQuY29udHJvbExGID0gMHgwMDBhO1xuIHQuY29udHJvbE5BSyA9IDB4MDAxNTtcbiB0LmNvbnRyb2xOVUxMID0gMHgwMDAwO1xuIHQuY29udHJvbFJTID0gMHgwMDFlO1xuIHQuY29udHJvbFNJID0gMHgwMDBmO1xuIHQuY29udHJvbFNPID0gMHgwMDBlO1xuIHQuY29udHJvbFNPVCA9IDB4MDAwMjtcbiB0LmNvbnRyb2xTVFggPSAweDAwMDE7XG4gdC5jb250cm9sU1VCID0gMHgwMDFhO1xuIHQuY29udHJvbFNZTiA9IDB4MDAxNjtcbiB0LmNvbnRyb2xVUyA9IDB4MDAxZjtcbiB0LmNvbnRyb2xWVCA9IDB4MDAwYjtcbiB0LmNvcHlyaWdodCA9IDB4MDBhOTtcbiB0LmNvcHlyaWdodHNhbnMgPSAweGY4ZTk7XG4gdC5jb3B5cmlnaHRzZXJpZiA9IDB4ZjZkOTtcbiB0LmNvcm5lcmJyYWNrZXRsZWZ0ID0gMHgzMDBjO1xuIHQuY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGggPSAweGZmNjI7XG4gdC5jb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsID0gMHhmZTQxO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0ID0gMHgzMDBkO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoID0gMHhmZjYzO1xuIHQuY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlNDI7XG4gdC5jb3Jwb3JhdGlvbnNxdWFyZSA9IDB4MzM3ZjtcbiB0LmNvc3F1YXJlID0gMHgzM2M3O1xuIHQuY292ZXJrZ3NxdWFyZSA9IDB4MzNjNjtcbiB0LmNwYXJlbiA9IDB4MjQ5ZTtcbiB0LmNydXplaXJvID0gMHgyMGEyO1xuIHQuY3N0cmV0Y2hlZCA9IDB4MDI5NztcbiB0LmN1cmx5YW5kID0gMHgyMmNmO1xuIHQuY3VybHlvciA9IDB4MjJjZTtcbiB0LmN1cnJlbmN5ID0gMHgwMGE0O1xuIHQuY3lyQnJldmUgPSAweGY2ZDE7XG4gdC5jeXJGbGV4ID0gMHhmNmQyO1xuIHQuY3lyYnJldmUgPSAweGY2ZDQ7XG4gdC5jeXJmbGV4ID0gMHhmNmQ1O1xuIHQuZCA9IDB4MDA2NDtcbiB0LmRhYXJtZW5pYW4gPSAweDA1NjQ7XG4gdC5kYWJlbmdhbGkgPSAweDA5YTY7XG4gdC5kYWRhcmFiaWMgPSAweDA2MzY7XG4gdC5kYWRldmEgPSAweDA5MjY7XG4gdC5kYWRmaW5hbGFyYWJpYyA9IDB4ZmViZTtcbiB0LmRhZGluaXRpYWxhcmFiaWMgPSAweGZlYmY7XG4gdC5kYWRtZWRpYWxhcmFiaWMgPSAweGZlYzA7XG4gdC5kYWdlc2ggPSAweDA1YmM7XG4gdC5kYWdlc2hoZWJyZXcgPSAweDA1YmM7XG4gdC5kYWdnZXIgPSAweDIwMjA7XG4gdC5kYWdnZXJkYmwgPSAweDIwMjE7XG4gdC5kYWd1amFyYXRpID0gMHgwYWE2O1xuIHQuZGFndXJtdWtoaSA9IDB4MGEyNjtcbiB0LmRhaGlyYWdhbmEgPSAweDMwNjA7XG4gdC5kYWthdGFrYW5hID0gMHgzMGMwO1xuIHQuZGFsYXJhYmljID0gMHgwNjJmO1xuIHQuZGFsZXQgPSAweDA1ZDM7XG4gdC5kYWxldGRhZ2VzaCA9IDB4ZmIzMztcbiB0LmRhbGV0ZGFnZXNoaGVicmV3ID0gMHhmYjMzO1xuIHQuZGFsZXRoZWJyZXcgPSAweDA1ZDM7XG4gdC5kYWxmaW5hbGFyYWJpYyA9IDB4ZmVhYTtcbiB0LmRhbW1hYXJhYmljID0gMHgwNjRmO1xuIHQuZGFtbWFsb3dhcmFiaWMgPSAweDA2NGY7XG4gdC5kYW1tYXRhbmFsdG9uZWFyYWJpYyA9IDB4MDY0YztcbiB0LmRhbW1hdGFuYXJhYmljID0gMHgwNjRjO1xuIHQuZGFuZGEgPSAweDA5NjQ7XG4gdC5kYXJnYWhlYnJldyA9IDB4MDVhNztcbiB0LmRhcmdhbGVmdGhlYnJldyA9IDB4MDVhNztcbiB0LmRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYiA9IDB4MDQ4NTtcbiB0LmRibEdyYXZlID0gMHhmNmQzO1xuIHQuZGJsYW5nbGVicmFja2V0bGVmdCA9IDB4MzAwYTtcbiB0LmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbCA9IDB4ZmUzZDtcbiB0LmRibGFuZ2xlYnJhY2tldHJpZ2h0ID0gMHgzMDBiO1xuIHQuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbCA9IDB4ZmUzZTtcbiB0LmRibGFyY2hpbnZlcnRlZGJlbG93Y21iID0gMHgwMzJiO1xuIHQuZGJsYXJyb3dsZWZ0ID0gMHgyMWQ0O1xuIHQuZGJsYXJyb3dyaWdodCA9IDB4MjFkMjtcbiB0LmRibGRhbmRhID0gMHgwOTY1O1xuIHQuZGJsZ3JhdmUgPSAweGY2ZDY7XG4gdC5kYmxncmF2ZWNtYiA9IDB4MDMwZjtcbiB0LmRibGludGVncmFsID0gMHgyMjJjO1xuIHQuZGJsbG93bGluZSA9IDB4MjAxNztcbiB0LmRibGxvd2xpbmVjbWIgPSAweDAzMzM7XG4gdC5kYmxvdmVybGluZWNtYiA9IDB4MDMzZjtcbiB0LmRibHByaW1lbW9kID0gMHgwMmJhO1xuIHQuZGJsdmVydGljYWxiYXIgPSAweDIwMTY7XG4gdC5kYmx2ZXJ0aWNhbGxpbmVhYm92ZWNtYiA9IDB4MDMwZTtcbiB0LmRib3BvbW9mbyA9IDB4MzEwOTtcbiB0LmRic3F1YXJlID0gMHgzM2M4O1xuIHQuZGNhcm9uID0gMHgwMTBmO1xuIHQuZGNlZGlsbGEgPSAweDFlMTE7XG4gdC5kY2lyY2xlID0gMHgyNGQzO1xuIHQuZGNpcmN1bWZsZXhiZWxvdyA9IDB4MWUxMztcbiB0LmRjcm9hdCA9IDB4MDExMTtcbiB0LmRkYWJlbmdhbGkgPSAweDA5YTE7XG4gdC5kZGFkZXZhID0gMHgwOTIxO1xuIHQuZGRhZ3VqYXJhdGkgPSAweDBhYTE7XG4gdC5kZGFndXJtdWtoaSA9IDB4MGEyMTtcbiB0LmRkYWxhcmFiaWMgPSAweDA2ODg7XG4gdC5kZGFsZmluYWxhcmFiaWMgPSAweGZiODk7XG4gdC5kZGRoYWRldmEgPSAweDA5NWM7XG4gdC5kZGhhYmVuZ2FsaSA9IDB4MDlhMjtcbiB0LmRkaGFkZXZhID0gMHgwOTIyO1xuIHQuZGRoYWd1amFyYXRpID0gMHgwYWEyO1xuIHQuZGRoYWd1cm11a2hpID0gMHgwYTIyO1xuIHQuZGRvdGFjY2VudCA9IDB4MWUwYjtcbiB0LmRkb3RiZWxvdyA9IDB4MWUwZDtcbiB0LmRlY2ltYWxzZXBhcmF0b3JhcmFiaWMgPSAweDA2NmI7XG4gdC5kZWNpbWFsc2VwYXJhdG9ycGVyc2lhbiA9IDB4MDY2YjtcbiB0LmRlY3lyaWxsaWMgPSAweDA0MzQ7XG4gdC5kZWdyZWUgPSAweDAwYjA7XG4gdC5kZWhpaGVicmV3ID0gMHgwNWFkO1xuIHQuZGVoaXJhZ2FuYSA9IDB4MzA2NztcbiB0LmRlaWNvcHRpYyA9IDB4MDNlZjtcbiB0LmRla2F0YWthbmEgPSAweDMwYzc7XG4gdC5kZWxldGVsZWZ0ID0gMHgyMzJiO1xuIHQuZGVsZXRlcmlnaHQgPSAweDIzMjY7XG4gdC5kZWx0YSA9IDB4MDNiNDtcbiB0LmRlbHRhdHVybmVkID0gMHgwMThkO1xuIHQuZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGkgPSAweDA5Zjg7XG4gdC5kZXpoID0gMHgwMmE0O1xuIHQuZGhhYmVuZ2FsaSA9IDB4MDlhNztcbiB0LmRoYWRldmEgPSAweDA5Mjc7XG4gdC5kaGFndWphcmF0aSA9IDB4MGFhNztcbiB0LmRoYWd1cm11a2hpID0gMHgwYTI3O1xuIHQuZGhvb2sgPSAweDAyNTc7XG4gdC5kaWFseXRpa2F0b25vcyA9IDB4MDM4NTtcbiB0LmRpYWx5dGlrYXRvbm9zY21iID0gMHgwMzQ0O1xuIHQuZGlhbW9uZCA9IDB4MjY2NjtcbiB0LmRpYW1vbmRzdWl0d2hpdGUgPSAweDI2NjI7XG4gdC5kaWVyZXNpcyA9IDB4MDBhODtcbiB0LmRpZXJlc2lzYWN1dGUgPSAweGY2ZDc7XG4gdC5kaWVyZXNpc2JlbG93Y21iID0gMHgwMzI0O1xuIHQuZGllcmVzaXNjbWIgPSAweDAzMDg7XG4gdC5kaWVyZXNpc2dyYXZlID0gMHhmNmQ4O1xuIHQuZGllcmVzaXN0b25vcyA9IDB4MDM4NTtcbiB0LmRpaGlyYWdhbmEgPSAweDMwNjI7XG4gdC5kaWthdGFrYW5hID0gMHgzMGMyO1xuIHQuZGl0dG9tYXJrID0gMHgzMDAzO1xuIHQuZGl2aWRlID0gMHgwMGY3O1xuIHQuZGl2aWRlcyA9IDB4MjIyMztcbiB0LmRpdmlzaW9uc2xhc2ggPSAweDIyMTU7XG4gdC5kamVjeXJpbGxpYyA9IDB4MDQ1MjtcbiB0LmRrc2hhZGUgPSAweDI1OTM7XG4gdC5kbGluZWJlbG93ID0gMHgxZTBmO1xuIHQuZGxzcXVhcmUgPSAweDMzOTc7XG4gdC5kbWFjcm9uID0gMHgwMTExO1xuIHQuZG1vbm9zcGFjZSA9IDB4ZmY0NDtcbiB0LmRuYmxvY2sgPSAweDI1ODQ7XG4gdC5kb2NoYWRhdGhhaSA9IDB4MGUwZTtcbiB0LmRvZGVrdGhhaSA9IDB4MGUxNDtcbiB0LmRvaGlyYWdhbmEgPSAweDMwNjk7XG4gdC5kb2thdGFrYW5hID0gMHgzMGM5O1xuIHQuZG9sbGFyID0gMHgwMDI0O1xuIHQuZG9sbGFyaW5mZXJpb3IgPSAweGY2ZTM7XG4gdC5kb2xsYXJtb25vc3BhY2UgPSAweGZmMDQ7XG4gdC5kb2xsYXJvbGRzdHlsZSA9IDB4ZjcyNDtcbiB0LmRvbGxhcnNtYWxsID0gMHhmZTY5O1xuIHQuZG9sbGFyc3VwZXJpb3IgPSAweGY2ZTQ7XG4gdC5kb25nID0gMHgyMGFiO1xuIHQuZG9ydXNxdWFyZSA9IDB4MzMyNjtcbiB0LmRvdGFjY2VudCA9IDB4MDJkOTtcbiB0LmRvdGFjY2VudGNtYiA9IDB4MDMwNztcbiB0LmRvdGJlbG93Y21iID0gMHgwMzIzO1xuIHQuZG90YmVsb3djb21iID0gMHgwMzIzO1xuIHQuZG90a2F0YWthbmEgPSAweDMwZmI7XG4gdC5kb3RsZXNzaSA9IDB4MDEzMTtcbiB0LmRvdGxlc3NqID0gMHhmNmJlO1xuIHQuZG90bGVzc2pzdHJva2Vob29rID0gMHgwMjg0O1xuIHQuZG90bWF0aCA9IDB4MjJjNTtcbiB0LmRvdHRlZGNpcmNsZSA9IDB4MjVjYztcbiB0LmRvdWJsZXlvZHBhdGFoID0gMHhmYjFmO1xuIHQuZG91YmxleW9kcGF0YWhoZWJyZXcgPSAweGZiMWY7XG4gdC5kb3dudGFja2JlbG93Y21iID0gMHgwMzFlO1xuIHQuZG93bnRhY2ttb2QgPSAweDAyZDU7XG4gdC5kcGFyZW4gPSAweDI0OWY7XG4gdC5kc3VwZXJpb3IgPSAweGY2ZWI7XG4gdC5kdGFpbCA9IDB4MDI1NjtcbiB0LmR0b3BiYXIgPSAweDAxOGM7XG4gdC5kdWhpcmFnYW5hID0gMHgzMDY1O1xuIHQuZHVrYXRha2FuYSA9IDB4MzBjNTtcbiB0LmR6ID0gMHgwMWYzO1xuIHQuZHphbHRvbmUgPSAweDAyYTM7XG4gdC5kemNhcm9uID0gMHgwMWM2O1xuIHQuZHpjdXJsID0gMHgwMmE1O1xuIHQuZHplYWJraGFzaWFuY3lyaWxsaWMgPSAweDA0ZTE7XG4gdC5kemVjeXJpbGxpYyA9IDB4MDQ1NTtcbiB0LmR6aGVjeXJpbGxpYyA9IDB4MDQ1ZjtcbiB0LmUgPSAweDAwNjU7XG4gdC5lYWN1dGUgPSAweDAwZTk7XG4gdC5lYXJ0aCA9IDB4MjY0MTtcbiB0LmViZW5nYWxpID0gMHgwOThmO1xuIHQuZWJvcG9tb2ZvID0gMHgzMTFjO1xuIHQuZWJyZXZlID0gMHgwMTE1O1xuIHQuZWNhbmRyYWRldmEgPSAweDA5MGQ7XG4gdC5lY2FuZHJhZ3VqYXJhdGkgPSAweDBhOGQ7XG4gdC5lY2FuZHJhdm93ZWxzaWduZGV2YSA9IDB4MDk0NTtcbiB0LmVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjNTtcbiB0LmVjYXJvbiA9IDB4MDExYjtcbiB0LmVjZWRpbGxhYnJldmUgPSAweDFlMWQ7XG4gdC5lY2hhcm1lbmlhbiA9IDB4MDU2NTtcbiB0LmVjaHlpd25hcm1lbmlhbiA9IDB4MDU4NztcbiB0LmVjaXJjbGUgPSAweDI0ZDQ7XG4gdC5lY2lyY3VtZmxleCA9IDB4MDBlYTtcbiB0LmVjaXJjdW1mbGV4YWN1dGUgPSAweDFlYmY7XG4gdC5lY2lyY3VtZmxleGJlbG93ID0gMHgxZTE5O1xuIHQuZWNpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVjNztcbiB0LmVjaXJjdW1mbGV4Z3JhdmUgPSAweDFlYzE7XG4gdC5lY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVjMztcbiB0LmVjaXJjdW1mbGV4dGlsZGUgPSAweDFlYzU7XG4gdC5lY3lyaWxsaWMgPSAweDA0NTQ7XG4gdC5lZGJsZ3JhdmUgPSAweDAyMDU7XG4gdC5lZGV2YSA9IDB4MDkwZjtcbiB0LmVkaWVyZXNpcyA9IDB4MDBlYjtcbiB0LmVkb3QgPSAweDAxMTc7XG4gdC5lZG90YWNjZW50ID0gMHgwMTE3O1xuIHQuZWRvdGJlbG93ID0gMHgxZWI5O1xuIHQuZWVndXJtdWtoaSA9IDB4MGEwZjtcbiB0LmVlbWF0cmFndXJtdWtoaSA9IDB4MGE0NztcbiB0LmVmY3lyaWxsaWMgPSAweDA0NDQ7XG4gdC5lZ3JhdmUgPSAweDAwZTg7XG4gdC5lZ3VqYXJhdGkgPSAweDBhOGY7XG4gdC5laGFybWVuaWFuID0gMHgwNTY3O1xuIHQuZWhib3BvbW9mbyA9IDB4MzExZDtcbiB0LmVoaXJhZ2FuYSA9IDB4MzA0ODtcbiB0LmVob29rYWJvdmUgPSAweDFlYmI7XG4gdC5laWJvcG9tb2ZvID0gMHgzMTFmO1xuIHQuZWlnaHQgPSAweDAwMzg7XG4gdC5laWdodGFyYWJpYyA9IDB4MDY2ODtcbiB0LmVpZ2h0YmVuZ2FsaSA9IDB4MDllZTtcbiB0LmVpZ2h0Y2lyY2xlID0gMHgyNDY3O1xuIHQuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzkxO1xuIHQuZWlnaHRkZXZhID0gMHgwOTZlO1xuIHQuZWlnaHRlZW5jaXJjbGUgPSAweDI0NzE7XG4gdC5laWdodGVlbnBhcmVuID0gMHgyNDg1O1xuIHQuZWlnaHRlZW5wZXJpb2QgPSAweDI0OTk7XG4gdC5laWdodGd1amFyYXRpID0gMHgwYWVlO1xuIHQuZWlnaHRndXJtdWtoaSA9IDB4MGE2ZTtcbiB0LmVpZ2h0aGFja2FyYWJpYyA9IDB4MDY2ODtcbiB0LmVpZ2h0aGFuZ3pob3UgPSAweDMwMjg7XG4gdC5laWdodGhub3RlYmVhbWVkID0gMHgyNjZiO1xuIHQuZWlnaHRpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI3O1xuIHQuZWlnaHRpbmZlcmlvciA9IDB4MjA4ODtcbiB0LmVpZ2h0bW9ub3NwYWNlID0gMHhmZjE4O1xuIHQuZWlnaHRvbGRzdHlsZSA9IDB4ZjczODtcbiB0LmVpZ2h0cGFyZW4gPSAweDI0N2I7XG4gdC5laWdodHBlcmlvZCA9IDB4MjQ4ZjtcbiB0LmVpZ2h0cGVyc2lhbiA9IDB4MDZmODtcbiB0LmVpZ2h0cm9tYW4gPSAweDIxNzc7XG4gdC5laWdodHN1cGVyaW9yID0gMHgyMDc4O1xuIHQuZWlnaHR0aGFpID0gMHgwZTU4O1xuIHQuZWludmVydGVkYnJldmUgPSAweDAyMDc7XG4gdC5laW90aWZpZWRjeXJpbGxpYyA9IDB4MDQ2NTtcbiB0LmVrYXRha2FuYSA9IDB4MzBhODtcbiB0LmVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3NDtcbiB0LmVrb25rYXJndXJtdWtoaSA9IDB4MGE3NDtcbiB0LmVrb3JlYW4gPSAweDMxNTQ7XG4gdC5lbGN5cmlsbGljID0gMHgwNDNiO1xuIHQuZWxlbWVudCA9IDB4MjIwODtcbiB0LmVsZXZlbmNpcmNsZSA9IDB4MjQ2YTtcbiB0LmVsZXZlbnBhcmVuID0gMHgyNDdlO1xuIHQuZWxldmVucGVyaW9kID0gMHgyNDkyO1xuIHQuZWxldmVucm9tYW4gPSAweDIxN2E7XG4gdC5lbGxpcHNpcyA9IDB4MjAyNjtcbiB0LmVsbGlwc2lzdmVydGljYWwgPSAweDIyZWU7XG4gdC5lbWFjcm9uID0gMHgwMTEzO1xuIHQuZW1hY3JvbmFjdXRlID0gMHgxZTE3O1xuIHQuZW1hY3JvbmdyYXZlID0gMHgxZTE1O1xuIHQuZW1jeXJpbGxpYyA9IDB4MDQzYztcbiB0LmVtZGFzaCA9IDB4MjAxNDtcbiB0LmVtZGFzaHZlcnRpY2FsID0gMHhmZTMxO1xuIHQuZW1vbm9zcGFjZSA9IDB4ZmY0NTtcbiB0LmVtcGhhc2lzbWFya2FybWVuaWFuID0gMHgwNTViO1xuIHQuZW1wdHlzZXQgPSAweDIyMDU7XG4gdC5lbmJvcG9tb2ZvID0gMHgzMTIzO1xuIHQuZW5jeXJpbGxpYyA9IDB4MDQzZDtcbiB0LmVuZGFzaCA9IDB4MjAxMztcbiB0LmVuZGFzaHZlcnRpY2FsID0gMHhmZTMyO1xuIHQuZW5kZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDRhMztcbiB0LmVuZyA9IDB4MDE0YjtcbiB0LmVuZ2JvcG9tb2ZvID0gMHgzMTI1O1xuIHQuZW5naGVjeXJpbGxpYyA9IDB4MDRhNTtcbiB0LmVuaG9va2N5cmlsbGljID0gMHgwNGM4O1xuIHQuZW5zcGFjZSA9IDB4MjAwMjtcbiB0LmVvZ29uZWsgPSAweDAxMTk7XG4gdC5lb2tvcmVhbiA9IDB4MzE1MztcbiB0LmVvcGVuID0gMHgwMjViO1xuIHQuZW9wZW5jbG9zZWQgPSAweDAyOWE7XG4gdC5lb3BlbnJldmVyc2VkID0gMHgwMjVjO1xuIHQuZW9wZW5yZXZlcnNlZGNsb3NlZCA9IDB4MDI1ZTtcbiB0LmVvcGVucmV2ZXJzZWRob29rID0gMHgwMjVkO1xuIHQuZXBhcmVuID0gMHgyNGEwO1xuIHQuZXBzaWxvbiA9IDB4MDNiNTtcbiB0LmVwc2lsb250b25vcyA9IDB4MDNhZDtcbiB0LmVxdWFsID0gMHgwMDNkO1xuIHQuZXF1YWxtb25vc3BhY2UgPSAweGZmMWQ7XG4gdC5lcXVhbHNtYWxsID0gMHhmZTY2O1xuIHQuZXF1YWxzdXBlcmlvciA9IDB4MjA3YztcbiB0LmVxdWl2YWxlbmNlID0gMHgyMjYxO1xuIHQuZXJib3BvbW9mbyA9IDB4MzEyNjtcbiB0LmVyY3lyaWxsaWMgPSAweDA0NDA7XG4gdC5lcmV2ZXJzZWQgPSAweDAyNTg7XG4gdC5lcmV2ZXJzZWRjeXJpbGxpYyA9IDB4MDQ0ZDtcbiB0LmVzY3lyaWxsaWMgPSAweDA0NDE7XG4gdC5lc2Rlc2NlbmRlcmN5cmlsbGljID0gMHgwNGFiO1xuIHQuZXNoID0gMHgwMjgzO1xuIHQuZXNoY3VybCA9IDB4MDI4NjtcbiB0LmVzaG9ydGRldmEgPSAweDA5MGU7XG4gdC5lc2hvcnR2b3dlbHNpZ25kZXZhID0gMHgwOTQ2O1xuIHQuZXNocmV2ZXJzZWRsb29wID0gMHgwMWFhO1xuIHQuZXNoc3F1YXRyZXZlcnNlZCA9IDB4MDI4NTtcbiB0LmVzbWFsbGhpcmFnYW5hID0gMHgzMDQ3O1xuIHQuZXNtYWxsa2F0YWthbmEgPSAweDMwYTc7XG4gdC5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2YTtcbiB0LmVzdGltYXRlZCA9IDB4MjEyZTtcbiB0LmVzdXBlcmlvciA9IDB4ZjZlYztcbiB0LmV0YSA9IDB4MDNiNztcbiB0LmV0YXJtZW5pYW4gPSAweDA1Njg7XG4gdC5ldGF0b25vcyA9IDB4MDNhZTtcbiB0LmV0aCA9IDB4MDBmMDtcbiB0LmV0aWxkZSA9IDB4MWViZDtcbiB0LmV0aWxkZWJlbG93ID0gMHgxZTFiO1xuIHQuZXRuYWh0YWZvdWtoaGVicmV3ID0gMHgwNTkxO1xuIHQuZXRuYWh0YWZvdWtobGVmdGhlYnJldyA9IDB4MDU5MTtcbiB0LmV0bmFodGFoZWJyZXcgPSAweDA1OTE7XG4gdC5ldG5haHRhbGVmdGhlYnJldyA9IDB4MDU5MTtcbiB0LmV0dXJuZWQgPSAweDAxZGQ7XG4gdC5ldWtvcmVhbiA9IDB4MzE2MTtcbiB0LmV1cm8gPSAweDIwYWM7XG4gdC5ldm93ZWxzaWduYmVuZ2FsaSA9IDB4MDljNztcbiB0LmV2b3dlbHNpZ25kZXZhID0gMHgwOTQ3O1xuIHQuZXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWM3O1xuIHQuZXhjbGFtID0gMHgwMDIxO1xuIHQuZXhjbGFtYXJtZW5pYW4gPSAweDA1NWM7XG4gdC5leGNsYW1kYmwgPSAweDIwM2M7XG4gdC5leGNsYW1kb3duID0gMHgwMGExO1xuIHQuZXhjbGFtZG93bnNtYWxsID0gMHhmN2ExO1xuIHQuZXhjbGFtbW9ub3NwYWNlID0gMHhmZjAxO1xuIHQuZXhjbGFtc21hbGwgPSAweGY3MjE7XG4gdC5leGlzdGVudGlhbCA9IDB4MjIwMztcbiB0LmV6aCA9IDB4MDI5MjtcbiB0LmV6aGNhcm9uID0gMHgwMWVmO1xuIHQuZXpoY3VybCA9IDB4MDI5MztcbiB0LmV6aHJldmVyc2VkID0gMHgwMWI5O1xuIHQuZXpodGFpbCA9IDB4MDFiYTtcbiB0LmYgPSAweDAwNjY7XG4gdC5mYWRldmEgPSAweDA5NWU7XG4gdC5mYWd1cm11a2hpID0gMHgwYTVlO1xuIHQuZmFocmVuaGVpdCA9IDB4MjEwOTtcbiB0LmZhdGhhYXJhYmljID0gMHgwNjRlO1xuIHQuZmF0aGFsb3dhcmFiaWMgPSAweDA2NGU7XG4gdC5mYXRoYXRhbmFyYWJpYyA9IDB4MDY0YjtcbiB0LmZib3BvbW9mbyA9IDB4MzEwODtcbiB0LmZjaXJjbGUgPSAweDI0ZDU7XG4gdC5mZG90YWNjZW50ID0gMHgxZTFmO1xuIHQuZmVoYXJhYmljID0gMHgwNjQxO1xuIHQuZmVoYXJtZW5pYW4gPSAweDA1ODY7XG4gdC5mZWhmaW5hbGFyYWJpYyA9IDB4ZmVkMjtcbiB0LmZlaGluaXRpYWxhcmFiaWMgPSAweGZlZDM7XG4gdC5mZWhtZWRpYWxhcmFiaWMgPSAweGZlZDQ7XG4gdC5mZWljb3B0aWMgPSAweDAzZTU7XG4gdC5mZW1hbGUgPSAweDI2NDA7XG4gdC5mZiA9IDB4ZmIwMDtcbiB0LmZfZiA9IDB4ZmIwMDtcbiB0LmZmaSA9IDB4ZmIwMztcbiB0LmZmbCA9IDB4ZmIwNDtcbiB0LmZpID0gMHhmYjAxO1xuIHQuZmlmdGVlbmNpcmNsZSA9IDB4MjQ2ZTtcbiB0LmZpZnRlZW5wYXJlbiA9IDB4MjQ4MjtcbiB0LmZpZnRlZW5wZXJpb2QgPSAweDI0OTY7XG4gdC5maWd1cmVkYXNoID0gMHgyMDEyO1xuIHQuZmlsbGVkYm94ID0gMHgyNWEwO1xuIHQuZmlsbGVkcmVjdCA9IDB4MjVhYztcbiB0LmZpbmFsa2FmID0gMHgwNWRhO1xuIHQuZmluYWxrYWZkYWdlc2ggPSAweGZiM2E7XG4gdC5maW5hbGthZmRhZ2VzaGhlYnJldyA9IDB4ZmIzYTtcbiB0LmZpbmFsa2FmaGVicmV3ID0gMHgwNWRhO1xuIHQuZmluYWxtZW0gPSAweDA1ZGQ7XG4gdC5maW5hbG1lbWhlYnJldyA9IDB4MDVkZDtcbiB0LmZpbmFsbnVuID0gMHgwNWRmO1xuIHQuZmluYWxudW5oZWJyZXcgPSAweDA1ZGY7XG4gdC5maW5hbHBlID0gMHgwNWUzO1xuIHQuZmluYWxwZWhlYnJldyA9IDB4MDVlMztcbiB0LmZpbmFsdHNhZGkgPSAweDA1ZTU7XG4gdC5maW5hbHRzYWRpaGVicmV3ID0gMHgwNWU1O1xuIHQuZmlyc3R0b25lY2hpbmVzZSA9IDB4MDJjOTtcbiB0LmZpc2hleWUgPSAweDI1Yzk7XG4gdC5maXRhY3lyaWxsaWMgPSAweDA0NzM7XG4gdC5maXZlID0gMHgwMDM1O1xuIHQuZml2ZWFyYWJpYyA9IDB4MDY2NTtcbiB0LmZpdmViZW5nYWxpID0gMHgwOWViO1xuIHQuZml2ZWNpcmNsZSA9IDB4MjQ2NDtcbiB0LmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhlO1xuIHQuZml2ZWRldmEgPSAweDA5NmI7XG4gdC5maXZlZWlnaHRocyA9IDB4MjE1ZDtcbiB0LmZpdmVndWphcmF0aSA9IDB4MGFlYjtcbiB0LmZpdmVndXJtdWtoaSA9IDB4MGE2YjtcbiB0LmZpdmVoYWNrYXJhYmljID0gMHgwNjY1O1xuIHQuZml2ZWhhbmd6aG91ID0gMHgzMDI1O1xuIHQuZml2ZWlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjQ7XG4gdC5maXZlaW5mZXJpb3IgPSAweDIwODU7XG4gdC5maXZlbW9ub3NwYWNlID0gMHhmZjE1O1xuIHQuZml2ZW9sZHN0eWxlID0gMHhmNzM1O1xuIHQuZml2ZXBhcmVuID0gMHgyNDc4O1xuIHQuZml2ZXBlcmlvZCA9IDB4MjQ4YztcbiB0LmZpdmVwZXJzaWFuID0gMHgwNmY1O1xuIHQuZml2ZXJvbWFuID0gMHgyMTc0O1xuIHQuZml2ZXN1cGVyaW9yID0gMHgyMDc1O1xuIHQuZml2ZXRoYWkgPSAweDBlNTU7XG4gdC5mbCA9IDB4ZmIwMjtcbiB0LmZsb3JpbiA9IDB4MDE5MjtcbiB0LmZtb25vc3BhY2UgPSAweGZmNDY7XG4gdC5mbXNxdWFyZSA9IDB4MzM5OTtcbiB0LmZvZmFudGhhaSA9IDB4MGUxZjtcbiB0LmZvZmF0aGFpID0gMHgwZTFkO1xuIHQuZm9uZ21hbnRoYWkgPSAweDBlNGY7XG4gdC5mb3JhbGwgPSAweDIyMDA7XG4gdC5mb3VyID0gMHgwMDM0O1xuIHQuZm91cmFyYWJpYyA9IDB4MDY2NDtcbiB0LmZvdXJiZW5nYWxpID0gMHgwOWVhO1xuIHQuZm91cmNpcmNsZSA9IDB4MjQ2MztcbiB0LmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzhkO1xuIHQuZm91cmRldmEgPSAweDA5NmE7XG4gdC5mb3VyZ3VqYXJhdGkgPSAweDBhZWE7XG4gdC5mb3VyZ3VybXVraGkgPSAweDBhNmE7XG4gdC5mb3VyaGFja2FyYWJpYyA9IDB4MDY2NDtcbiB0LmZvdXJoYW5nemhvdSA9IDB4MzAyNDtcbiB0LmZvdXJpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjIzO1xuIHQuZm91cmluZmVyaW9yID0gMHgyMDg0O1xuIHQuZm91cm1vbm9zcGFjZSA9IDB4ZmYxNDtcbiB0LmZvdXJudW1lcmF0b3JiZW5nYWxpID0gMHgwOWY3O1xuIHQuZm91cm9sZHN0eWxlID0gMHhmNzM0O1xuIHQuZm91cnBhcmVuID0gMHgyNDc3O1xuIHQuZm91cnBlcmlvZCA9IDB4MjQ4YjtcbiB0LmZvdXJwZXJzaWFuID0gMHgwNmY0O1xuIHQuZm91cnJvbWFuID0gMHgyMTczO1xuIHQuZm91cnN1cGVyaW9yID0gMHgyMDc0O1xuIHQuZm91cnRlZW5jaXJjbGUgPSAweDI0NmQ7XG4gdC5mb3VydGVlbnBhcmVuID0gMHgyNDgxO1xuIHQuZm91cnRlZW5wZXJpb2QgPSAweDI0OTU7XG4gdC5mb3VydGhhaSA9IDB4MGU1NDtcbiB0LmZvdXJ0aHRvbmVjaGluZXNlID0gMHgwMmNiO1xuIHQuZnBhcmVuID0gMHgyNGExO1xuIHQuZnJhY3Rpb24gPSAweDIwNDQ7XG4gdC5mcmFuYyA9IDB4MjBhMztcbiB0LmcgPSAweDAwNjc7XG4gdC5nYWJlbmdhbGkgPSAweDA5OTc7XG4gdC5nYWN1dGUgPSAweDAxZjU7XG4gdC5nYWRldmEgPSAweDA5MTc7XG4gdC5nYWZhcmFiaWMgPSAweDA2YWY7XG4gdC5nYWZmaW5hbGFyYWJpYyA9IDB4ZmI5MztcbiB0LmdhZmluaXRpYWxhcmFiaWMgPSAweGZiOTQ7XG4gdC5nYWZtZWRpYWxhcmFiaWMgPSAweGZiOTU7XG4gdC5nYWd1amFyYXRpID0gMHgwYTk3O1xuIHQuZ2FndXJtdWtoaSA9IDB4MGExNztcbiB0LmdhaGlyYWdhbmEgPSAweDMwNGM7XG4gdC5nYWthdGFrYW5hID0gMHgzMGFjO1xuIHQuZ2FtbWEgPSAweDAzYjM7XG4gdC5nYW1tYWxhdGluc21hbGwgPSAweDAyNjM7XG4gdC5nYW1tYXN1cGVyaW9yID0gMHgwMmUwO1xuIHQuZ2FuZ2lhY29wdGljID0gMHgwM2ViO1xuIHQuZ2JvcG9tb2ZvID0gMHgzMTBkO1xuIHQuZ2JyZXZlID0gMHgwMTFmO1xuIHQuZ2Nhcm9uID0gMHgwMWU3O1xuIHQuZ2NlZGlsbGEgPSAweDAxMjM7XG4gdC5nY2lyY2xlID0gMHgyNGQ2O1xuIHQuZ2NpcmN1bWZsZXggPSAweDAxMWQ7XG4gdC5nY29tbWFhY2NlbnQgPSAweDAxMjM7XG4gdC5nZG90ID0gMHgwMTIxO1xuIHQuZ2RvdGFjY2VudCA9IDB4MDEyMTtcbiB0LmdlY3lyaWxsaWMgPSAweDA0MzM7XG4gdC5nZWhpcmFnYW5hID0gMHgzMDUyO1xuIHQuZ2VrYXRha2FuYSA9IDB4MzBiMjtcbiB0Lmdlb21ldHJpY2FsbHllcXVhbCA9IDB4MjI1MTtcbiB0LmdlcmVzaGFjY2VudGhlYnJldyA9IDB4MDU5YztcbiB0LmdlcmVzaGhlYnJldyA9IDB4MDVmMztcbiB0LmdlcmVzaG11cWRhbWhlYnJldyA9IDB4MDU5ZDtcbiB0Lmdlcm1hbmRibHMgPSAweDAwZGY7XG4gdC5nZXJzaGF5aW1hY2NlbnRoZWJyZXcgPSAweDA1OWU7XG4gdC5nZXJzaGF5aW1oZWJyZXcgPSAweDA1ZjQ7XG4gdC5nZXRhbWFyayA9IDB4MzAxMztcbiB0LmdoYWJlbmdhbGkgPSAweDA5OTg7XG4gdC5naGFkYXJtZW5pYW4gPSAweDA1NzI7XG4gdC5naGFkZXZhID0gMHgwOTE4O1xuIHQuZ2hhZ3VqYXJhdGkgPSAweDBhOTg7XG4gdC5naGFndXJtdWtoaSA9IDB4MGExODtcbiB0LmdoYWluYXJhYmljID0gMHgwNjNhO1xuIHQuZ2hhaW5maW5hbGFyYWJpYyA9IDB4ZmVjZTtcbiB0LmdoYWluaW5pdGlhbGFyYWJpYyA9IDB4ZmVjZjtcbiB0LmdoYWlubWVkaWFsYXJhYmljID0gMHhmZWQwO1xuIHQuZ2hlbWlkZGxlaG9va2N5cmlsbGljID0gMHgwNDk1O1xuIHQuZ2hlc3Ryb2tlY3lyaWxsaWMgPSAweDA0OTM7XG4gdC5naGV1cHR1cm5jeXJpbGxpYyA9IDB4MDQ5MTtcbiB0LmdoaGFkZXZhID0gMHgwOTVhO1xuIHQuZ2hoYWd1cm11a2hpID0gMHgwYTVhO1xuIHQuZ2hvb2sgPSAweDAyNjA7XG4gdC5naHpzcXVhcmUgPSAweDMzOTM7XG4gdC5naWhpcmFnYW5hID0gMHgzMDRlO1xuIHQuZ2lrYXRha2FuYSA9IDB4MzBhZTtcbiB0LmdpbWFybWVuaWFuID0gMHgwNTYzO1xuIHQuZ2ltZWwgPSAweDA1ZDI7XG4gdC5naW1lbGRhZ2VzaCA9IDB4ZmIzMjtcbiB0LmdpbWVsZGFnZXNoaGVicmV3ID0gMHhmYjMyO1xuIHQuZ2ltZWxoZWJyZXcgPSAweDA1ZDI7XG4gdC5namVjeXJpbGxpYyA9IDB4MDQ1MztcbiB0Lmdsb3R0YWxpbnZlcnRlZHN0cm9rZSA9IDB4MDFiZTtcbiB0Lmdsb3R0YWxzdG9wID0gMHgwMjk0O1xuIHQuZ2xvdHRhbHN0b3BpbnZlcnRlZCA9IDB4MDI5NjtcbiB0Lmdsb3R0YWxzdG9wbW9kID0gMHgwMmMwO1xuIHQuZ2xvdHRhbHN0b3ByZXZlcnNlZCA9IDB4MDI5NTtcbiB0Lmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2QgPSAweDAyYzE7XG4gdC5nbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3IgPSAweDAyZTQ7XG4gdC5nbG90dGFsc3RvcHN0cm9rZSA9IDB4MDJhMTtcbiB0Lmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQgPSAweDAyYTI7XG4gdC5nbWFjcm9uID0gMHgxZTIxO1xuIHQuZ21vbm9zcGFjZSA9IDB4ZmY0NztcbiB0LmdvaGlyYWdhbmEgPSAweDMwNTQ7XG4gdC5nb2thdGFrYW5hID0gMHgzMGI0O1xuIHQuZ3BhcmVuID0gMHgyNGEyO1xuIHQuZ3Bhc3F1YXJlID0gMHgzM2FjO1xuIHQuZ3JhZGllbnQgPSAweDIyMDc7XG4gdC5ncmF2ZSA9IDB4MDA2MDtcbiB0LmdyYXZlYmVsb3djbWIgPSAweDAzMTY7XG4gdC5ncmF2ZWNtYiA9IDB4MDMwMDtcbiB0LmdyYXZlY29tYiA9IDB4MDMwMDtcbiB0LmdyYXZlZGV2YSA9IDB4MDk1MztcbiB0LmdyYXZlbG93bW9kID0gMHgwMmNlO1xuIHQuZ3JhdmVtb25vc3BhY2UgPSAweGZmNDA7XG4gdC5ncmF2ZXRvbmVjbWIgPSAweDAzNDA7XG4gdC5ncmVhdGVyID0gMHgwMDNlO1xuIHQuZ3JlYXRlcmVxdWFsID0gMHgyMjY1O1xuIHQuZ3JlYXRlcmVxdWFsb3JsZXNzID0gMHgyMmRiO1xuIHQuZ3JlYXRlcm1vbm9zcGFjZSA9IDB4ZmYxZTtcbiB0LmdyZWF0ZXJvcmVxdWl2YWxlbnQgPSAweDIyNzM7XG4gdC5ncmVhdGVyb3JsZXNzID0gMHgyMjc3O1xuIHQuZ3JlYXRlcm92ZXJlcXVhbCA9IDB4MjI2NztcbiB0LmdyZWF0ZXJzbWFsbCA9IDB4ZmU2NTtcbiB0LmdzY3JpcHQgPSAweDAyNjE7XG4gdC5nc3Ryb2tlID0gMHgwMWU1O1xuIHQuZ3VoaXJhZ2FuYSA9IDB4MzA1MDtcbiB0Lmd1aWxsZW1vdGxlZnQgPSAweDAwYWI7XG4gdC5ndWlsbGVtb3RyaWdodCA9IDB4MDBiYjtcbiB0Lmd1aWxzaW5nbGxlZnQgPSAweDIwMzk7XG4gdC5ndWlsc2luZ2xyaWdodCA9IDB4MjAzYTtcbiB0Lmd1a2F0YWthbmEgPSAweDMwYjA7XG4gdC5ndXJhbXVzcXVhcmUgPSAweDMzMTg7XG4gdC5neXNxdWFyZSA9IDB4MzNjOTtcbiB0LmggPSAweDAwNjg7XG4gdC5oYWFia2hhc2lhbmN5cmlsbGljID0gMHgwNGE5O1xuIHQuaGFhbHRvbmVhcmFiaWMgPSAweDA2YzE7XG4gdC5oYWJlbmdhbGkgPSAweDA5Yjk7XG4gdC5oYWRlc2NlbmRlcmN5cmlsbGljID0gMHgwNGIzO1xuIHQuaGFkZXZhID0gMHgwOTM5O1xuIHQuaGFndWphcmF0aSA9IDB4MGFiOTtcbiB0LmhhZ3VybXVraGkgPSAweDBhMzk7XG4gdC5oYWhhcmFiaWMgPSAweDA2MmQ7XG4gdC5oYWhmaW5hbGFyYWJpYyA9IDB4ZmVhMjtcbiB0LmhhaGluaXRpYWxhcmFiaWMgPSAweGZlYTM7XG4gdC5oYWhpcmFnYW5hID0gMHgzMDZmO1xuIHQuaGFobWVkaWFsYXJhYmljID0gMHhmZWE0O1xuIHQuaGFpdHVzcXVhcmUgPSAweDMzMmE7XG4gdC5oYWthdGFrYW5hID0gMHgzMGNmO1xuIHQuaGFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4YTtcbiB0LmhhbGFudGd1cm11a2hpID0gMHgwYTRkO1xuIHQuaGFtemFhcmFiaWMgPSAweDA2MjE7XG4gdC5oYW16YWxvd2FyYWJpYyA9IDB4MDYyMTtcbiB0Lmhhbmd1bGZpbGxlciA9IDB4MzE2NDtcbiB0LmhhcmRzaWduY3lyaWxsaWMgPSAweDA0NGE7XG4gdC5oYXJwb29ubGVmdGJhcmJ1cCA9IDB4MjFiYztcbiB0LmhhcnBvb25yaWdodGJhcmJ1cCA9IDB4MjFjMDtcbiB0Lmhhc3F1YXJlID0gMHgzM2NhO1xuIHQuaGF0YWZwYXRhaCA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgxNiA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgyMyA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWgyZiA9IDB4MDViMjtcbiB0LmhhdGFmcGF0YWhoZWJyZXcgPSAweDA1YjI7XG4gdC5oYXRhZnBhdGFobmFycm93aGVicmV3ID0gMHgwNWIyO1xuIHQuaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXcgPSAweDA1YjI7XG4gdC5oYXRhZnBhdGFod2lkZWhlYnJldyA9IDB4MDViMjtcbiB0LmhhdGFmcWFtYXRzID0gMHgwNWIzO1xuIHQuaGF0YWZxYW1hdHMxYiA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzMjggPSAweDA1YjM7XG4gdC5oYXRhZnFhbWF0czM0ID0gMHgwNWIzO1xuIHQuaGF0YWZxYW1hdHNoZWJyZXcgPSAweDA1YjM7XG4gdC5oYXRhZnFhbWF0c25hcnJvd2hlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzcXVhcnRlcmhlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmcWFtYXRzd2lkZWhlYnJldyA9IDB4MDViMztcbiB0LmhhdGFmc2Vnb2wgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMTcgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMjQgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29sMzAgPSAweDA1YjE7XG4gdC5oYXRhZnNlZ29saGVicmV3ID0gMHgwNWIxO1xuIHQuaGF0YWZzZWdvbG5hcnJvd2hlYnJldyA9IDB4MDViMTtcbiB0LmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3ID0gMHgwNWIxO1xuIHQuaGF0YWZzZWdvbHdpZGVoZWJyZXcgPSAweDA1YjE7XG4gdC5oYmFyID0gMHgwMTI3O1xuIHQuaGJvcG9tb2ZvID0gMHgzMTBmO1xuIHQuaGJyZXZlYmVsb3cgPSAweDFlMmI7XG4gdC5oY2VkaWxsYSA9IDB4MWUyOTtcbiB0LmhjaXJjbGUgPSAweDI0ZDc7XG4gdC5oY2lyY3VtZmxleCA9IDB4MDEyNTtcbiB0LmhkaWVyZXNpcyA9IDB4MWUyNztcbiB0Lmhkb3RhY2NlbnQgPSAweDFlMjM7XG4gdC5oZG90YmVsb3cgPSAweDFlMjU7XG4gdC5oZSA9IDB4MDVkNDtcbiB0LmhlYXJ0ID0gMHgyNjY1O1xuIHQuaGVhcnRzdWl0YmxhY2sgPSAweDI2NjU7XG4gdC5oZWFydHN1aXR3aGl0ZSA9IDB4MjY2MTtcbiB0LmhlZGFnZXNoID0gMHhmYjM0O1xuIHQuaGVkYWdlc2hoZWJyZXcgPSAweGZiMzQ7XG4gdC5oZWhhbHRvbmVhcmFiaWMgPSAweDA2YzE7XG4gdC5oZWhhcmFiaWMgPSAweDA2NDc7XG4gdC5oZWhlYnJldyA9IDB4MDVkNDtcbiB0LmhlaGZpbmFsYWx0b25lYXJhYmljID0gMHhmYmE3O1xuIHQuaGVoZmluYWxhbHR0d29hcmFiaWMgPSAweGZlZWE7XG4gdC5oZWhmaW5hbGFyYWJpYyA9IDB4ZmVlYTtcbiB0LmhlaGhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmJhNTtcbiB0LmhlaGhhbXphYWJvdmVpc29sYXRlZGFyYWJpYyA9IDB4ZmJhNDtcbiB0LmhlaGluaXRpYWxhbHRvbmVhcmFiaWMgPSAweGZiYTg7XG4gdC5oZWhpbml0aWFsYXJhYmljID0gMHhmZWViO1xuIHQuaGVoaXJhZ2FuYSA9IDB4MzA3ODtcbiB0LmhlaG1lZGlhbGFsdG9uZWFyYWJpYyA9IDB4ZmJhOTtcbiB0LmhlaG1lZGlhbGFyYWJpYyA9IDB4ZmVlYztcbiB0LmhlaXNlaWVyYXNxdWFyZSA9IDB4MzM3YjtcbiB0Lmhla2F0YWthbmEgPSAweDMwZDg7XG4gdC5oZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhkO1xuIHQuaGVrdXRhYXJ1c3F1YXJlID0gMHgzMzM2O1xuIHQuaGVuZ2hvb2sgPSAweDAyNjc7XG4gdC5oZXJ1dHVzcXVhcmUgPSAweDMzMzk7XG4gdC5oZXQgPSAweDA1ZDc7XG4gdC5oZXRoZWJyZXcgPSAweDA1ZDc7XG4gdC5oaG9vayA9IDB4MDI2NjtcbiB0Lmhob29rc3VwZXJpb3IgPSAweDAyYjE7XG4gdC5oaWV1aGFjaXJjbGVrb3JlYW4gPSAweDMyN2I7XG4gdC5oaWV1aGFwYXJlbmtvcmVhbiA9IDB4MzIxYjtcbiB0LmhpZXVoY2lyY2xla29yZWFuID0gMHgzMjZkO1xuIHQuaGlldWhrb3JlYW4gPSAweDMxNGU7XG4gdC5oaWV1aHBhcmVua29yZWFuID0gMHgzMjBkO1xuIHQuaGloaXJhZ2FuYSA9IDB4MzA3MjtcbiB0Lmhpa2F0YWthbmEgPSAweDMwZDI7XG4gdC5oaWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhiO1xuIHQuaGlyaXEgPSAweDA1YjQ7XG4gdC5oaXJpcTE0ID0gMHgwNWI0O1xuIHQuaGlyaXEyMSA9IDB4MDViNDtcbiB0LmhpcmlxMmQgPSAweDA1YjQ7XG4gdC5oaXJpcWhlYnJldyA9IDB4MDViNDtcbiB0LmhpcmlxbmFycm93aGVicmV3ID0gMHgwNWI0O1xuIHQuaGlyaXFxdWFydGVyaGVicmV3ID0gMHgwNWI0O1xuIHQuaGlyaXF3aWRlaGVicmV3ID0gMHgwNWI0O1xuIHQuaGxpbmViZWxvdyA9IDB4MWU5NjtcbiB0Lmhtb25vc3BhY2UgPSAweGZmNDg7XG4gdC5ob2FybWVuaWFuID0gMHgwNTcwO1xuIHQuaG9oaXB0aGFpID0gMHgwZTJiO1xuIHQuaG9oaXJhZ2FuYSA9IDB4MzA3YjtcbiB0Lmhva2F0YWthbmEgPSAweDMwZGI7XG4gdC5ob2thdGFrYW5haGFsZndpZHRoID0gMHhmZjhlO1xuIHQuaG9sYW0gPSAweDA1Yjk7XG4gdC5ob2xhbTE5ID0gMHgwNWI5O1xuIHQuaG9sYW0yNiA9IDB4MDViOTtcbiB0LmhvbGFtMzIgPSAweDA1Yjk7XG4gdC5ob2xhbWhlYnJldyA9IDB4MDViOTtcbiB0LmhvbGFtbmFycm93aGVicmV3ID0gMHgwNWI5O1xuIHQuaG9sYW1xdWFydGVyaGVicmV3ID0gMHgwNWI5O1xuIHQuaG9sYW13aWRlaGVicmV3ID0gMHgwNWI5O1xuIHQuaG9ub2todWt0aGFpID0gMHgwZTJlO1xuIHQuaG9va2Fib3ZlY29tYiA9IDB4MDMwOTtcbiB0Lmhvb2tjbWIgPSAweDAzMDk7XG4gdC5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYiA9IDB4MDMyMTtcbiB0Lmhvb2tyZXRyb2ZsZXhiZWxvd2NtYiA9IDB4MDMyMjtcbiB0Lmhvb25zcXVhcmUgPSAweDMzNDI7XG4gdC5ob3JpY29wdGljID0gMHgwM2U5O1xuIHQuaG9yaXpvbnRhbGJhciA9IDB4MjAxNTtcbiB0Lmhvcm5jbWIgPSAweDAzMWI7XG4gdC5ob3RzcHJpbmdzID0gMHgyNjY4O1xuIHQuaG91c2UgPSAweDIzMDI7XG4gdC5ocGFyZW4gPSAweDI0YTM7XG4gdC5oc3VwZXJpb3IgPSAweDAyYjA7XG4gdC5odHVybmVkID0gMHgwMjY1O1xuIHQuaHVoaXJhZ2FuYSA9IDB4MzA3NTtcbiB0Lmh1aWl0b3NxdWFyZSA9IDB4MzMzMztcbiB0Lmh1a2F0YWthbmEgPSAweDMwZDU7XG4gdC5odWthdGFrYW5haGFsZndpZHRoID0gMHhmZjhjO1xuIHQuaHVuZ2FydW1sYXV0ID0gMHgwMmRkO1xuIHQuaHVuZ2FydW1sYXV0Y21iID0gMHgwMzBiO1xuIHQuaHYgPSAweDAxOTU7XG4gdC5oeXBoZW4gPSAweDAwMmQ7XG4gdC5oeXBoZW5pbmZlcmlvciA9IDB4ZjZlNTtcbiB0Lmh5cGhlbm1vbm9zcGFjZSA9IDB4ZmYwZDtcbiB0Lmh5cGhlbnNtYWxsID0gMHhmZTYzO1xuIHQuaHlwaGVuc3VwZXJpb3IgPSAweGY2ZTY7XG4gdC5oeXBoZW50d28gPSAweDIwMTA7XG4gdC5pID0gMHgwMDY5O1xuIHQuaWFjdXRlID0gMHgwMGVkO1xuIHQuaWFjeXJpbGxpYyA9IDB4MDQ0ZjtcbiB0LmliZW5nYWxpID0gMHgwOTg3O1xuIHQuaWJvcG9tb2ZvID0gMHgzMTI3O1xuIHQuaWJyZXZlID0gMHgwMTJkO1xuIHQuaWNhcm9uID0gMHgwMWQwO1xuIHQuaWNpcmNsZSA9IDB4MjRkODtcbiB0LmljaXJjdW1mbGV4ID0gMHgwMGVlO1xuIHQuaWN5cmlsbGljID0gMHgwNDU2O1xuIHQuaWRibGdyYXZlID0gMHgwMjA5O1xuIHQuaWRlb2dyYXBoZWFydGhjaXJjbGUgPSAweDMyOGY7XG4gdC5pZGVvZ3JhcGhmaXJlY2lyY2xlID0gMHgzMjhiO1xuIHQuaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuID0gMHgzMjNmO1xuIHQuaWRlb2dyYXBoaWNjYWxscGFyZW4gPSAweDMyM2E7XG4gdC5pZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZSA9IDB4MzJhNTtcbiB0LmlkZW9ncmFwaGljY2xvc2UgPSAweDMwMDY7XG4gdC5pZGVvZ3JhcGhpY2NvbW1hID0gMHgzMDAxO1xuIHQuaWRlb2dyYXBoaWNjb21tYWxlZnQgPSAweGZmNjQ7XG4gdC5pZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4gPSAweDMyMzc7XG4gdC5pZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGUgPSAweDMyYTM7XG4gdC5pZGVvZ3JhcGhpY2VhcnRocGFyZW4gPSAweDMyMmY7XG4gdC5pZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiA9IDB4MzIzZDtcbiB0LmlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlID0gMHgzMjlkO1xuIHQuaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuID0gMHgzMjQwO1xuIHQuaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUgPSAweDMyOTY7XG4gdC5pZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuID0gMHgzMjM2O1xuIHQuaWRlb2dyYXBoaWNmaXJlcGFyZW4gPSAweDMyMmI7XG4gdC5pZGVvZ3JhcGhpY2hhdmVwYXJlbiA9IDB4MzIzMjtcbiB0LmlkZW9ncmFwaGljaGlnaGNpcmNsZSA9IDB4MzJhNDtcbiB0LmlkZW9ncmFwaGljaXRlcmF0aW9ubWFyayA9IDB4MzAwNTtcbiB0LmlkZW9ncmFwaGljbGFib3JjaXJjbGUgPSAweDMyOTg7XG4gdC5pZGVvZ3JhcGhpY2xhYm9ycGFyZW4gPSAweDMyMzg7XG4gdC5pZGVvZ3JhcGhpY2xlZnRjaXJjbGUgPSAweDMyYTc7XG4gdC5pZGVvZ3JhcGhpY2xvd2NpcmNsZSA9IDB4MzJhNjtcbiB0LmlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGUgPSAweDMyYTk7XG4gdC5pZGVvZ3JhcGhpY21ldGFscGFyZW4gPSAweDMyMmU7XG4gdC5pZGVvZ3JhcGhpY21vb25wYXJlbiA9IDB4MzIyYTtcbiB0LmlkZW9ncmFwaGljbmFtZXBhcmVuID0gMHgzMjM0O1xuIHQuaWRlb2dyYXBoaWNwZXJpb2QgPSAweDMwMDI7XG4gdC5pZGVvZ3JhcGhpY3ByaW50Y2lyY2xlID0gMHgzMjllO1xuIHQuaWRlb2dyYXBoaWNyZWFjaHBhcmVuID0gMHgzMjQzO1xuIHQuaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbiA9IDB4MzIzOTtcbiB0LmlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiA9IDB4MzIzZTtcbiB0LmlkZW9ncmFwaGljcmlnaHRjaXJjbGUgPSAweDMyYTg7XG4gdC5pZGVvZ3JhcGhpY3NlY3JldGNpcmNsZSA9IDB4MzI5OTtcbiB0LmlkZW9ncmFwaGljc2VsZnBhcmVuID0gMHgzMjQyO1xuIHQuaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW4gPSAweDMyMzM7XG4gdC5pZGVvZ3JhcGhpY3NwYWNlID0gMHgzMDAwO1xuIHQuaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4gPSAweDMyMzU7XG4gdC5pZGVvZ3JhcGhpY3N0b2NrcGFyZW4gPSAweDMyMzE7XG4gdC5pZGVvZ3JhcGhpY3N0dWR5cGFyZW4gPSAweDMyM2I7XG4gdC5pZGVvZ3JhcGhpY3N1bnBhcmVuID0gMHgzMjMwO1xuIHQuaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbiA9IDB4MzIzYztcbiB0LmlkZW9ncmFwaGljd2F0ZXJwYXJlbiA9IDB4MzIyYztcbiB0LmlkZW9ncmFwaGljd29vZHBhcmVuID0gMHgzMjJkO1xuIHQuaWRlb2dyYXBoaWN6ZXJvID0gMHgzMDA3O1xuIHQuaWRlb2dyYXBobWV0YWxjaXJjbGUgPSAweDMyOGU7XG4gdC5pZGVvZ3JhcGhtb29uY2lyY2xlID0gMHgzMjhhO1xuIHQuaWRlb2dyYXBobmFtZWNpcmNsZSA9IDB4MzI5NDtcbiB0LmlkZW9ncmFwaHN1bmNpcmNsZSA9IDB4MzI5MDtcbiB0LmlkZW9ncmFwaHdhdGVyY2lyY2xlID0gMHgzMjhjO1xuIHQuaWRlb2dyYXBod29vZGNpcmNsZSA9IDB4MzI4ZDtcbiB0LmlkZXZhID0gMHgwOTA3O1xuIHQuaWRpZXJlc2lzID0gMHgwMGVmO1xuIHQuaWRpZXJlc2lzYWN1dGUgPSAweDFlMmY7XG4gdC5pZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRlNTtcbiB0Lmlkb3RiZWxvdyA9IDB4MWVjYjtcbiB0LmllYnJldmVjeXJpbGxpYyA9IDB4MDRkNztcbiB0LmllY3lyaWxsaWMgPSAweDA0MzU7XG4gdC5pZXVuZ2FjaXJjbGVrb3JlYW4gPSAweDMyNzU7XG4gdC5pZXVuZ2FwYXJlbmtvcmVhbiA9IDB4MzIxNTtcbiB0LmlldW5nY2lyY2xla29yZWFuID0gMHgzMjY3O1xuIHQuaWV1bmdrb3JlYW4gPSAweDMxNDc7XG4gdC5pZXVuZ3BhcmVua29yZWFuID0gMHgzMjA3O1xuIHQuaWdyYXZlID0gMHgwMGVjO1xuIHQuaWd1amFyYXRpID0gMHgwYTg3O1xuIHQuaWd1cm11a2hpID0gMHgwYTA3O1xuIHQuaWhpcmFnYW5hID0gMHgzMDQ0O1xuIHQuaWhvb2thYm92ZSA9IDB4MWVjOTtcbiB0LmlpYmVuZ2FsaSA9IDB4MDk4ODtcbiB0LmlpY3lyaWxsaWMgPSAweDA0Mzg7XG4gdC5paWRldmEgPSAweDA5MDg7XG4gdC5paWd1amFyYXRpID0gMHgwYTg4O1xuIHQuaWlndXJtdWtoaSA9IDB4MGEwODtcbiB0LmlpbWF0cmFndXJtdWtoaSA9IDB4MGE0MDtcbiB0LmlpbnZlcnRlZGJyZXZlID0gMHgwMjBiO1xuIHQuaWlzaG9ydGN5cmlsbGljID0gMHgwNDM5O1xuIHQuaWl2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWMwO1xuIHQuaWl2b3dlbHNpZ25kZXZhID0gMHgwOTQwO1xuIHQuaWl2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjMDtcbiB0LmlqID0gMHgwMTMzO1xuIHQuaWthdGFrYW5hID0gMHgzMGE0O1xuIHQuaWthdGFrYW5haGFsZndpZHRoID0gMHhmZjcyO1xuIHQuaWtvcmVhbiA9IDB4MzE2MztcbiB0LmlsZGUgPSAweDAyZGM7XG4gdC5pbHV5aGVicmV3ID0gMHgwNWFjO1xuIHQuaW1hY3JvbiA9IDB4MDEyYjtcbiB0LmltYWNyb25jeXJpbGxpYyA9IDB4MDRlMztcbiB0LmltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWwgPSAweDIyNTM7XG4gdC5pbWF0cmFndXJtdWtoaSA9IDB4MGEzZjtcbiB0Lmltb25vc3BhY2UgPSAweGZmNDk7XG4gdC5pbmNyZW1lbnQgPSAweDIyMDY7XG4gdC5pbmZpbml0eSA9IDB4MjIxZTtcbiB0LmluaWFybWVuaWFuID0gMHgwNTZiO1xuIHQuaW50ZWdyYWwgPSAweDIyMmI7XG4gdC5pbnRlZ3JhbGJvdHRvbSA9IDB4MjMyMTtcbiB0LmludGVncmFsYnQgPSAweDIzMjE7XG4gdC5pbnRlZ3JhbGV4ID0gMHhmOGY1O1xuIHQuaW50ZWdyYWx0b3AgPSAweDIzMjA7XG4gdC5pbnRlZ3JhbHRwID0gMHgyMzIwO1xuIHQuaW50ZXJzZWN0aW9uID0gMHgyMjI5O1xuIHQuaW50aXNxdWFyZSA9IDB4MzMwNTtcbiB0LmludmJ1bGxldCA9IDB4MjVkODtcbiB0LmludmNpcmNsZSA9IDB4MjVkOTtcbiB0LmludnNtaWxlZmFjZSA9IDB4MjYzYjtcbiB0LmlvY3lyaWxsaWMgPSAweDA0NTE7XG4gdC5pb2dvbmVrID0gMHgwMTJmO1xuIHQuaW90YSA9IDB4MDNiOTtcbiB0LmlvdGFkaWVyZXNpcyA9IDB4MDNjYTtcbiB0LmlvdGFkaWVyZXNpc3Rvbm9zID0gMHgwMzkwO1xuIHQuaW90YWxhdGluID0gMHgwMjY5O1xuIHQuaW90YXRvbm9zID0gMHgwM2FmO1xuIHQuaXBhcmVuID0gMHgyNGE0O1xuIHQuaXJpZ3VybXVraGkgPSAweDBhNzI7XG4gdC5pc21hbGxoaXJhZ2FuYSA9IDB4MzA0MztcbiB0LmlzbWFsbGthdGFrYW5hID0gMHgzMGEzO1xuIHQuaXNtYWxsa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNjg7XG4gdC5pc3NoYXJiZW5nYWxpID0gMHgwOWZhO1xuIHQuaXN0cm9rZSA9IDB4MDI2ODtcbiB0LmlzdXBlcmlvciA9IDB4ZjZlZDtcbiB0Lml0ZXJhdGlvbmhpcmFnYW5hID0gMHgzMDlkO1xuIHQuaXRlcmF0aW9ua2F0YWthbmEgPSAweDMwZmQ7XG4gdC5pdGlsZGUgPSAweDAxMjk7XG4gdC5pdGlsZGViZWxvdyA9IDB4MWUyZDtcbiB0Lml1Ym9wb21vZm8gPSAweDMxMjk7XG4gdC5pdWN5cmlsbGljID0gMHgwNDRlO1xuIHQuaXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YmY7XG4gdC5pdm93ZWxzaWduZGV2YSA9IDB4MDkzZjtcbiB0Lml2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFiZjtcbiB0Lml6aGl0c2FjeXJpbGxpYyA9IDB4MDQ3NTtcbiB0Lml6aGl0c2FkYmxncmF2ZWN5cmlsbGljID0gMHgwNDc3O1xuIHQuaiA9IDB4MDA2YTtcbiB0LmphYXJtZW5pYW4gPSAweDA1NzE7XG4gdC5qYWJlbmdhbGkgPSAweDA5OWM7XG4gdC5qYWRldmEgPSAweDA5MWM7XG4gdC5qYWd1amFyYXRpID0gMHgwYTljO1xuIHQuamFndXJtdWtoaSA9IDB4MGExYztcbiB0Lmpib3BvbW9mbyA9IDB4MzExMDtcbiB0LmpjYXJvbiA9IDB4MDFmMDtcbiB0LmpjaXJjbGUgPSAweDI0ZDk7XG4gdC5qY2lyY3VtZmxleCA9IDB4MDEzNTtcbiB0Lmpjcm9zc2VkdGFpbCA9IDB4MDI5ZDtcbiB0Lmpkb3RsZXNzc3Ryb2tlID0gMHgwMjVmO1xuIHQuamVjeXJpbGxpYyA9IDB4MDQ1ODtcbiB0LmplZW1hcmFiaWMgPSAweDA2MmM7XG4gdC5qZWVtZmluYWxhcmFiaWMgPSAweGZlOWU7XG4gdC5qZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmU5ZjtcbiB0LmplZW1tZWRpYWxhcmFiaWMgPSAweGZlYTA7XG4gdC5qZWhhcmFiaWMgPSAweDA2OTg7XG4gdC5qZWhmaW5hbGFyYWJpYyA9IDB4ZmI4YjtcbiB0LmpoYWJlbmdhbGkgPSAweDA5OWQ7XG4gdC5qaGFkZXZhID0gMHgwOTFkO1xuIHQuamhhZ3VqYXJhdGkgPSAweDBhOWQ7XG4gdC5qaGFndXJtdWtoaSA9IDB4MGExZDtcbiB0LmpoZWhhcm1lbmlhbiA9IDB4MDU3YjtcbiB0LmppcyA9IDB4MzAwNDtcbiB0Lmptb25vc3BhY2UgPSAweGZmNGE7XG4gdC5qcGFyZW4gPSAweDI0YTU7XG4gdC5qc3VwZXJpb3IgPSAweDAyYjI7XG4gdC5rID0gMHgwMDZiO1xuIHQua2FiYXNoa2lyY3lyaWxsaWMgPSAweDA0YTE7XG4gdC5rYWJlbmdhbGkgPSAweDA5OTU7XG4gdC5rYWN1dGUgPSAweDFlMzE7XG4gdC5rYWN5cmlsbGljID0gMHgwNDNhO1xuIHQua2FkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5YjtcbiB0LmthZGV2YSA9IDB4MDkxNTtcbiB0LmthZiA9IDB4MDVkYjtcbiB0LmthZmFyYWJpYyA9IDB4MDY0MztcbiB0LmthZmRhZ2VzaCA9IDB4ZmIzYjtcbiB0LmthZmRhZ2VzaGhlYnJldyA9IDB4ZmIzYjtcbiB0LmthZmZpbmFsYXJhYmljID0gMHhmZWRhO1xuIHQua2FmaGVicmV3ID0gMHgwNWRiO1xuIHQua2FmaW5pdGlhbGFyYWJpYyA9IDB4ZmVkYjtcbiB0LmthZm1lZGlhbGFyYWJpYyA9IDB4ZmVkYztcbiB0LmthZnJhZmVoZWJyZXcgPSAweGZiNGQ7XG4gdC5rYWd1amFyYXRpID0gMHgwYTk1O1xuIHQua2FndXJtdWtoaSA9IDB4MGExNTtcbiB0LmthaGlyYWdhbmEgPSAweDMwNGI7XG4gdC5rYWhvb2tjeXJpbGxpYyA9IDB4MDRjNDtcbiB0Lmtha2F0YWthbmEgPSAweDMwYWI7XG4gdC5rYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjc2O1xuIHQua2FwcGEgPSAweDAzYmE7XG4gdC5rYXBwYXN5bWJvbGdyZWVrID0gMHgwM2YwO1xuIHQua2FweWVvdW5taWV1bWtvcmVhbiA9IDB4MzE3MTtcbiB0LmthcHllb3VucGhpZXVwaGtvcmVhbiA9IDB4MzE4NDtcbiB0LmthcHllb3VucGlldXBrb3JlYW4gPSAweDMxNzg7XG4gdC5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW4gPSAweDMxNzk7XG4gdC5rYXJvcmlpc3F1YXJlID0gMHgzMzBkO1xuIHQua2FzaGlkYWF1dG9hcmFiaWMgPSAweDA2NDA7XG4gdC5rYXNoaWRhYXV0b25vc2lkZWJlYXJpbmdhcmFiaWMgPSAweDA2NDA7XG4gdC5rYXNtYWxsa2F0YWthbmEgPSAweDMwZjU7XG4gdC5rYXNxdWFyZSA9IDB4MzM4NDtcbiB0Lmthc3JhYXJhYmljID0gMHgwNjUwO1xuIHQua2FzcmF0YW5hcmFiaWMgPSAweDA2NGQ7XG4gdC5rYXN0cm9rZWN5cmlsbGljID0gMHgwNDlmO1xuIHQua2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aCA9IDB4ZmY3MDtcbiB0LmthdmVydGljYWxzdHJva2VjeXJpbGxpYyA9IDB4MDQ5ZDtcbiB0Lmtib3BvbW9mbyA9IDB4MzEwZTtcbiB0LmtjYWxzcXVhcmUgPSAweDMzODk7XG4gdC5rY2Fyb24gPSAweDAxZTk7XG4gdC5rY2VkaWxsYSA9IDB4MDEzNztcbiB0LmtjaXJjbGUgPSAweDI0ZGE7XG4gdC5rY29tbWFhY2NlbnQgPSAweDAxMzc7XG4gdC5rZG90YmVsb3cgPSAweDFlMzM7XG4gdC5rZWhhcm1lbmlhbiA9IDB4MDU4NDtcbiB0LmtlaGlyYWdhbmEgPSAweDMwNTE7XG4gdC5rZWthdGFrYW5hID0gMHgzMGIxO1xuIHQua2VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3OTtcbiB0LmtlbmFybWVuaWFuID0gMHgwNTZmO1xuIHQua2VzbWFsbGthdGFrYW5hID0gMHgzMGY2O1xuIHQua2dyZWVubGFuZGljID0gMHgwMTM4O1xuIHQua2hhYmVuZ2FsaSA9IDB4MDk5NjtcbiB0LmtoYWN5cmlsbGljID0gMHgwNDQ1O1xuIHQua2hhZGV2YSA9IDB4MDkxNjtcbiB0LmtoYWd1amFyYXRpID0gMHgwYTk2O1xuIHQua2hhZ3VybXVraGkgPSAweDBhMTY7XG4gdC5raGFoYXJhYmljID0gMHgwNjJlO1xuIHQua2hhaGZpbmFsYXJhYmljID0gMHhmZWE2O1xuIHQua2hhaGluaXRpYWxhcmFiaWMgPSAweGZlYTc7XG4gdC5raGFobWVkaWFsYXJhYmljID0gMHhmZWE4O1xuIHQua2hlaWNvcHRpYyA9IDB4MDNlNztcbiB0LmtoaGFkZXZhID0gMHgwOTU5O1xuIHQua2hoYWd1cm11a2hpID0gMHgwYTU5O1xuIHQua2hpZXVraGFjaXJjbGVrb3JlYW4gPSAweDMyNzg7XG4gdC5raGlldWtoYXBhcmVua29yZWFuID0gMHgzMjE4O1xuIHQua2hpZXVraGNpcmNsZWtvcmVhbiA9IDB4MzI2YTtcbiB0LmtoaWV1a2hrb3JlYW4gPSAweDMxNGI7XG4gdC5raGlldWtocGFyZW5rb3JlYW4gPSAweDMyMGE7XG4gdC5raG9raGFpdGhhaSA9IDB4MGUwMjtcbiB0Lmtob2tob250aGFpID0gMHgwZTA1O1xuIHQua2hva2h1YXR0aGFpID0gMHgwZTAzO1xuIHQua2hva2h3YWl0aGFpID0gMHgwZTA0O1xuIHQua2hvbXV0dGhhaSA9IDB4MGU1YjtcbiB0Lmtob29rID0gMHgwMTk5O1xuIHQua2hvcmFraGFuZ3RoYWkgPSAweDBlMDY7XG4gdC5raHpzcXVhcmUgPSAweDMzOTE7XG4gdC5raWhpcmFnYW5hID0gMHgzMDRkO1xuIHQua2lrYXRha2FuYSA9IDB4MzBhZDtcbiB0Lmtpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzc7XG4gdC5raXJvZ3VyYW11c3F1YXJlID0gMHgzMzE1O1xuIHQua2lyb21lZXRvcnVzcXVhcmUgPSAweDMzMTY7XG4gdC5raXJvc3F1YXJlID0gMHgzMzE0O1xuIHQua2l5ZW9rYWNpcmNsZWtvcmVhbiA9IDB4MzI2ZTtcbiB0LmtpeWVva2FwYXJlbmtvcmVhbiA9IDB4MzIwZTtcbiB0LmtpeWVva2NpcmNsZWtvcmVhbiA9IDB4MzI2MDtcbiB0LmtpeWVva2tvcmVhbiA9IDB4MzEzMTtcbiB0LmtpeWVva3BhcmVua29yZWFuID0gMHgzMjAwO1xuIHQua2l5ZW9rc2lvc2tvcmVhbiA9IDB4MzEzMztcbiB0LmtqZWN5cmlsbGljID0gMHgwNDVjO1xuIHQua2xpbmViZWxvdyA9IDB4MWUzNTtcbiB0Lmtsc3F1YXJlID0gMHgzMzk4O1xuIHQua21jdWJlZHNxdWFyZSA9IDB4MzNhNjtcbiB0Lmttb25vc3BhY2UgPSAweGZmNGI7XG4gdC5rbXNxdWFyZWRzcXVhcmUgPSAweDMzYTI7XG4gdC5rb2hpcmFnYW5hID0gMHgzMDUzO1xuIHQua29obXNxdWFyZSA9IDB4MzNjMDtcbiB0Lmtva2FpdGhhaSA9IDB4MGUwMTtcbiB0Lmtva2F0YWthbmEgPSAweDMwYjM7XG4gdC5rb2thdGFrYW5haGFsZndpZHRoID0gMHhmZjdhO1xuIHQua29vcG9zcXVhcmUgPSAweDMzMWU7XG4gdC5rb3BwYWN5cmlsbGljID0gMHgwNDgxO1xuIHQua29yZWFuc3RhbmRhcmRzeW1ib2wgPSAweDMyN2Y7XG4gdC5rb3JvbmlzY21iID0gMHgwMzQzO1xuIHQua3BhcmVuID0gMHgyNGE2O1xuIHQua3Bhc3F1YXJlID0gMHgzM2FhO1xuIHQua3NpY3lyaWxsaWMgPSAweDA0NmY7XG4gdC5rdHNxdWFyZSA9IDB4MzNjZjtcbiB0Lmt0dXJuZWQgPSAweDAyOWU7XG4gdC5rdWhpcmFnYW5hID0gMHgzMDRmO1xuIHQua3VrYXRha2FuYSA9IDB4MzBhZjtcbiB0Lmt1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmNzg7XG4gdC5rdnNxdWFyZSA9IDB4MzNiODtcbiB0Lmt3c3F1YXJlID0gMHgzM2JlO1xuIHQubCA9IDB4MDA2YztcbiB0LmxhYmVuZ2FsaSA9IDB4MDliMjtcbiB0LmxhY3V0ZSA9IDB4MDEzYTtcbiB0LmxhZGV2YSA9IDB4MDkzMjtcbiB0LmxhZ3VqYXJhdGkgPSAweDBhYjI7XG4gdC5sYWd1cm11a2hpID0gMHgwYTMyO1xuIHQubGFra2hhbmd5YW90aGFpID0gMHgwZTQ1O1xuIHQubGFtYWxlZmZpbmFsYXJhYmljID0gMHhmZWZjO1xuIHQubGFtYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyA9IDB4ZmVmODtcbiB0LmxhbWFsZWZoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWMgPSAweGZlZjc7XG4gdC5sYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljID0gMHhmZWZhO1xuIHQubGFtYWxlZmhhbXphYmVsb3dpc29sYXRlZGFyYWJpYyA9IDB4ZmVmOTtcbiB0LmxhbWFsZWZpc29sYXRlZGFyYWJpYyA9IDB4ZmVmYjtcbiB0LmxhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWMgPSAweGZlZjY7XG4gdC5sYW1hbGVmbWFkZGFhYm92ZWlzb2xhdGVkYXJhYmljID0gMHhmZWY1O1xuIHQubGFtYXJhYmljID0gMHgwNjQ0O1xuIHQubGFtYmRhID0gMHgwM2JiO1xuIHQubGFtYmRhc3Ryb2tlID0gMHgwMTliO1xuIHQubGFtZWQgPSAweDA1ZGM7XG4gdC5sYW1lZGRhZ2VzaCA9IDB4ZmIzYztcbiB0LmxhbWVkZGFnZXNoaGVicmV3ID0gMHhmYjNjO1xuIHQubGFtZWRoZWJyZXcgPSAweDA1ZGM7XG4gdC5sYW1maW5hbGFyYWJpYyA9IDB4ZmVkZTtcbiB0LmxhbWhhaGluaXRpYWxhcmFiaWMgPSAweGZjY2E7XG4gdC5sYW1pbml0aWFsYXJhYmljID0gMHhmZWRmO1xuIHQubGFtamVlbWluaXRpYWxhcmFiaWMgPSAweGZjYzk7XG4gdC5sYW1raGFoaW5pdGlhbGFyYWJpYyA9IDB4ZmNjYjtcbiB0LmxhbWxhbWhlaGlzb2xhdGVkYXJhYmljID0gMHhmZGYyO1xuIHQubGFtbWVkaWFsYXJhYmljID0gMHhmZWUwO1xuIHQubGFtbWVlbWhhaGluaXRpYWxhcmFiaWMgPSAweGZkODg7XG4gdC5sYW1tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNjYztcbiB0LmxhcmdlY2lyY2xlID0gMHgyNWVmO1xuIHQubGJhciA9IDB4MDE5YTtcbiB0LmxiZWx0ID0gMHgwMjZjO1xuIHQubGJvcG9tb2ZvID0gMHgzMTBjO1xuIHQubGNhcm9uID0gMHgwMTNlO1xuIHQubGNlZGlsbGEgPSAweDAxM2M7XG4gdC5sY2lyY2xlID0gMHgyNGRiO1xuIHQubGNpcmN1bWZsZXhiZWxvdyA9IDB4MWUzZDtcbiB0Lmxjb21tYWFjY2VudCA9IDB4MDEzYztcbiB0Lmxkb3QgPSAweDAxNDA7XG4gdC5sZG90YWNjZW50ID0gMHgwMTQwO1xuIHQubGRvdGJlbG93ID0gMHgxZTM3O1xuIHQubGRvdGJlbG93bWFjcm9uID0gMHgxZTM5O1xuIHQubGVmdGFuZ2xlYWJvdmVjbWIgPSAweDAzMWE7XG4gdC5sZWZ0dGFja2JlbG93Y21iID0gMHgwMzE4O1xuIHQubGVzcyA9IDB4MDAzYztcbiB0Lmxlc3NlcXVhbCA9IDB4MjI2NDtcbiB0Lmxlc3NlcXVhbG9yZ3JlYXRlciA9IDB4MjJkYTtcbiB0Lmxlc3Ntb25vc3BhY2UgPSAweGZmMWM7XG4gdC5sZXNzb3JlcXVpdmFsZW50ID0gMHgyMjcyO1xuIHQubGVzc29yZ3JlYXRlciA9IDB4MjI3NjtcbiB0Lmxlc3NvdmVyZXF1YWwgPSAweDIyNjY7XG4gdC5sZXNzc21hbGwgPSAweGZlNjQ7XG4gdC5sZXpoID0gMHgwMjZlO1xuIHQubGZibG9jayA9IDB4MjU4YztcbiB0Lmxob29rcmV0cm9mbGV4ID0gMHgwMjZkO1xuIHQubGlyYSA9IDB4MjBhNDtcbiB0Lmxpd25hcm1lbmlhbiA9IDB4MDU2YztcbiB0LmxqID0gMHgwMWM5O1xuIHQubGplY3lyaWxsaWMgPSAweDA0NTk7XG4gdC5sbCA9IDB4ZjZjMDtcbiB0LmxsYWRldmEgPSAweDA5MzM7XG4gdC5sbGFndWphcmF0aSA9IDB4MGFiMztcbiB0LmxsaW5lYmVsb3cgPSAweDFlM2I7XG4gdC5sbGxhZGV2YSA9IDB4MDkzNDtcbiB0Lmxsdm9jYWxpY2JlbmdhbGkgPSAweDA5ZTE7XG4gdC5sbHZvY2FsaWNkZXZhID0gMHgwOTYxO1xuIHQubGx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDllMztcbiB0Lmxsdm9jYWxpY3Zvd2Vsc2lnbmRldmEgPSAweDA5NjM7XG4gdC5sbWlkZGxldGlsZGUgPSAweDAyNmI7XG4gdC5sbW9ub3NwYWNlID0gMHhmZjRjO1xuIHQubG1zcXVhcmUgPSAweDMzZDA7XG4gdC5sb2NodWxhdGhhaSA9IDB4MGUyYztcbiB0LmxvZ2ljYWxhbmQgPSAweDIyMjc7XG4gdC5sb2dpY2Fsbm90ID0gMHgwMGFjO1xuIHQubG9naWNhbG5vdHJldmVyc2VkID0gMHgyMzEwO1xuIHQubG9naWNhbG9yID0gMHgyMjI4O1xuIHQubG9saW5ndGhhaSA9IDB4MGUyNTtcbiB0LmxvbmdzID0gMHgwMTdmO1xuIHQubG93bGluZWNlbnRlcmxpbmUgPSAweGZlNGU7XG4gdC5sb3dsaW5lY21iID0gMHgwMzMyO1xuIHQubG93bGluZWRhc2hlZCA9IDB4ZmU0ZDtcbiB0LmxvemVuZ2UgPSAweDI1Y2E7XG4gdC5scGFyZW4gPSAweDI0YTc7XG4gdC5sc2xhc2ggPSAweDAxNDI7XG4gdC5sc3F1YXJlID0gMHgyMTEzO1xuIHQubHN1cGVyaW9yID0gMHhmNmVlO1xuIHQubHRzaGFkZSA9IDB4MjU5MTtcbiB0Lmx1dGhhaSA9IDB4MGUyNjtcbiB0Lmx2b2NhbGljYmVuZ2FsaSA9IDB4MDk4YztcbiB0Lmx2b2NhbGljZGV2YSA9IDB4MDkwYztcbiB0Lmx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSA9IDB4MDllMjtcbiB0Lmx2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk2MjtcbiB0Lmx4c3F1YXJlID0gMHgzM2QzO1xuIHQubSA9IDB4MDA2ZDtcbiB0Lm1hYmVuZ2FsaSA9IDB4MDlhZTtcbiB0Lm1hY3JvbiA9IDB4MDBhZjtcbiB0Lm1hY3JvbmJlbG93Y21iID0gMHgwMzMxO1xuIHQubWFjcm9uY21iID0gMHgwMzA0O1xuIHQubWFjcm9ubG93bW9kID0gMHgwMmNkO1xuIHQubWFjcm9ubW9ub3NwYWNlID0gMHhmZmUzO1xuIHQubWFjdXRlID0gMHgxZTNmO1xuIHQubWFkZXZhID0gMHgwOTJlO1xuIHQubWFndWphcmF0aSA9IDB4MGFhZTtcbiB0Lm1hZ3VybXVraGkgPSAweDBhMmU7XG4gdC5tYWhhcGFraGhlYnJldyA9IDB4MDVhNDtcbiB0Lm1haGFwYWtobGVmdGhlYnJldyA9IDB4MDVhNDtcbiB0Lm1haGlyYWdhbmEgPSAweDMwN2U7XG4gdC5tYWljaGF0dGF3YWxvd2xlZnR0aGFpID0gMHhmODk1O1xuIHQubWFpY2hhdHRhd2Fsb3dyaWdodHRoYWkgPSAweGY4OTQ7XG4gdC5tYWljaGF0dGF3YXRoYWkgPSAweDBlNGI7XG4gdC5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWkgPSAweGY4OTM7XG4gdC5tYWlla2xvd2xlZnR0aGFpID0gMHhmODhjO1xuIHQubWFpZWtsb3dyaWdodHRoYWkgPSAweGY4OGI7XG4gdC5tYWlla3RoYWkgPSAweDBlNDg7XG4gdC5tYWlla3VwcGVybGVmdHRoYWkgPSAweGY4OGE7XG4gdC5tYWloYW5ha2F0bGVmdHRoYWkgPSAweGY4ODQ7XG4gdC5tYWloYW5ha2F0dGhhaSA9IDB4MGUzMTtcbiB0Lm1haXRhaWtodWxlZnR0aGFpID0gMHhmODg5O1xuIHQubWFpdGFpa2h1dGhhaSA9IDB4MGU0NztcbiB0Lm1haXRob2xvd2xlZnR0aGFpID0gMHhmODhmO1xuIHQubWFpdGhvbG93cmlnaHR0aGFpID0gMHhmODhlO1xuIHQubWFpdGhvdGhhaSA9IDB4MGU0OTtcbiB0Lm1haXRob3VwcGVybGVmdHRoYWkgPSAweGY4OGQ7XG4gdC5tYWl0cmlsb3dsZWZ0dGhhaSA9IDB4Zjg5MjtcbiB0Lm1haXRyaWxvd3JpZ2h0dGhhaSA9IDB4Zjg5MTtcbiB0Lm1haXRyaXRoYWkgPSAweDBlNGE7XG4gdC5tYWl0cml1cHBlcmxlZnR0aGFpID0gMHhmODkwO1xuIHQubWFpeWFtb2t0aGFpID0gMHgwZTQ2O1xuIHQubWFrYXRha2FuYSA9IDB4MzBkZTtcbiB0Lm1ha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOGY7XG4gdC5tYWxlID0gMHgyNjQyO1xuIHQubWFuc3lvbnNxdWFyZSA9IDB4MzM0NztcbiB0Lm1hcWFmaGVicmV3ID0gMHgwNWJlO1xuIHQubWFycyA9IDB4MjY0MjtcbiB0Lm1hc29yYWNpcmNsZWhlYnJldyA9IDB4MDVhZjtcbiB0Lm1hc3F1YXJlID0gMHgzMzgzO1xuIHQubWJvcG9tb2ZvID0gMHgzMTA3O1xuIHQubWJzcXVhcmUgPSAweDMzZDQ7XG4gdC5tY2lyY2xlID0gMHgyNGRjO1xuIHQubWN1YmVkc3F1YXJlID0gMHgzM2E1O1xuIHQubWRvdGFjY2VudCA9IDB4MWU0MTtcbiB0Lm1kb3RiZWxvdyA9IDB4MWU0MztcbiB0Lm1lZW1hcmFiaWMgPSAweDA2NDU7XG4gdC5tZWVtZmluYWxhcmFiaWMgPSAweGZlZTI7XG4gdC5tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmVlMztcbiB0Lm1lZW1tZWRpYWxhcmFiaWMgPSAweGZlZTQ7XG4gdC5tZWVtbWVlbWluaXRpYWxhcmFiaWMgPSAweGZjZDE7XG4gdC5tZWVtbWVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzQ4O1xuIHQubWVldG9ydXNxdWFyZSA9IDB4MzM0ZDtcbiB0Lm1laGlyYWdhbmEgPSAweDMwODE7XG4gdC5tZWl6aWVyYXNxdWFyZSA9IDB4MzM3ZTtcbiB0Lm1la2F0YWthbmEgPSAweDMwZTE7XG4gdC5tZWthdGFrYW5haGFsZndpZHRoID0gMHhmZjkyO1xuIHQubWVtID0gMHgwNWRlO1xuIHQubWVtZGFnZXNoID0gMHhmYjNlO1xuIHQubWVtZGFnZXNoaGVicmV3ID0gMHhmYjNlO1xuIHQubWVtaGVicmV3ID0gMHgwNWRlO1xuIHQubWVuYXJtZW5pYW4gPSAweDA1NzQ7XG4gdC5tZXJraGFoZWJyZXcgPSAweDA1YTU7XG4gdC5tZXJraGFrZWZ1bGFoZWJyZXcgPSAweDA1YTY7XG4gdC5tZXJraGFrZWZ1bGFsZWZ0aGVicmV3ID0gMHgwNWE2O1xuIHQubWVya2hhbGVmdGhlYnJldyA9IDB4MDVhNTtcbiB0Lm1ob29rID0gMHgwMjcxO1xuIHQubWh6c3F1YXJlID0gMHgzMzkyO1xuIHQubWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGggPSAweGZmNjU7XG4gdC5taWRkb3QgPSAweDAwYjc7XG4gdC5taWV1bWFjaXJjbGVrb3JlYW4gPSAweDMyNzI7XG4gdC5taWV1bWFwYXJlbmtvcmVhbiA9IDB4MzIxMjtcbiB0Lm1pZXVtY2lyY2xla29yZWFuID0gMHgzMjY0O1xuIHQubWlldW1rb3JlYW4gPSAweDMxNDE7XG4gdC5taWV1bXBhbnNpb3Nrb3JlYW4gPSAweDMxNzA7XG4gdC5taWV1bXBhcmVua29yZWFuID0gMHgzMjA0O1xuIHQubWlldW1waWV1cGtvcmVhbiA9IDB4MzE2ZTtcbiB0Lm1pZXVtc2lvc2tvcmVhbiA9IDB4MzE2ZjtcbiB0Lm1paGlyYWdhbmEgPSAweDMwN2Y7XG4gdC5taWthdGFrYW5hID0gMHgzMGRmO1xuIHQubWlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5MDtcbiB0Lm1pbnVzID0gMHgyMjEyO1xuIHQubWludXNiZWxvd2NtYiA9IDB4MDMyMDtcbiB0Lm1pbnVzY2lyY2xlID0gMHgyMjk2O1xuIHQubWludXNtb2QgPSAweDAyZDc7XG4gdC5taW51c3BsdXMgPSAweDIyMTM7XG4gdC5taW51dGUgPSAweDIwMzI7XG4gdC5taXJpYmFhcnVzcXVhcmUgPSAweDMzNGE7XG4gdC5taXJpc3F1YXJlID0gMHgzMzQ5O1xuIHQubWxvbmdsZWd0dXJuZWQgPSAweDAyNzA7XG4gdC5tbHNxdWFyZSA9IDB4MzM5NjtcbiB0Lm1tY3ViZWRzcXVhcmUgPSAweDMzYTM7XG4gdC5tbW9ub3NwYWNlID0gMHhmZjRkO1xuIHQubW1zcXVhcmVkc3F1YXJlID0gMHgzMzlmO1xuIHQubW9oaXJhZ2FuYSA9IDB4MzA4MjtcbiB0Lm1vaG1zcXVhcmUgPSAweDMzYzE7XG4gdC5tb2thdGFrYW5hID0gMHgzMGUyO1xuIHQubW9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5MztcbiB0Lm1vbHNxdWFyZSA9IDB4MzNkNjtcbiB0Lm1vbWF0aGFpID0gMHgwZTIxO1xuIHQubW92ZXJzc3F1YXJlID0gMHgzM2E3O1xuIHQubW92ZXJzc3F1YXJlZHNxdWFyZSA9IDB4MzNhODtcbiB0Lm1wYXJlbiA9IDB4MjRhODtcbiB0Lm1wYXNxdWFyZSA9IDB4MzNhYjtcbiB0Lm1zc3F1YXJlID0gMHgzM2IzO1xuIHQubXN1cGVyaW9yID0gMHhmNmVmO1xuIHQubXR1cm5lZCA9IDB4MDI2ZjtcbiB0Lm11ID0gMHgwMGI1O1xuIHQubXUxID0gMHgwMGI1O1xuIHQubXVhc3F1YXJlID0gMHgzMzgyO1xuIHQubXVjaGdyZWF0ZXIgPSAweDIyNmI7XG4gdC5tdWNobGVzcyA9IDB4MjI2YTtcbiB0Lm11ZnNxdWFyZSA9IDB4MzM4YztcbiB0Lm11Z3JlZWsgPSAweDAzYmM7XG4gdC5tdWdzcXVhcmUgPSAweDMzOGQ7XG4gdC5tdWhpcmFnYW5hID0gMHgzMDgwO1xuIHQubXVrYXRha2FuYSA9IDB4MzBlMDtcbiB0Lm11a2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTE7XG4gdC5tdWxzcXVhcmUgPSAweDMzOTU7XG4gdC5tdWx0aXBseSA9IDB4MDBkNztcbiB0Lm11bXNxdWFyZSA9IDB4MzM5YjtcbiB0Lm11bmFoaGVicmV3ID0gMHgwNWEzO1xuIHQubXVuYWhsZWZ0aGVicmV3ID0gMHgwNWEzO1xuIHQubXVzaWNhbG5vdGUgPSAweDI2NmE7XG4gdC5tdXNpY2Fsbm90ZWRibCA9IDB4MjY2YjtcbiB0Lm11c2ljZmxhdHNpZ24gPSAweDI2NmQ7XG4gdC5tdXNpY3NoYXJwc2lnbiA9IDB4MjY2ZjtcbiB0Lm11c3NxdWFyZSA9IDB4MzNiMjtcbiB0Lm11dnNxdWFyZSA9IDB4MzNiNjtcbiB0Lm11d3NxdWFyZSA9IDB4MzNiYztcbiB0Lm12bWVnYXNxdWFyZSA9IDB4MzNiOTtcbiB0Lm12c3F1YXJlID0gMHgzM2I3O1xuIHQubXdtZWdhc3F1YXJlID0gMHgzM2JmO1xuIHQubXdzcXVhcmUgPSAweDMzYmQ7XG4gdC5uID0gMHgwMDZlO1xuIHQubmFiZW5nYWxpID0gMHgwOWE4O1xuIHQubmFibGEgPSAweDIyMDc7XG4gdC5uYWN1dGUgPSAweDAxNDQ7XG4gdC5uYWRldmEgPSAweDA5Mjg7XG4gdC5uYWd1amFyYXRpID0gMHgwYWE4O1xuIHQubmFndXJtdWtoaSA9IDB4MGEyODtcbiB0Lm5haGlyYWdhbmEgPSAweDMwNmE7XG4gdC5uYWthdGFrYW5hID0gMHgzMGNhO1xuIHQubmFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4NTtcbiB0Lm5hcG9zdHJvcGhlID0gMHgwMTQ5O1xuIHQubmFzcXVhcmUgPSAweDMzODE7XG4gdC5uYm9wb21vZm8gPSAweDMxMGI7XG4gdC5uYnNwYWNlID0gMHgwMGEwO1xuIHQubmNhcm9uID0gMHgwMTQ4O1xuIHQubmNlZGlsbGEgPSAweDAxNDY7XG4gdC5uY2lyY2xlID0gMHgyNGRkO1xuIHQubmNpcmN1bWZsZXhiZWxvdyA9IDB4MWU0YjtcbiB0Lm5jb21tYWFjY2VudCA9IDB4MDE0NjtcbiB0Lm5kb3RhY2NlbnQgPSAweDFlNDU7XG4gdC5uZG90YmVsb3cgPSAweDFlNDc7XG4gdC5uZWhpcmFnYW5hID0gMHgzMDZkO1xuIHQubmVrYXRha2FuYSA9IDB4MzBjZDtcbiB0Lm5la2F0YWthbmFoYWxmd2lkdGggPSAweGZmODg7XG4gdC5uZXdzaGVxZWxzaWduID0gMHgyMGFhO1xuIHQubmZzcXVhcmUgPSAweDMzOGI7XG4gdC5uZ2FiZW5nYWxpID0gMHgwOTk5O1xuIHQubmdhZGV2YSA9IDB4MDkxOTtcbiB0Lm5nYWd1amFyYXRpID0gMHgwYTk5O1xuIHQubmdhZ3VybXVraGkgPSAweDBhMTk7XG4gdC5uZ29uZ3V0aGFpID0gMHgwZTA3O1xuIHQubmhpcmFnYW5hID0gMHgzMDkzO1xuIHQubmhvb2tsZWZ0ID0gMHgwMjcyO1xuIHQubmhvb2tyZXRyb2ZsZXggPSAweDAyNzM7XG4gdC5uaWV1bmFjaXJjbGVrb3JlYW4gPSAweDMyNmY7XG4gdC5uaWV1bmFwYXJlbmtvcmVhbiA9IDB4MzIwZjtcbiB0Lm5pZXVuY2lldWNrb3JlYW4gPSAweDMxMzU7XG4gdC5uaWV1bmNpcmNsZWtvcmVhbiA9IDB4MzI2MTtcbiB0Lm5pZXVuaGlldWhrb3JlYW4gPSAweDMxMzY7XG4gdC5uaWV1bmtvcmVhbiA9IDB4MzEzNDtcbiB0Lm5pZXVucGFuc2lvc2tvcmVhbiA9IDB4MzE2ODtcbiB0Lm5pZXVucGFyZW5rb3JlYW4gPSAweDMyMDE7XG4gdC5uaWV1bnNpb3Nrb3JlYW4gPSAweDMxNjc7XG4gdC5uaWV1bnRpa2V1dGtvcmVhbiA9IDB4MzE2NjtcbiB0Lm5paGlyYWdhbmEgPSAweDMwNmI7XG4gdC5uaWthdGFrYW5hID0gMHgzMGNiO1xuIHQubmlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4NjtcbiB0Lm5pa2hhaGl0bGVmdHRoYWkgPSAweGY4OTk7XG4gdC5uaWtoYWhpdHRoYWkgPSAweDBlNGQ7XG4gdC5uaW5lID0gMHgwMDM5O1xuIHQubmluZWFyYWJpYyA9IDB4MDY2OTtcbiB0Lm5pbmViZW5nYWxpID0gMHgwOWVmO1xuIHQubmluZWNpcmNsZSA9IDB4MjQ2ODtcbiB0Lm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmID0gMHgyNzkyO1xuIHQubmluZWRldmEgPSAweDA5NmY7XG4gdC5uaW5lZ3VqYXJhdGkgPSAweDBhZWY7XG4gdC5uaW5lZ3VybXVraGkgPSAweDBhNmY7XG4gdC5uaW5laGFja2FyYWJpYyA9IDB4MDY2OTtcbiB0Lm5pbmVoYW5nemhvdSA9IDB4MzAyOTtcbiB0Lm5pbmVpZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI4O1xuIHQubmluZWluZmVyaW9yID0gMHgyMDg5O1xuIHQubmluZW1vbm9zcGFjZSA9IDB4ZmYxOTtcbiB0Lm5pbmVvbGRzdHlsZSA9IDB4ZjczOTtcbiB0Lm5pbmVwYXJlbiA9IDB4MjQ3YztcbiB0Lm5pbmVwZXJpb2QgPSAweDI0OTA7XG4gdC5uaW5lcGVyc2lhbiA9IDB4MDZmOTtcbiB0Lm5pbmVyb21hbiA9IDB4MjE3ODtcbiB0Lm5pbmVzdXBlcmlvciA9IDB4MjA3OTtcbiB0Lm5pbmV0ZWVuY2lyY2xlID0gMHgyNDcyO1xuIHQubmluZXRlZW5wYXJlbiA9IDB4MjQ4NjtcbiB0Lm5pbmV0ZWVucGVyaW9kID0gMHgyNDlhO1xuIHQubmluZXRoYWkgPSAweDBlNTk7XG4gdC5uaiA9IDB4MDFjYztcbiB0Lm5qZWN5cmlsbGljID0gMHgwNDVhO1xuIHQubmthdGFrYW5hID0gMHgzMGYzO1xuIHQubmthdGFrYW5haGFsZndpZHRoID0gMHhmZjlkO1xuIHQubmxlZ3JpZ2h0bG9uZyA9IDB4MDE5ZTtcbiB0Lm5saW5lYmVsb3cgPSAweDFlNDk7XG4gdC5ubW9ub3NwYWNlID0gMHhmZjRlO1xuIHQubm1zcXVhcmUgPSAweDMzOWE7XG4gdC5ubmFiZW5nYWxpID0gMHgwOWEzO1xuIHQubm5hZGV2YSA9IDB4MDkyMztcbiB0Lm5uYWd1amFyYXRpID0gMHgwYWEzO1xuIHQubm5hZ3VybXVraGkgPSAweDBhMjM7XG4gdC5ubm5hZGV2YSA9IDB4MDkyOTtcbiB0Lm5vaGlyYWdhbmEgPSAweDMwNmU7XG4gdC5ub2thdGFrYW5hID0gMHgzMGNlO1xuIHQubm9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4OTtcbiB0Lm5vbmJyZWFraW5nc3BhY2UgPSAweDAwYTA7XG4gdC5ub25lbnRoYWkgPSAweDBlMTM7XG4gdC5ub251dGhhaSA9IDB4MGUxOTtcbiB0Lm5vb25hcmFiaWMgPSAweDA2NDY7XG4gdC5ub29uZmluYWxhcmFiaWMgPSAweGZlZTY7XG4gdC5ub29uZ2h1bm5hYXJhYmljID0gMHgwNmJhO1xuIHQubm9vbmdodW5uYWZpbmFsYXJhYmljID0gMHhmYjlmO1xuIHQubm9vbmluaXRpYWxhcmFiaWMgPSAweGZlZTc7XG4gdC5ub29uamVlbWluaXRpYWxhcmFiaWMgPSAweGZjZDI7XG4gdC5ub29uamVlbWlzb2xhdGVkYXJhYmljID0gMHhmYzRiO1xuIHQubm9vbm1lZGlhbGFyYWJpYyA9IDB4ZmVlODtcbiB0Lm5vb25tZWVtaW5pdGlhbGFyYWJpYyA9IDB4ZmNkNTtcbiB0Lm5vb25tZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNGU7XG4gdC5ub29ubm9vbmZpbmFsYXJhYmljID0gMHhmYzhkO1xuIHQubm90Y29udGFpbnMgPSAweDIyMGM7XG4gdC5ub3RlbGVtZW50ID0gMHgyMjA5O1xuIHQubm90ZWxlbWVudG9mID0gMHgyMjA5O1xuIHQubm90ZXF1YWwgPSAweDIyNjA7XG4gdC5ub3RncmVhdGVyID0gMHgyMjZmO1xuIHQubm90Z3JlYXRlcm5vcmVxdWFsID0gMHgyMjcxO1xuIHQubm90Z3JlYXRlcm5vcmxlc3MgPSAweDIyNzk7XG4gdC5ub3RpZGVudGljYWwgPSAweDIyNjI7XG4gdC5ub3RsZXNzID0gMHgyMjZlO1xuIHQubm90bGVzc25vcmVxdWFsID0gMHgyMjcwO1xuIHQubm90cGFyYWxsZWwgPSAweDIyMjY7XG4gdC5ub3RwcmVjZWRlcyA9IDB4MjI4MDtcbiB0Lm5vdHN1YnNldCA9IDB4MjI4NDtcbiB0Lm5vdHN1Y2NlZWRzID0gMHgyMjgxO1xuIHQubm90c3VwZXJzZXQgPSAweDIyODU7XG4gdC5ub3dhcm1lbmlhbiA9IDB4MDU3NjtcbiB0Lm5wYXJlbiA9IDB4MjRhOTtcbiB0Lm5zc3F1YXJlID0gMHgzM2IxO1xuIHQubnN1cGVyaW9yID0gMHgyMDdmO1xuIHQubnRpbGRlID0gMHgwMGYxO1xuIHQubnUgPSAweDAzYmQ7XG4gdC5udWhpcmFnYW5hID0gMHgzMDZjO1xuIHQubnVrYXRha2FuYSA9IDB4MzBjYztcbiB0Lm51a2F0YWthbmFoYWxmd2lkdGggPSAweGZmODc7XG4gdC5udWt0YWJlbmdhbGkgPSAweDA5YmM7XG4gdC5udWt0YWRldmEgPSAweDA5M2M7XG4gdC5udWt0YWd1amFyYXRpID0gMHgwYWJjO1xuIHQubnVrdGFndXJtdWtoaSA9IDB4MGEzYztcbiB0Lm51bWJlcnNpZ24gPSAweDAwMjM7XG4gdC5udW1iZXJzaWdubW9ub3NwYWNlID0gMHhmZjAzO1xuIHQubnVtYmVyc2lnbnNtYWxsID0gMHhmZTVmO1xuIHQubnVtZXJhbHNpZ25ncmVlayA9IDB4MDM3NDtcbiB0Lm51bWVyYWxzaWdubG93ZXJncmVlayA9IDB4MDM3NTtcbiB0Lm51bWVybyA9IDB4MjExNjtcbiB0Lm51biA9IDB4MDVlMDtcbiB0Lm51bmRhZ2VzaCA9IDB4ZmI0MDtcbiB0Lm51bmRhZ2VzaGhlYnJldyA9IDB4ZmI0MDtcbiB0Lm51bmhlYnJldyA9IDB4MDVlMDtcbiB0Lm52c3F1YXJlID0gMHgzM2I1O1xuIHQubndzcXVhcmUgPSAweDMzYmI7XG4gdC5ueWFiZW5nYWxpID0gMHgwOTllO1xuIHQubnlhZGV2YSA9IDB4MDkxZTtcbiB0Lm55YWd1amFyYXRpID0gMHgwYTllO1xuIHQubnlhZ3VybXVraGkgPSAweDBhMWU7XG4gdC5vID0gMHgwMDZmO1xuIHQub2FjdXRlID0gMHgwMGYzO1xuIHQub2FuZ3RoYWkgPSAweDBlMmQ7XG4gdC5vYmFycmVkID0gMHgwMjc1O1xuIHQub2JhcnJlZGN5cmlsbGljID0gMHgwNGU5O1xuIHQub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZWI7XG4gdC5vYmVuZ2FsaSA9IDB4MDk5MztcbiB0Lm9ib3BvbW9mbyA9IDB4MzExYjtcbiB0Lm9icmV2ZSA9IDB4MDE0ZjtcbiB0Lm9jYW5kcmFkZXZhID0gMHgwOTExO1xuIHQub2NhbmRyYWd1amFyYXRpID0gMHgwYTkxO1xuIHQub2NhbmRyYXZvd2Vsc2lnbmRldmEgPSAweDA5NDk7XG4gdC5vY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGkgPSAweDBhYzk7XG4gdC5vY2Fyb24gPSAweDAxZDI7XG4gdC5vY2lyY2xlID0gMHgyNGRlO1xuIHQub2NpcmN1bWZsZXggPSAweDAwZjQ7XG4gdC5vY2lyY3VtZmxleGFjdXRlID0gMHgxZWQxO1xuIHQub2NpcmN1bWZsZXhkb3RiZWxvdyA9IDB4MWVkOTtcbiB0Lm9jaXJjdW1mbGV4Z3JhdmUgPSAweDFlZDM7XG4gdC5vY2lyY3VtZmxleGhvb2thYm92ZSA9IDB4MWVkNTtcbiB0Lm9jaXJjdW1mbGV4dGlsZGUgPSAweDFlZDc7XG4gdC5vY3lyaWxsaWMgPSAweDA0M2U7XG4gdC5vZGJsYWN1dGUgPSAweDAxNTE7XG4gdC5vZGJsZ3JhdmUgPSAweDAyMGQ7XG4gdC5vZGV2YSA9IDB4MDkxMztcbiB0Lm9kaWVyZXNpcyA9IDB4MDBmNjtcbiB0Lm9kaWVyZXNpc2N5cmlsbGljID0gMHgwNGU3O1xuIHQub2RvdGJlbG93ID0gMHgxZWNkO1xuIHQub2UgPSAweDAxNTM7XG4gdC5vZWtvcmVhbiA9IDB4MzE1YTtcbiB0Lm9nb25layA9IDB4MDJkYjtcbiB0Lm9nb25la2NtYiA9IDB4MDMyODtcbiB0Lm9ncmF2ZSA9IDB4MDBmMjtcbiB0Lm9ndWphcmF0aSA9IDB4MGE5MztcbiB0Lm9oYXJtZW5pYW4gPSAweDA1ODU7XG4gdC5vaGlyYWdhbmEgPSAweDMwNGE7XG4gdC5vaG9va2Fib3ZlID0gMHgxZWNmO1xuIHQub2hvcm4gPSAweDAxYTE7XG4gdC5vaG9ybmFjdXRlID0gMHgxZWRiO1xuIHQub2hvcm5kb3RiZWxvdyA9IDB4MWVlMztcbiB0Lm9ob3JuZ3JhdmUgPSAweDFlZGQ7XG4gdC5vaG9ybmhvb2thYm92ZSA9IDB4MWVkZjtcbiB0Lm9ob3JudGlsZGUgPSAweDFlZTE7XG4gdC5vaHVuZ2FydW1sYXV0ID0gMHgwMTUxO1xuIHQub2kgPSAweDAxYTM7XG4gdC5vaW52ZXJ0ZWRicmV2ZSA9IDB4MDIwZjtcbiB0Lm9rYXRha2FuYSA9IDB4MzBhYTtcbiB0Lm9rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3NTtcbiB0Lm9rb3JlYW4gPSAweDMxNTc7XG4gdC5vbGVoZWJyZXcgPSAweDA1YWI7XG4gdC5vbWFjcm9uID0gMHgwMTRkO1xuIHQub21hY3JvbmFjdXRlID0gMHgxZTUzO1xuIHQub21hY3JvbmdyYXZlID0gMHgxZTUxO1xuIHQub21kZXZhID0gMHgwOTUwO1xuIHQub21lZ2EgPSAweDAzYzk7XG4gdC5vbWVnYTEgPSAweDAzZDY7XG4gdC5vbWVnYWN5cmlsbGljID0gMHgwNDYxO1xuIHQub21lZ2FsYXRpbmNsb3NlZCA9IDB4MDI3NztcbiB0Lm9tZWdhcm91bmRjeXJpbGxpYyA9IDB4MDQ3YjtcbiB0Lm9tZWdhdGl0bG9jeXJpbGxpYyA9IDB4MDQ3ZDtcbiB0Lm9tZWdhdG9ub3MgPSAweDAzY2U7XG4gdC5vbWd1amFyYXRpID0gMHgwYWQwO1xuIHQub21pY3JvbiA9IDB4MDNiZjtcbiB0Lm9taWNyb250b25vcyA9IDB4MDNjYztcbiB0Lm9tb25vc3BhY2UgPSAweGZmNGY7XG4gdC5vbmUgPSAweDAwMzE7XG4gdC5vbmVhcmFiaWMgPSAweDA2NjE7XG4gdC5vbmViZW5nYWxpID0gMHgwOWU3O1xuIHQub25lY2lyY2xlID0gMHgyNDYwO1xuIHQub25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4YTtcbiB0Lm9uZWRldmEgPSAweDA5Njc7XG4gdC5vbmVkb3RlbmxlYWRlciA9IDB4MjAyNDtcbiB0Lm9uZWVpZ2h0aCA9IDB4MjE1YjtcbiB0Lm9uZWZpdHRlZCA9IDB4ZjZkYztcbiB0Lm9uZWd1amFyYXRpID0gMHgwYWU3O1xuIHQub25lZ3VybXVraGkgPSAweDBhNjc7XG4gdC5vbmVoYWNrYXJhYmljID0gMHgwNjYxO1xuIHQub25laGFsZiA9IDB4MDBiZDtcbiB0Lm9uZWhhbmd6aG91ID0gMHgzMDIxO1xuIHQub25laWRlb2dyYXBoaWNwYXJlbiA9IDB4MzIyMDtcbiB0Lm9uZWluZmVyaW9yID0gMHgyMDgxO1xuIHQub25lbW9ub3NwYWNlID0gMHhmZjExO1xuIHQub25lbnVtZXJhdG9yYmVuZ2FsaSA9IDB4MDlmNDtcbiB0Lm9uZW9sZHN0eWxlID0gMHhmNzMxO1xuIHQub25lcGFyZW4gPSAweDI0NzQ7XG4gdC5vbmVwZXJpb2QgPSAweDI0ODg7XG4gdC5vbmVwZXJzaWFuID0gMHgwNmYxO1xuIHQub25lcXVhcnRlciA9IDB4MDBiYztcbiB0Lm9uZXJvbWFuID0gMHgyMTcwO1xuIHQub25lc3VwZXJpb3IgPSAweDAwYjk7XG4gdC5vbmV0aGFpID0gMHgwZTUxO1xuIHQub25ldGhpcmQgPSAweDIxNTM7XG4gdC5vb2dvbmVrID0gMHgwMWViO1xuIHQub29nb25la21hY3JvbiA9IDB4MDFlZDtcbiB0Lm9vZ3VybXVraGkgPSAweDBhMTM7XG4gdC5vb21hdHJhZ3VybXVraGkgPSAweDBhNGI7XG4gdC5vb3BlbiA9IDB4MDI1NDtcbiB0Lm9wYXJlbiA9IDB4MjRhYTtcbiB0Lm9wZW5idWxsZXQgPSAweDI1ZTY7XG4gdC5vcHRpb24gPSAweDIzMjU7XG4gdC5vcmRmZW1pbmluZSA9IDB4MDBhYTtcbiB0Lm9yZG1hc2N1bGluZSA9IDB4MDBiYTtcbiB0Lm9ydGhvZ29uYWwgPSAweDIyMWY7XG4gdC5vc2hvcnRkZXZhID0gMHgwOTEyO1xuIHQub3Nob3J0dm93ZWxzaWduZGV2YSA9IDB4MDk0YTtcbiB0Lm9zbGFzaCA9IDB4MDBmODtcbiB0Lm9zbGFzaGFjdXRlID0gMHgwMWZmO1xuIHQub3NtYWxsaGlyYWdhbmEgPSAweDMwNDk7XG4gdC5vc21hbGxrYXRha2FuYSA9IDB4MzBhOTtcbiB0Lm9zbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZiO1xuIHQub3N0cm9rZWFjdXRlID0gMHgwMWZmO1xuIHQub3N1cGVyaW9yID0gMHhmNmYwO1xuIHQub3RjeXJpbGxpYyA9IDB4MDQ3ZjtcbiB0Lm90aWxkZSA9IDB4MDBmNTtcbiB0Lm90aWxkZWFjdXRlID0gMHgxZTRkO1xuIHQub3RpbGRlZGllcmVzaXMgPSAweDFlNGY7XG4gdC5vdWJvcG9tb2ZvID0gMHgzMTIxO1xuIHQub3ZlcmxpbmUgPSAweDIwM2U7XG4gdC5vdmVybGluZWNlbnRlcmxpbmUgPSAweGZlNGE7XG4gdC5vdmVybGluZWNtYiA9IDB4MDMwNTtcbiB0Lm92ZXJsaW5lZGFzaGVkID0gMHhmZTQ5O1xuIHQub3ZlcmxpbmVkYmx3YXZ5ID0gMHhmZTRjO1xuIHQub3ZlcmxpbmV3YXZ5ID0gMHhmZTRiO1xuIHQub3ZlcnNjb3JlID0gMHgwMGFmO1xuIHQub3Zvd2Vsc2lnbmJlbmdhbGkgPSAweDA5Y2I7XG4gdC5vdm93ZWxzaWduZGV2YSA9IDB4MDk0YjtcbiB0Lm92b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjYjtcbiB0LnAgPSAweDAwNzA7XG4gdC5wYWFtcHNzcXVhcmUgPSAweDMzODA7XG4gdC5wYWFzZW50b3NxdWFyZSA9IDB4MzMyYjtcbiB0LnBhYmVuZ2FsaSA9IDB4MDlhYTtcbiB0LnBhY3V0ZSA9IDB4MWU1NTtcbiB0LnBhZGV2YSA9IDB4MDkyYTtcbiB0LnBhZ2Vkb3duID0gMHgyMWRmO1xuIHQucGFnZXVwID0gMHgyMWRlO1xuIHQucGFndWphcmF0aSA9IDB4MGFhYTtcbiB0LnBhZ3VybXVraGkgPSAweDBhMmE7XG4gdC5wYWhpcmFnYW5hID0gMHgzMDcxO1xuIHQucGFpeWFubm9pdGhhaSA9IDB4MGUyZjtcbiB0LnBha2F0YWthbmEgPSAweDMwZDE7XG4gdC5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iID0gMHgwNDg0O1xuIHQucGFsb2Noa2FjeXJpbGxpYyA9IDB4MDRjMDtcbiB0LnBhbnNpb3Nrb3JlYW4gPSAweDMxN2Y7XG4gdC5wYXJhZ3JhcGggPSAweDAwYjY7XG4gdC5wYXJhbGxlbCA9IDB4MjIyNTtcbiB0LnBhcmVubGVmdCA9IDB4MDAyODtcbiB0LnBhcmVubGVmdGFsdG9uZWFyYWJpYyA9IDB4ZmQzZTtcbiB0LnBhcmVubGVmdGJ0ID0gMHhmOGVkO1xuIHQucGFyZW5sZWZ0ZXggPSAweGY4ZWM7XG4gdC5wYXJlbmxlZnRpbmZlcmlvciA9IDB4MjA4ZDtcbiB0LnBhcmVubGVmdG1vbm9zcGFjZSA9IDB4ZmYwODtcbiB0LnBhcmVubGVmdHNtYWxsID0gMHhmZTU5O1xuIHQucGFyZW5sZWZ0c3VwZXJpb3IgPSAweDIwN2Q7XG4gdC5wYXJlbmxlZnR0cCA9IDB4ZjhlYjtcbiB0LnBhcmVubGVmdHZlcnRpY2FsID0gMHhmZTM1O1xuIHQucGFyZW5yaWdodCA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRhbHRvbmVhcmFiaWMgPSAweGZkM2Y7XG4gdC5wYXJlbnJpZ2h0YnQgPSAweGY4Zjg7XG4gdC5wYXJlbnJpZ2h0ZXggPSAweGY4Zjc7XG4gdC5wYXJlbnJpZ2h0aW5mZXJpb3IgPSAweDIwOGU7XG4gdC5wYXJlbnJpZ2h0bW9ub3NwYWNlID0gMHhmZjA5O1xuIHQucGFyZW5yaWdodHNtYWxsID0gMHhmZTVhO1xuIHQucGFyZW5yaWdodHN1cGVyaW9yID0gMHgyMDdlO1xuIHQucGFyZW5yaWdodHRwID0gMHhmOGY2O1xuIHQucGFyZW5yaWdodHZlcnRpY2FsID0gMHhmZTM2O1xuIHQucGFydGlhbGRpZmYgPSAweDIyMDI7XG4gdC5wYXNlcWhlYnJldyA9IDB4MDVjMDtcbiB0LnBhc2h0YWhlYnJldyA9IDB4MDU5OTtcbiB0LnBhc3F1YXJlID0gMHgzM2E5O1xuIHQucGF0YWggPSAweDA1Yjc7XG4gdC5wYXRhaDExID0gMHgwNWI3O1xuIHQucGF0YWgxZCA9IDB4MDViNztcbiB0LnBhdGFoMmEgPSAweDA1Yjc7XG4gdC5wYXRhaGhlYnJldyA9IDB4MDViNztcbiB0LnBhdGFobmFycm93aGVicmV3ID0gMHgwNWI3O1xuIHQucGF0YWhxdWFydGVyaGVicmV3ID0gMHgwNWI3O1xuIHQucGF0YWh3aWRlaGVicmV3ID0gMHgwNWI3O1xuIHQucGF6ZXJoZWJyZXcgPSAweDA1YTE7XG4gdC5wYm9wb21vZm8gPSAweDMxMDY7XG4gdC5wY2lyY2xlID0gMHgyNGRmO1xuIHQucGRvdGFjY2VudCA9IDB4MWU1NztcbiB0LnBlID0gMHgwNWU0O1xuIHQucGVjeXJpbGxpYyA9IDB4MDQzZjtcbiB0LnBlZGFnZXNoID0gMHhmYjQ0O1xuIHQucGVkYWdlc2hoZWJyZXcgPSAweGZiNDQ7XG4gdC5wZWV6aXNxdWFyZSA9IDB4MzMzYjtcbiB0LnBlZmluYWxkYWdlc2hoZWJyZXcgPSAweGZiNDM7XG4gdC5wZWhhcmFiaWMgPSAweDA2N2U7XG4gdC5wZWhhcm1lbmlhbiA9IDB4MDU3YTtcbiB0LnBlaGVicmV3ID0gMHgwNWU0O1xuIHQucGVoZmluYWxhcmFiaWMgPSAweGZiNTc7XG4gdC5wZWhpbml0aWFsYXJhYmljID0gMHhmYjU4O1xuIHQucGVoaXJhZ2FuYSA9IDB4MzA3YTtcbiB0LnBlaG1lZGlhbGFyYWJpYyA9IDB4ZmI1OTtcbiB0LnBla2F0YWthbmEgPSAweDMwZGE7XG4gdC5wZW1pZGRsZWhvb2tjeXJpbGxpYyA9IDB4MDRhNztcbiB0LnBlcmFmZWhlYnJldyA9IDB4ZmI0ZTtcbiB0LnBlcmNlbnQgPSAweDAwMjU7XG4gdC5wZXJjZW50YXJhYmljID0gMHgwNjZhO1xuIHQucGVyY2VudG1vbm9zcGFjZSA9IDB4ZmYwNTtcbiB0LnBlcmNlbnRzbWFsbCA9IDB4ZmU2YTtcbiB0LnBlcmlvZCA9IDB4MDAyZTtcbiB0LnBlcmlvZGFybWVuaWFuID0gMHgwNTg5O1xuIHQucGVyaW9kY2VudGVyZWQgPSAweDAwYjc7XG4gdC5wZXJpb2RoYWxmd2lkdGggPSAweGZmNjE7XG4gdC5wZXJpb2RpbmZlcmlvciA9IDB4ZjZlNztcbiB0LnBlcmlvZG1vbm9zcGFjZSA9IDB4ZmYwZTtcbiB0LnBlcmlvZHNtYWxsID0gMHhmZTUyO1xuIHQucGVyaW9kc3VwZXJpb3IgPSAweGY2ZTg7XG4gdC5wZXJpc3BvbWVuaWdyZWVrY21iID0gMHgwMzQyO1xuIHQucGVycGVuZGljdWxhciA9IDB4MjJhNTtcbiB0LnBlcnRob3VzYW5kID0gMHgyMDMwO1xuIHQucGVzZXRhID0gMHgyMGE3O1xuIHQucGZzcXVhcmUgPSAweDMzOGE7XG4gdC5waGFiZW5nYWxpID0gMHgwOWFiO1xuIHQucGhhZGV2YSA9IDB4MDkyYjtcbiB0LnBoYWd1amFyYXRpID0gMHgwYWFiO1xuIHQucGhhZ3VybXVraGkgPSAweDBhMmI7XG4gdC5waGkgPSAweDAzYzY7XG4gdC5waGkxID0gMHgwM2Q1O1xuIHQucGhpZXVwaGFjaXJjbGVrb3JlYW4gPSAweDMyN2E7XG4gdC5waGlldXBoYXBhcmVua29yZWFuID0gMHgzMjFhO1xuIHQucGhpZXVwaGNpcmNsZWtvcmVhbiA9IDB4MzI2YztcbiB0LnBoaWV1cGhrb3JlYW4gPSAweDMxNGQ7XG4gdC5waGlldXBocGFyZW5rb3JlYW4gPSAweDMyMGM7XG4gdC5waGlsYXRpbiA9IDB4MDI3ODtcbiB0LnBoaW50aHV0aGFpID0gMHgwZTNhO1xuIHQucGhpc3ltYm9sZ3JlZWsgPSAweDAzZDU7XG4gdC5waG9vayA9IDB4MDFhNTtcbiB0LnBob3BoYW50aGFpID0gMHgwZTFlO1xuIHQucGhvcGh1bmd0aGFpID0gMHgwZTFjO1xuIHQucGhvc2FtcGhhb3RoYWkgPSAweDBlMjA7XG4gdC5waSA9IDB4MDNjMDtcbiB0LnBpZXVwYWNpcmNsZWtvcmVhbiA9IDB4MzI3MztcbiB0LnBpZXVwYXBhcmVua29yZWFuID0gMHgzMjEzO1xuIHQucGlldXBjaWV1Y2tvcmVhbiA9IDB4MzE3NjtcbiB0LnBpZXVwY2lyY2xla29yZWFuID0gMHgzMjY1O1xuIHQucGlldXBraXllb2trb3JlYW4gPSAweDMxNzI7XG4gdC5waWV1cGtvcmVhbiA9IDB4MzE0MjtcbiB0LnBpZXVwcGFyZW5rb3JlYW4gPSAweDMyMDU7XG4gdC5waWV1cHNpb3NraXllb2trb3JlYW4gPSAweDMxNzQ7XG4gdC5waWV1cHNpb3Nrb3JlYW4gPSAweDMxNDQ7XG4gdC5waWV1cHNpb3N0aWtldXRrb3JlYW4gPSAweDMxNzU7XG4gdC5waWV1cHRoaWV1dGhrb3JlYW4gPSAweDMxNzc7XG4gdC5waWV1cHRpa2V1dGtvcmVhbiA9IDB4MzE3MztcbiB0LnBpaGlyYWdhbmEgPSAweDMwNzQ7XG4gdC5waWthdGFrYW5hID0gMHgzMGQ0O1xuIHQucGlzeW1ib2xncmVlayA9IDB4MDNkNjtcbiB0LnBpd3Jhcm1lbmlhbiA9IDB4MDU4MztcbiB0LnBsdXMgPSAweDAwMmI7XG4gdC5wbHVzYmVsb3djbWIgPSAweDAzMWY7XG4gdC5wbHVzY2lyY2xlID0gMHgyMjk1O1xuIHQucGx1c21pbnVzID0gMHgwMGIxO1xuIHQucGx1c21vZCA9IDB4MDJkNjtcbiB0LnBsdXNtb25vc3BhY2UgPSAweGZmMGI7XG4gdC5wbHVzc21hbGwgPSAweGZlNjI7XG4gdC5wbHVzc3VwZXJpb3IgPSAweDIwN2E7XG4gdC5wbW9ub3NwYWNlID0gMHhmZjUwO1xuIHQucG1zcXVhcmUgPSAweDMzZDg7XG4gdC5wb2hpcmFnYW5hID0gMHgzMDdkO1xuIHQucG9pbnRpbmdpbmRleGRvd253aGl0ZSA9IDB4MjYxZjtcbiB0LnBvaW50aW5naW5kZXhsZWZ0d2hpdGUgPSAweDI2MWM7XG4gdC5wb2ludGluZ2luZGV4cmlnaHR3aGl0ZSA9IDB4MjYxZTtcbiB0LnBvaW50aW5naW5kZXh1cHdoaXRlID0gMHgyNjFkO1xuIHQucG9rYXRha2FuYSA9IDB4MzBkZDtcbiB0LnBvcGxhdGhhaSA9IDB4MGUxYjtcbiB0LnBvc3RhbG1hcmsgPSAweDMwMTI7XG4gdC5wb3N0YWxtYXJrZmFjZSA9IDB4MzAyMDtcbiB0LnBwYXJlbiA9IDB4MjRhYjtcbiB0LnByZWNlZGVzID0gMHgyMjdhO1xuIHQucHJlc2NyaXB0aW9uID0gMHgyMTFlO1xuIHQucHJpbWVtb2QgPSAweDAyYjk7XG4gdC5wcmltZXJldmVyc2VkID0gMHgyMDM1O1xuIHQucHJvZHVjdCA9IDB4MjIwZjtcbiB0LnByb2plY3RpdmUgPSAweDIzMDU7XG4gdC5wcm9sb25nZWRrYW5hID0gMHgzMGZjO1xuIHQucHJvcGVsbG9yID0gMHgyMzE4O1xuIHQucHJvcGVyc3Vic2V0ID0gMHgyMjgyO1xuIHQucHJvcGVyc3VwZXJzZXQgPSAweDIyODM7XG4gdC5wcm9wb3J0aW9uID0gMHgyMjM3O1xuIHQucHJvcG9ydGlvbmFsID0gMHgyMjFkO1xuIHQucHNpID0gMHgwM2M4O1xuIHQucHNpY3lyaWxsaWMgPSAweDA0NzE7XG4gdC5wc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWIgPSAweDA0ODY7XG4gdC5wc3NxdWFyZSA9IDB4MzNiMDtcbiB0LnB1aGlyYWdhbmEgPSAweDMwNzc7XG4gdC5wdWthdGFrYW5hID0gMHgzMGQ3O1xuIHQucHZzcXVhcmUgPSAweDMzYjQ7XG4gdC5wd3NxdWFyZSA9IDB4MzNiYTtcbiB0LnEgPSAweDAwNzE7XG4gdC5xYWRldmEgPSAweDA5NTg7XG4gdC5xYWRtYWhlYnJldyA9IDB4MDVhODtcbiB0LnFhZmFyYWJpYyA9IDB4MDY0MjtcbiB0LnFhZmZpbmFsYXJhYmljID0gMHhmZWQ2O1xuIHQucWFmaW5pdGlhbGFyYWJpYyA9IDB4ZmVkNztcbiB0LnFhZm1lZGlhbGFyYWJpYyA9IDB4ZmVkODtcbiB0LnFhbWF0cyA9IDB4MDViODtcbiB0LnFhbWF0czEwID0gMHgwNWI4O1xuIHQucWFtYXRzMWEgPSAweDA1Yjg7XG4gdC5xYW1hdHMxYyA9IDB4MDViODtcbiB0LnFhbWF0czI3ID0gMHgwNWI4O1xuIHQucWFtYXRzMjkgPSAweDA1Yjg7XG4gdC5xYW1hdHMzMyA9IDB4MDViODtcbiB0LnFhbWF0c2RlID0gMHgwNWI4O1xuIHQucWFtYXRzaGVicmV3ID0gMHgwNWI4O1xuIHQucWFtYXRzbmFycm93aGVicmV3ID0gMHgwNWI4O1xuIHQucWFtYXRzcWF0YW5oZWJyZXcgPSAweDA1Yjg7XG4gdC5xYW1hdHNxYXRhbm5hcnJvd2hlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3FhdGFucXVhcnRlcmhlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3FhdGFud2lkZWhlYnJldyA9IDB4MDViODtcbiB0LnFhbWF0c3F1YXJ0ZXJoZWJyZXcgPSAweDA1Yjg7XG4gdC5xYW1hdHN3aWRlaGVicmV3ID0gMHgwNWI4O1xuIHQucWFybmV5cGFyYWhlYnJldyA9IDB4MDU5ZjtcbiB0LnFib3BvbW9mbyA9IDB4MzExMTtcbiB0LnFjaXJjbGUgPSAweDI0ZTA7XG4gdC5xaG9vayA9IDB4MDJhMDtcbiB0LnFtb25vc3BhY2UgPSAweGZmNTE7XG4gdC5xb2YgPSAweDA1ZTc7XG4gdC5xb2ZkYWdlc2ggPSAweGZiNDc7XG4gdC5xb2ZkYWdlc2hoZWJyZXcgPSAweGZiNDc7XG4gdC5xb2ZoZWJyZXcgPSAweDA1ZTc7XG4gdC5xcGFyZW4gPSAweDI0YWM7XG4gdC5xdWFydGVybm90ZSA9IDB4MjY2OTtcbiB0LnF1YnV0cyA9IDB4MDViYjtcbiB0LnF1YnV0czE4ID0gMHgwNWJiO1xuIHQucXVidXRzMjUgPSAweDA1YmI7XG4gdC5xdWJ1dHMzMSA9IDB4MDViYjtcbiB0LnF1YnV0c2hlYnJldyA9IDB4MDViYjtcbiB0LnF1YnV0c25hcnJvd2hlYnJldyA9IDB4MDViYjtcbiB0LnF1YnV0c3F1YXJ0ZXJoZWJyZXcgPSAweDA1YmI7XG4gdC5xdWJ1dHN3aWRlaGVicmV3ID0gMHgwNWJiO1xuIHQucXVlc3Rpb24gPSAweDAwM2Y7XG4gdC5xdWVzdGlvbmFyYWJpYyA9IDB4MDYxZjtcbiB0LnF1ZXN0aW9uYXJtZW5pYW4gPSAweDA1NWU7XG4gdC5xdWVzdGlvbmRvd24gPSAweDAwYmY7XG4gdC5xdWVzdGlvbmRvd25zbWFsbCA9IDB4ZjdiZjtcbiB0LnF1ZXN0aW9uZ3JlZWsgPSAweDAzN2U7XG4gdC5xdWVzdGlvbm1vbm9zcGFjZSA9IDB4ZmYxZjtcbiB0LnF1ZXN0aW9uc21hbGwgPSAweGY3M2Y7XG4gdC5xdW90ZWRibCA9IDB4MDAyMjtcbiB0LnF1b3RlZGJsYmFzZSA9IDB4MjAxZTtcbiB0LnF1b3RlZGJsbGVmdCA9IDB4MjAxYztcbiB0LnF1b3RlZGJsbW9ub3NwYWNlID0gMHhmZjAyO1xuIHQucXVvdGVkYmxwcmltZSA9IDB4MzAxZTtcbiB0LnF1b3RlZGJscHJpbWVyZXZlcnNlZCA9IDB4MzAxZDtcbiB0LnF1b3RlZGJscmlnaHQgPSAweDIwMWQ7XG4gdC5xdW90ZWxlZnQgPSAweDIwMTg7XG4gdC5xdW90ZWxlZnRyZXZlcnNlZCA9IDB4MjAxYjtcbiB0LnF1b3RlcmV2ZXJzZWQgPSAweDIwMWI7XG4gdC5xdW90ZXJpZ2h0ID0gMHgyMDE5O1xuIHQucXVvdGVyaWdodG4gPSAweDAxNDk7XG4gdC5xdW90ZXNpbmdsYmFzZSA9IDB4MjAxYTtcbiB0LnF1b3Rlc2luZ2xlID0gMHgwMDI3O1xuIHQucXVvdGVzaW5nbGVtb25vc3BhY2UgPSAweGZmMDc7XG4gdC5yID0gMHgwMDcyO1xuIHQucmFhcm1lbmlhbiA9IDB4MDU3YztcbiB0LnJhYmVuZ2FsaSA9IDB4MDliMDtcbiB0LnJhY3V0ZSA9IDB4MDE1NTtcbiB0LnJhZGV2YSA9IDB4MDkzMDtcbiB0LnJhZGljYWwgPSAweDIyMWE7XG4gdC5yYWRpY2FsZXggPSAweGY4ZTU7XG4gdC5yYWRvdmVyc3NxdWFyZSA9IDB4MzNhZTtcbiB0LnJhZG92ZXJzc3F1YXJlZHNxdWFyZSA9IDB4MzNhZjtcbiB0LnJhZHNxdWFyZSA9IDB4MzNhZDtcbiB0LnJhZmUgPSAweDA1YmY7XG4gdC5yYWZlaGVicmV3ID0gMHgwNWJmO1xuIHQucmFndWphcmF0aSA9IDB4MGFiMDtcbiB0LnJhZ3VybXVraGkgPSAweDBhMzA7XG4gdC5yYWhpcmFnYW5hID0gMHgzMDg5O1xuIHQucmFrYXRha2FuYSA9IDB4MzBlOTtcbiB0LnJha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTc7XG4gdC5yYWxvd2VyZGlhZ29uYWxiZW5nYWxpID0gMHgwOWYxO1xuIHQucmFtaWRkbGVkaWFnb25hbGJlbmdhbGkgPSAweDA5ZjA7XG4gdC5yYW1zaG9ybiA9IDB4MDI2NDtcbiB0LnJhdGlvID0gMHgyMjM2O1xuIHQucmJvcG9tb2ZvID0gMHgzMTE2O1xuIHQucmNhcm9uID0gMHgwMTU5O1xuIHQucmNlZGlsbGEgPSAweDAxNTc7XG4gdC5yY2lyY2xlID0gMHgyNGUxO1xuIHQucmNvbW1hYWNjZW50ID0gMHgwMTU3O1xuIHQucmRibGdyYXZlID0gMHgwMjExO1xuIHQucmRvdGFjY2VudCA9IDB4MWU1OTtcbiB0LnJkb3RiZWxvdyA9IDB4MWU1YjtcbiB0LnJkb3RiZWxvd21hY3JvbiA9IDB4MWU1ZDtcbiB0LnJlZmVyZW5jZW1hcmsgPSAweDIwM2I7XG4gdC5yZWZsZXhzdWJzZXQgPSAweDIyODY7XG4gdC5yZWZsZXhzdXBlcnNldCA9IDB4MjI4NztcbiB0LnJlZ2lzdGVyZWQgPSAweDAwYWU7XG4gdC5yZWdpc3RlcnNhbnMgPSAweGY4ZTg7XG4gdC5yZWdpc3RlcnNlcmlmID0gMHhmNmRhO1xuIHQucmVoYXJhYmljID0gMHgwNjMxO1xuIHQucmVoYXJtZW5pYW4gPSAweDA1ODA7XG4gdC5yZWhmaW5hbGFyYWJpYyA9IDB4ZmVhZTtcbiB0LnJlaGlyYWdhbmEgPSAweDMwOGM7XG4gdC5yZWthdGFrYW5hID0gMHgzMGVjO1xuIHQucmVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5YTtcbiB0LnJlc2ggPSAweDA1ZTg7XG4gdC5yZXNoZGFnZXNoaGVicmV3ID0gMHhmYjQ4O1xuIHQucmVzaGhlYnJldyA9IDB4MDVlODtcbiB0LnJldmVyc2VkdGlsZGUgPSAweDIyM2Q7XG4gdC5yZXZpYWhlYnJldyA9IDB4MDU5NztcbiB0LnJldmlhbXVncmFzaGhlYnJldyA9IDB4MDU5NztcbiB0LnJldmxvZ2ljYWxub3QgPSAweDIzMTA7XG4gdC5yZmlzaGhvb2sgPSAweDAyN2U7XG4gdC5yZmlzaGhvb2tyZXZlcnNlZCA9IDB4MDI3ZjtcbiB0LnJoYWJlbmdhbGkgPSAweDA5ZGQ7XG4gdC5yaGFkZXZhID0gMHgwOTVkO1xuIHQucmhvID0gMHgwM2MxO1xuIHQucmhvb2sgPSAweDAyN2Q7XG4gdC5yaG9va3R1cm5lZCA9IDB4MDI3YjtcbiB0LnJob29rdHVybmVkc3VwZXJpb3IgPSAweDAyYjU7XG4gdC5yaG9zeW1ib2xncmVlayA9IDB4MDNmMTtcbiB0LnJob3RpY2hvb2ttb2QgPSAweDAyZGU7XG4gdC5yaWV1bGFjaXJjbGVrb3JlYW4gPSAweDMyNzE7XG4gdC5yaWV1bGFwYXJlbmtvcmVhbiA9IDB4MzIxMTtcbiB0LnJpZXVsY2lyY2xla29yZWFuID0gMHgzMjYzO1xuIHQucmlldWxoaWV1aGtvcmVhbiA9IDB4MzE0MDtcbiB0LnJpZXVsa2l5ZW9ra29yZWFuID0gMHgzMTNhO1xuIHQucmlldWxraXllb2tzaW9za29yZWFuID0gMHgzMTY5O1xuIHQucmlldWxrb3JlYW4gPSAweDMxMzk7XG4gdC5yaWV1bG1pZXVta29yZWFuID0gMHgzMTNiO1xuIHQucmlldWxwYW5zaW9za29yZWFuID0gMHgzMTZjO1xuIHQucmlldWxwYXJlbmtvcmVhbiA9IDB4MzIwMztcbiB0LnJpZXVscGhpZXVwaGtvcmVhbiA9IDB4MzEzZjtcbiB0LnJpZXVscGlldXBrb3JlYW4gPSAweDMxM2M7XG4gdC5yaWV1bHBpZXVwc2lvc2tvcmVhbiA9IDB4MzE2YjtcbiB0LnJpZXVsc2lvc2tvcmVhbiA9IDB4MzEzZDtcbiB0LnJpZXVsdGhpZXV0aGtvcmVhbiA9IDB4MzEzZTtcbiB0LnJpZXVsdGlrZXV0a29yZWFuID0gMHgzMTZhO1xuIHQucmlldWx5ZW9yaW5oaWV1aGtvcmVhbiA9IDB4MzE2ZDtcbiB0LnJpZ2h0YW5nbGUgPSAweDIyMWY7XG4gdC5yaWdodHRhY2tiZWxvd2NtYiA9IDB4MDMxOTtcbiB0LnJpZ2h0dHJpYW5nbGUgPSAweDIyYmY7XG4gdC5yaWhpcmFnYW5hID0gMHgzMDhhO1xuIHQucmlrYXRha2FuYSA9IDB4MzBlYTtcbiB0LnJpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTg7XG4gdC5yaW5nID0gMHgwMmRhO1xuIHQucmluZ2JlbG93Y21iID0gMHgwMzI1O1xuIHQucmluZ2NtYiA9IDB4MDMwYTtcbiB0LnJpbmdoYWxmbGVmdCA9IDB4MDJiZjtcbiB0LnJpbmdoYWxmbGVmdGFybWVuaWFuID0gMHgwNTU5O1xuIHQucmluZ2hhbGZsZWZ0YmVsb3djbWIgPSAweDAzMWM7XG4gdC5yaW5naGFsZmxlZnRjZW50ZXJlZCA9IDB4MDJkMztcbiB0LnJpbmdoYWxmcmlnaHQgPSAweDAyYmU7XG4gdC5yaW5naGFsZnJpZ2h0YmVsb3djbWIgPSAweDAzMzk7XG4gdC5yaW5naGFsZnJpZ2h0Y2VudGVyZWQgPSAweDAyZDI7XG4gdC5yaW52ZXJ0ZWRicmV2ZSA9IDB4MDIxMztcbiB0LnJpdHRvcnVzcXVhcmUgPSAweDMzNTE7XG4gdC5ybGluZWJlbG93ID0gMHgxZTVmO1xuIHQucmxvbmdsZWcgPSAweDAyN2M7XG4gdC5ybG9uZ2xlZ3R1cm5lZCA9IDB4MDI3YTtcbiB0LnJtb25vc3BhY2UgPSAweGZmNTI7XG4gdC5yb2hpcmFnYW5hID0gMHgzMDhkO1xuIHQucm9rYXRha2FuYSA9IDB4MzBlZDtcbiB0LnJva2F0YWthbmFoYWxmd2lkdGggPSAweGZmOWI7XG4gdC5yb3J1YXRoYWkgPSAweDBlMjM7XG4gdC5ycGFyZW4gPSAweDI0YWQ7XG4gdC5ycmFiZW5nYWxpID0gMHgwOWRjO1xuIHQucnJhZGV2YSA9IDB4MDkzMTtcbiB0LnJyYWd1cm11a2hpID0gMHgwYTVjO1xuIHQucnJlaGFyYWJpYyA9IDB4MDY5MTtcbiB0LnJyZWhmaW5hbGFyYWJpYyA9IDB4ZmI4ZDtcbiB0LnJydm9jYWxpY2JlbmdhbGkgPSAweDA5ZTA7XG4gdC5ycnZvY2FsaWNkZXZhID0gMHgwOTYwO1xuIHQucnJ2b2NhbGljZ3VqYXJhdGkgPSAweDBhZTA7XG4gdC5ycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpID0gMHgwOWM0O1xuIHQucnJ2b2NhbGljdm93ZWxzaWduZGV2YSA9IDB4MDk0NDtcbiB0LnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWM0O1xuIHQucnN1cGVyaW9yID0gMHhmNmYxO1xuIHQucnRibG9jayA9IDB4MjU5MDtcbiB0LnJ0dXJuZWQgPSAweDAyNzk7XG4gdC5ydHVybmVkc3VwZXJpb3IgPSAweDAyYjQ7XG4gdC5ydWhpcmFnYW5hID0gMHgzMDhiO1xuIHQucnVrYXRha2FuYSA9IDB4MzBlYjtcbiB0LnJ1a2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTk7XG4gdC5ydXBlZW1hcmtiZW5nYWxpID0gMHgwOWYyO1xuIHQucnVwZWVzaWduYmVuZ2FsaSA9IDB4MDlmMztcbiB0LnJ1cGlhaCA9IDB4ZjZkZDtcbiB0LnJ1dGhhaSA9IDB4MGUyNDtcbiB0LnJ2b2NhbGljYmVuZ2FsaSA9IDB4MDk4YjtcbiB0LnJ2b2NhbGljZGV2YSA9IDB4MDkwYjtcbiB0LnJ2b2NhbGljZ3VqYXJhdGkgPSAweDBhOGI7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzM7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmRldmEgPSAweDA5NDM7XG4gdC5ydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMzO1xuIHQucyA9IDB4MDA3MztcbiB0LnNhYmVuZ2FsaSA9IDB4MDliODtcbiB0LnNhY3V0ZSA9IDB4MDE1YjtcbiB0LnNhY3V0ZWRvdGFjY2VudCA9IDB4MWU2NTtcbiB0LnNhZGFyYWJpYyA9IDB4MDYzNTtcbiB0LnNhZGV2YSA9IDB4MDkzODtcbiB0LnNhZGZpbmFsYXJhYmljID0gMHhmZWJhO1xuIHQuc2FkaW5pdGlhbGFyYWJpYyA9IDB4ZmViYjtcbiB0LnNhZG1lZGlhbGFyYWJpYyA9IDB4ZmViYztcbiB0LnNhZ3VqYXJhdGkgPSAweDBhYjg7XG4gdC5zYWd1cm11a2hpID0gMHgwYTM4O1xuIHQuc2FoaXJhZ2FuYSA9IDB4MzA1NTtcbiB0LnNha2F0YWthbmEgPSAweDMwYjU7XG4gdC5zYWthdGFrYW5haGFsZndpZHRoID0gMHhmZjdiO1xuIHQuc2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYyA9IDB4ZmRmYTtcbiB0LnNhbWVraCA9IDB4MDVlMTtcbiB0LnNhbWVraGRhZ2VzaCA9IDB4ZmI0MTtcbiB0LnNhbWVraGRhZ2VzaGhlYnJldyA9IDB4ZmI0MTtcbiB0LnNhbWVraGhlYnJldyA9IDB4MDVlMTtcbiB0LnNhcmFhYXRoYWkgPSAweDBlMzI7XG4gdC5zYXJhYWV0aGFpID0gMHgwZTQxO1xuIHQuc2FyYWFpbWFpbWFsYWl0aGFpID0gMHgwZTQ0O1xuIHQuc2FyYWFpbWFpbXVhbnRoYWkgPSAweDBlNDM7XG4gdC5zYXJhYW10aGFpID0gMHgwZTMzO1xuIHQuc2FyYWF0aGFpID0gMHgwZTMwO1xuIHQuc2FyYWV0aGFpID0gMHgwZTQwO1xuIHQuc2FyYWlpbGVmdHRoYWkgPSAweGY4ODY7XG4gdC5zYXJhaWl0aGFpID0gMHgwZTM1O1xuIHQuc2FyYWlsZWZ0dGhhaSA9IDB4Zjg4NTtcbiB0LnNhcmFpdGhhaSA9IDB4MGUzNDtcbiB0LnNhcmFvdGhhaSA9IDB4MGU0MjtcbiB0LnNhcmF1ZWVsZWZ0dGhhaSA9IDB4Zjg4ODtcbiB0LnNhcmF1ZWV0aGFpID0gMHgwZTM3O1xuIHQuc2FyYXVlbGVmdHRoYWkgPSAweGY4ODc7XG4gdC5zYXJhdWV0aGFpID0gMHgwZTM2O1xuIHQuc2FyYXV0aGFpID0gMHgwZTM4O1xuIHQuc2FyYXV1dGhhaSA9IDB4MGUzOTtcbiB0LnNib3BvbW9mbyA9IDB4MzExOTtcbiB0LnNjYXJvbiA9IDB4MDE2MTtcbiB0LnNjYXJvbmRvdGFjY2VudCA9IDB4MWU2NztcbiB0LnNjZWRpbGxhID0gMHgwMTVmO1xuIHQuc2Nod2EgPSAweDAyNTk7XG4gdC5zY2h3YWN5cmlsbGljID0gMHgwNGQ5O1xuIHQuc2Nod2FkaWVyZXNpc2N5cmlsbGljID0gMHgwNGRiO1xuIHQuc2Nod2Fob29rID0gMHgwMjVhO1xuIHQuc2NpcmNsZSA9IDB4MjRlMjtcbiB0LnNjaXJjdW1mbGV4ID0gMHgwMTVkO1xuIHQuc2NvbW1hYWNjZW50ID0gMHgwMjE5O1xuIHQuc2RvdGFjY2VudCA9IDB4MWU2MTtcbiB0LnNkb3RiZWxvdyA9IDB4MWU2MztcbiB0LnNkb3RiZWxvd2RvdGFjY2VudCA9IDB4MWU2OTtcbiB0LnNlYWd1bGxiZWxvd2NtYiA9IDB4MDMzYztcbiB0LnNlY29uZCA9IDB4MjAzMztcbiB0LnNlY29uZHRvbmVjaGluZXNlID0gMHgwMmNhO1xuIHQuc2VjdGlvbiA9IDB4MDBhNztcbiB0LnNlZW5hcmFiaWMgPSAweDA2MzM7XG4gdC5zZWVuZmluYWxhcmFiaWMgPSAweGZlYjI7XG4gdC5zZWVuaW5pdGlhbGFyYWJpYyA9IDB4ZmViMztcbiB0LnNlZW5tZWRpYWxhcmFiaWMgPSAweGZlYjQ7XG4gdC5zZWdvbCA9IDB4MDViNjtcbiB0LnNlZ29sMTMgPSAweDA1YjY7XG4gdC5zZWdvbDFmID0gMHgwNWI2O1xuIHQuc2Vnb2wyYyA9IDB4MDViNjtcbiB0LnNlZ29saGVicmV3ID0gMHgwNWI2O1xuIHQuc2Vnb2xuYXJyb3doZWJyZXcgPSAweDA1YjY7XG4gdC5zZWdvbHF1YXJ0ZXJoZWJyZXcgPSAweDA1YjY7XG4gdC5zZWdvbHRhaGVicmV3ID0gMHgwNTkyO1xuIHQuc2Vnb2x3aWRlaGVicmV3ID0gMHgwNWI2O1xuIHQuc2VoYXJtZW5pYW4gPSAweDA1N2Q7XG4gdC5zZWhpcmFnYW5hID0gMHgzMDViO1xuIHQuc2VrYXRha2FuYSA9IDB4MzBiYjtcbiB0LnNla2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2U7XG4gdC5zZW1pY29sb24gPSAweDAwM2I7XG4gdC5zZW1pY29sb25hcmFiaWMgPSAweDA2MWI7XG4gdC5zZW1pY29sb25tb25vc3BhY2UgPSAweGZmMWI7XG4gdC5zZW1pY29sb25zbWFsbCA9IDB4ZmU1NDtcbiB0LnNlbWl2b2ljZWRtYXJra2FuYSA9IDB4MzA5YztcbiB0LnNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aCA9IDB4ZmY5ZjtcbiB0LnNlbnRpc3F1YXJlID0gMHgzMzIyO1xuIHQuc2VudG9zcXVhcmUgPSAweDMzMjM7XG4gdC5zZXZlbiA9IDB4MDAzNztcbiB0LnNldmVuYXJhYmljID0gMHgwNjY3O1xuIHQuc2V2ZW5iZW5nYWxpID0gMHgwOWVkO1xuIHQuc2V2ZW5jaXJjbGUgPSAweDI0NjY7XG4gdC5zZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OTA7XG4gdC5zZXZlbmRldmEgPSAweDA5NmQ7XG4gdC5zZXZlbmVpZ2h0aHMgPSAweDIxNWU7XG4gdC5zZXZlbmd1amFyYXRpID0gMHgwYWVkO1xuIHQuc2V2ZW5ndXJtdWtoaSA9IDB4MGE2ZDtcbiB0LnNldmVuaGFja2FyYWJpYyA9IDB4MDY2NztcbiB0LnNldmVuaGFuZ3pob3UgPSAweDMwMjc7XG4gdC5zZXZlbmlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjY7XG4gdC5zZXZlbmluZmVyaW9yID0gMHgyMDg3O1xuIHQuc2V2ZW5tb25vc3BhY2UgPSAweGZmMTc7XG4gdC5zZXZlbm9sZHN0eWxlID0gMHhmNzM3O1xuIHQuc2V2ZW5wYXJlbiA9IDB4MjQ3YTtcbiB0LnNldmVucGVyaW9kID0gMHgyNDhlO1xuIHQuc2V2ZW5wZXJzaWFuID0gMHgwNmY3O1xuIHQuc2V2ZW5yb21hbiA9IDB4MjE3NjtcbiB0LnNldmVuc3VwZXJpb3IgPSAweDIwNzc7XG4gdC5zZXZlbnRlZW5jaXJjbGUgPSAweDI0NzA7XG4gdC5zZXZlbnRlZW5wYXJlbiA9IDB4MjQ4NDtcbiB0LnNldmVudGVlbnBlcmlvZCA9IDB4MjQ5ODtcbiB0LnNldmVudGhhaSA9IDB4MGU1NztcbiB0LnNmdGh5cGhlbiA9IDB4MDBhZDtcbiB0LnNoYWFybWVuaWFuID0gMHgwNTc3O1xuIHQuc2hhYmVuZ2FsaSA9IDB4MDliNjtcbiB0LnNoYWN5cmlsbGljID0gMHgwNDQ4O1xuIHQuc2hhZGRhYXJhYmljID0gMHgwNjUxO1xuIHQuc2hhZGRhZGFtbWFhcmFiaWMgPSAweGZjNjE7XG4gdC5zaGFkZGFkYW1tYXRhbmFyYWJpYyA9IDB4ZmM1ZTtcbiB0LnNoYWRkYWZhdGhhYXJhYmljID0gMHhmYzYwO1xuIHQuc2hhZGRha2FzcmFhcmFiaWMgPSAweGZjNjI7XG4gdC5zaGFkZGFrYXNyYXRhbmFyYWJpYyA9IDB4ZmM1ZjtcbiB0LnNoYWRlID0gMHgyNTkyO1xuIHQuc2hhZGVkYXJrID0gMHgyNTkzO1xuIHQuc2hhZGVsaWdodCA9IDB4MjU5MTtcbiB0LnNoYWRlbWVkaXVtID0gMHgyNTkyO1xuIHQuc2hhZGV2YSA9IDB4MDkzNjtcbiB0LnNoYWd1amFyYXRpID0gMHgwYWI2O1xuIHQuc2hhZ3VybXVraGkgPSAweDBhMzY7XG4gdC5zaGFsc2hlbGV0aGVicmV3ID0gMHgwNTkzO1xuIHQuc2hib3BvbW9mbyA9IDB4MzExNTtcbiB0LnNoY2hhY3lyaWxsaWMgPSAweDA0NDk7XG4gdC5zaGVlbmFyYWJpYyA9IDB4MDYzNDtcbiB0LnNoZWVuZmluYWxhcmFiaWMgPSAweGZlYjY7XG4gdC5zaGVlbmluaXRpYWxhcmFiaWMgPSAweGZlYjc7XG4gdC5zaGVlbm1lZGlhbGFyYWJpYyA9IDB4ZmViODtcbiB0LnNoZWljb3B0aWMgPSAweDAzZTM7XG4gdC5zaGVxZWwgPSAweDIwYWE7XG4gdC5zaGVxZWxoZWJyZXcgPSAweDIwYWE7XG4gdC5zaGV2YSA9IDB4MDViMDtcbiB0LnNoZXZhMTE1ID0gMHgwNWIwO1xuIHQuc2hldmExNSA9IDB4MDViMDtcbiB0LnNoZXZhMjIgPSAweDA1YjA7XG4gdC5zaGV2YTJlID0gMHgwNWIwO1xuIHQuc2hldmFoZWJyZXcgPSAweDA1YjA7XG4gdC5zaGV2YW5hcnJvd2hlYnJldyA9IDB4MDViMDtcbiB0LnNoZXZhcXVhcnRlcmhlYnJldyA9IDB4MDViMDtcbiB0LnNoZXZhd2lkZWhlYnJldyA9IDB4MDViMDtcbiB0LnNoaGFjeXJpbGxpYyA9IDB4MDRiYjtcbiB0LnNoaW1hY29wdGljID0gMHgwM2VkO1xuIHQuc2hpbiA9IDB4MDVlOTtcbiB0LnNoaW5kYWdlc2ggPSAweGZiNDk7XG4gdC5zaGluZGFnZXNoaGVicmV3ID0gMHhmYjQ5O1xuIHQuc2hpbmRhZ2VzaHNoaW5kb3QgPSAweGZiMmM7XG4gdC5zaGluZGFnZXNoc2hpbmRvdGhlYnJldyA9IDB4ZmIyYztcbiB0LnNoaW5kYWdlc2hzaW5kb3QgPSAweGZiMmQ7XG4gdC5zaGluZGFnZXNoc2luZG90aGVicmV3ID0gMHhmYjJkO1xuIHQuc2hpbmRvdGhlYnJldyA9IDB4MDVjMTtcbiB0LnNoaW5oZWJyZXcgPSAweDA1ZTk7XG4gdC5zaGluc2hpbmRvdCA9IDB4ZmIyYTtcbiB0LnNoaW5zaGluZG90aGVicmV3ID0gMHhmYjJhO1xuIHQuc2hpbnNpbmRvdCA9IDB4ZmIyYjtcbiB0LnNoaW5zaW5kb3RoZWJyZXcgPSAweGZiMmI7XG4gdC5zaG9vayA9IDB4MDI4MjtcbiB0LnNpZ21hID0gMHgwM2MzO1xuIHQuc2lnbWExID0gMHgwM2MyO1xuIHQuc2lnbWFmaW5hbCA9IDB4MDNjMjtcbiB0LnNpZ21hbHVuYXRlc3ltYm9sZ3JlZWsgPSAweDAzZjI7XG4gdC5zaWhpcmFnYW5hID0gMHgzMDU3O1xuIHQuc2lrYXRha2FuYSA9IDB4MzBiNztcbiB0LnNpa2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2M7XG4gdC5zaWx1cWhlYnJldyA9IDB4MDViZDtcbiB0LnNpbHVxbGVmdGhlYnJldyA9IDB4MDViZDtcbiB0LnNpbWlsYXIgPSAweDIyM2M7XG4gdC5zaW5kb3RoZWJyZXcgPSAweDA1YzI7XG4gdC5zaW9zYWNpcmNsZWtvcmVhbiA9IDB4MzI3NDtcbiB0LnNpb3NhcGFyZW5rb3JlYW4gPSAweDMyMTQ7XG4gdC5zaW9zY2lldWNrb3JlYW4gPSAweDMxN2U7XG4gdC5zaW9zY2lyY2xla29yZWFuID0gMHgzMjY2O1xuIHQuc2lvc2tpeWVva2tvcmVhbiA9IDB4MzE3YTtcbiB0LnNpb3Nrb3JlYW4gPSAweDMxNDU7XG4gdC5zaW9zbmlldW5rb3JlYW4gPSAweDMxN2I7XG4gdC5zaW9zcGFyZW5rb3JlYW4gPSAweDMyMDY7XG4gdC5zaW9zcGlldXBrb3JlYW4gPSAweDMxN2Q7XG4gdC5zaW9zdGlrZXV0a29yZWFuID0gMHgzMTdjO1xuIHQuc2l4ID0gMHgwMDM2O1xuIHQuc2l4YXJhYmljID0gMHgwNjY2O1xuIHQuc2l4YmVuZ2FsaSA9IDB4MDllYztcbiB0LnNpeGNpcmNsZSA9IDB4MjQ2NTtcbiB0LnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGY7XG4gdC5zaXhkZXZhID0gMHgwOTZjO1xuIHQuc2l4Z3VqYXJhdGkgPSAweDBhZWM7XG4gdC5zaXhndXJtdWtoaSA9IDB4MGE2YztcbiB0LnNpeGhhY2thcmFiaWMgPSAweDA2NjY7XG4gdC5zaXhoYW5nemhvdSA9IDB4MzAyNjtcbiB0LnNpeGlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjU7XG4gdC5zaXhpbmZlcmlvciA9IDB4MjA4NjtcbiB0LnNpeG1vbm9zcGFjZSA9IDB4ZmYxNjtcbiB0LnNpeG9sZHN0eWxlID0gMHhmNzM2O1xuIHQuc2l4cGFyZW4gPSAweDI0Nzk7XG4gdC5zaXhwZXJpb2QgPSAweDI0OGQ7XG4gdC5zaXhwZXJzaWFuID0gMHgwNmY2O1xuIHQuc2l4cm9tYW4gPSAweDIxNzU7XG4gdC5zaXhzdXBlcmlvciA9IDB4MjA3NjtcbiB0LnNpeHRlZW5jaXJjbGUgPSAweDI0NmY7XG4gdC5zaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGkgPSAweDA5Zjk7XG4gdC5zaXh0ZWVucGFyZW4gPSAweDI0ODM7XG4gdC5zaXh0ZWVucGVyaW9kID0gMHgyNDk3O1xuIHQuc2l4dGhhaSA9IDB4MGU1NjtcbiB0LnNsYXNoID0gMHgwMDJmO1xuIHQuc2xhc2htb25vc3BhY2UgPSAweGZmMGY7XG4gdC5zbG9uZyA9IDB4MDE3ZjtcbiB0LnNsb25nZG90YWNjZW50ID0gMHgxZTliO1xuIHQuc21pbGVmYWNlID0gMHgyNjNhO1xuIHQuc21vbm9zcGFjZSA9IDB4ZmY1MztcbiB0LnNvZnBhc3VxaGVicmV3ID0gMHgwNWMzO1xuIHQuc29mdGh5cGhlbiA9IDB4MDBhZDtcbiB0LnNvZnRzaWduY3lyaWxsaWMgPSAweDA0NGM7XG4gdC5zb2hpcmFnYW5hID0gMHgzMDVkO1xuIHQuc29rYXRha2FuYSA9IDB4MzBiZDtcbiB0LnNva2F0YWthbmFoYWxmd2lkdGggPSAweGZmN2Y7XG4gdC5zb2xpZHVzbG9uZ292ZXJsYXljbWIgPSAweDAzMzg7XG4gdC5zb2xpZHVzc2hvcnRvdmVybGF5Y21iID0gMHgwMzM3O1xuIHQuc29ydXNpdGhhaSA9IDB4MGUyOTtcbiB0LnNvc2FsYXRoYWkgPSAweDBlMjg7XG4gdC5zb3NvdGhhaSA9IDB4MGUwYjtcbiB0LnNvc3VhdGhhaSA9IDB4MGUyYTtcbiB0LnNwYWNlID0gMHgwMDIwO1xuIHQuc3BhY2VoYWNrYXJhYmljID0gMHgwMDIwO1xuIHQuc3BhZGUgPSAweDI2NjA7XG4gdC5zcGFkZXN1aXRibGFjayA9IDB4MjY2MDtcbiB0LnNwYWRlc3VpdHdoaXRlID0gMHgyNjY0O1xuIHQuc3BhcmVuID0gMHgyNGFlO1xuIHQuc3F1YXJlYmVsb3djbWIgPSAweDAzM2I7XG4gdC5zcXVhcmVjYyA9IDB4MzNjNDtcbiB0LnNxdWFyZWNtID0gMHgzMzlkO1xuIHQuc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCA9IDB4MjVhOTtcbiB0LnNxdWFyZWhvcml6b250YWxmaWxsID0gMHgyNWE0O1xuIHQuc3F1YXJla2cgPSAweDMzOGY7XG4gdC5zcXVhcmVrbSA9IDB4MzM5ZTtcbiB0LnNxdWFyZWttY2FwaXRhbCA9IDB4MzNjZTtcbiB0LnNxdWFyZWxuID0gMHgzM2QxO1xuIHQuc3F1YXJlbG9nID0gMHgzM2QyO1xuIHQuc3F1YXJlbWcgPSAweDMzOGU7XG4gdC5zcXVhcmVtaWwgPSAweDMzZDU7XG4gdC5zcXVhcmVtbSA9IDB4MzM5YztcbiB0LnNxdWFyZW1zcXVhcmVkID0gMHgzM2ExO1xuIHQuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsID0gMHgyNWE2O1xuIHQuc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCA9IDB4MjVhNztcbiB0LnNxdWFyZXVwcGVycmlnaHR0b2xvd2VybGVmdGZpbGwgPSAweDI1YTg7XG4gdC5zcXVhcmV2ZXJ0aWNhbGZpbGwgPSAweDI1YTU7XG4gdC5zcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrID0gMHgyNWEzO1xuIHQuc3JzcXVhcmUgPSAweDMzZGI7XG4gdC5zc2FiZW5nYWxpID0gMHgwOWI3O1xuIHQuc3NhZGV2YSA9IDB4MDkzNztcbiB0LnNzYWd1amFyYXRpID0gMHgwYWI3O1xuIHQuc3NhbmdjaWV1Y2tvcmVhbiA9IDB4MzE0OTtcbiB0LnNzYW5naGlldWhrb3JlYW4gPSAweDMxODU7XG4gdC5zc2FuZ2lldW5na29yZWFuID0gMHgzMTgwO1xuIHQuc3NhbmdraXllb2trb3JlYW4gPSAweDMxMzI7XG4gdC5zc2FuZ25pZXVua29yZWFuID0gMHgzMTY1O1xuIHQuc3NhbmdwaWV1cGtvcmVhbiA9IDB4MzE0MztcbiB0LnNzYW5nc2lvc2tvcmVhbiA9IDB4MzE0NjtcbiB0LnNzYW5ndGlrZXV0a29yZWFuID0gMHgzMTM4O1xuIHQuc3N1cGVyaW9yID0gMHhmNmYyO1xuIHQuc3RlcmxpbmcgPSAweDAwYTM7XG4gdC5zdGVybGluZ21vbm9zcGFjZSA9IDB4ZmZlMTtcbiB0LnN0cm9rZWxvbmdvdmVybGF5Y21iID0gMHgwMzM2O1xuIHQuc3Ryb2tlc2hvcnRvdmVybGF5Y21iID0gMHgwMzM1O1xuIHQuc3Vic2V0ID0gMHgyMjgyO1xuIHQuc3Vic2V0bm90ZXF1YWwgPSAweDIyOGE7XG4gdC5zdWJzZXRvcmVxdWFsID0gMHgyMjg2O1xuIHQuc3VjY2VlZHMgPSAweDIyN2I7XG4gdC5zdWNodGhhdCA9IDB4MjIwYjtcbiB0LnN1aGlyYWdhbmEgPSAweDMwNTk7XG4gdC5zdWthdGFrYW5hID0gMHgzMGI5O1xuIHQuc3VrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY3ZDtcbiB0LnN1a3VuYXJhYmljID0gMHgwNjUyO1xuIHQuc3VtbWF0aW9uID0gMHgyMjExO1xuIHQuc3VuID0gMHgyNjNjO1xuIHQuc3VwZXJzZXQgPSAweDIyODM7XG4gdC5zdXBlcnNldG5vdGVxdWFsID0gMHgyMjhiO1xuIHQuc3VwZXJzZXRvcmVxdWFsID0gMHgyMjg3O1xuIHQuc3ZzcXVhcmUgPSAweDMzZGM7XG4gdC5zeW91d2FlcmFzcXVhcmUgPSAweDMzN2M7XG4gdC50ID0gMHgwMDc0O1xuIHQudGFiZW5nYWxpID0gMHgwOWE0O1xuIHQudGFja2Rvd24gPSAweDIyYTQ7XG4gdC50YWNrbGVmdCA9IDB4MjJhMztcbiB0LnRhZGV2YSA9IDB4MDkyNDtcbiB0LnRhZ3VqYXJhdGkgPSAweDBhYTQ7XG4gdC50YWd1cm11a2hpID0gMHgwYTI0O1xuIHQudGFoYXJhYmljID0gMHgwNjM3O1xuIHQudGFoZmluYWxhcmFiaWMgPSAweGZlYzI7XG4gdC50YWhpbml0aWFsYXJhYmljID0gMHhmZWMzO1xuIHQudGFoaXJhZ2FuYSA9IDB4MzA1ZjtcbiB0LnRhaG1lZGlhbGFyYWJpYyA9IDB4ZmVjNDtcbiB0LnRhaXN5b3VlcmFzcXVhcmUgPSAweDMzN2Q7XG4gdC50YWthdGFrYW5hID0gMHgzMGJmO1xuIHQudGFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MDtcbiB0LnRhdHdlZWxhcmFiaWMgPSAweDA2NDA7XG4gdC50YXUgPSAweDAzYzQ7XG4gdC50YXYgPSAweDA1ZWE7XG4gdC50YXZkYWdlcyA9IDB4ZmI0YTtcbiB0LnRhdmRhZ2VzaCA9IDB4ZmI0YTtcbiB0LnRhdmRhZ2VzaGhlYnJldyA9IDB4ZmI0YTtcbiB0LnRhdmhlYnJldyA9IDB4MDVlYTtcbiB0LnRiYXIgPSAweDAxNjc7XG4gdC50Ym9wb21vZm8gPSAweDMxMGE7XG4gdC50Y2Fyb24gPSAweDAxNjU7XG4gdC50Y2N1cmwgPSAweDAyYTg7XG4gdC50Y2VkaWxsYSA9IDB4MDE2MztcbiB0LnRjaGVoYXJhYmljID0gMHgwNjg2O1xuIHQudGNoZWhmaW5hbGFyYWJpYyA9IDB4ZmI3YjtcbiB0LnRjaGVoaW5pdGlhbGFyYWJpYyA9IDB4ZmI3YztcbiB0LnRjaGVobWVkaWFsYXJhYmljID0gMHhmYjdkO1xuIHQudGNpcmNsZSA9IDB4MjRlMztcbiB0LnRjaXJjdW1mbGV4YmVsb3cgPSAweDFlNzE7XG4gdC50Y29tbWFhY2NlbnQgPSAweDAxNjM7XG4gdC50ZGllcmVzaXMgPSAweDFlOTc7XG4gdC50ZG90YWNjZW50ID0gMHgxZTZiO1xuIHQudGRvdGJlbG93ID0gMHgxZTZkO1xuIHQudGVjeXJpbGxpYyA9IDB4MDQ0MjtcbiB0LnRlZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0YWQ7XG4gdC50ZWhhcmFiaWMgPSAweDA2MmE7XG4gdC50ZWhmaW5hbGFyYWJpYyA9IDB4ZmU5NjtcbiB0LnRlaGhhaGluaXRpYWxhcmFiaWMgPSAweGZjYTI7XG4gdC50ZWhoYWhpc29sYXRlZGFyYWJpYyA9IDB4ZmMwYztcbiB0LnRlaGluaXRpYWxhcmFiaWMgPSAweGZlOTc7XG4gdC50ZWhpcmFnYW5hID0gMHgzMDY2O1xuIHQudGVoamVlbWluaXRpYWxhcmFiaWMgPSAweGZjYTE7XG4gdC50ZWhqZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjMGI7XG4gdC50ZWhtYXJidXRhYXJhYmljID0gMHgwNjI5O1xuIHQudGVobWFyYnV0YWZpbmFsYXJhYmljID0gMHhmZTk0O1xuIHQudGVobWVkaWFsYXJhYmljID0gMHhmZTk4O1xuIHQudGVobWVlbWluaXRpYWxhcmFiaWMgPSAweGZjYTQ7XG4gdC50ZWhtZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjMGU7XG4gdC50ZWhub29uZmluYWxhcmFiaWMgPSAweGZjNzM7XG4gdC50ZWthdGFrYW5hID0gMHgzMGM2O1xuIHQudGVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MztcbiB0LnRlbGVwaG9uZSA9IDB4MjEyMTtcbiB0LnRlbGVwaG9uZWJsYWNrID0gMHgyNjBlO1xuIHQudGVsaXNoYWdlZG9sYWhlYnJldyA9IDB4MDVhMDtcbiB0LnRlbGlzaGFxZXRhbmFoZWJyZXcgPSAweDA1YTk7XG4gdC50ZW5jaXJjbGUgPSAweDI0Njk7XG4gdC50ZW5pZGVvZ3JhcGhpY3BhcmVuID0gMHgzMjI5O1xuIHQudGVucGFyZW4gPSAweDI0N2Q7XG4gdC50ZW5wZXJpb2QgPSAweDI0OTE7XG4gdC50ZW5yb21hbiA9IDB4MjE3OTtcbiB0LnRlc2ggPSAweDAyYTc7XG4gdC50ZXQgPSAweDA1ZDg7XG4gdC50ZXRkYWdlc2ggPSAweGZiMzg7XG4gdC50ZXRkYWdlc2hoZWJyZXcgPSAweGZiMzg7XG4gdC50ZXRoZWJyZXcgPSAweDA1ZDg7XG4gdC50ZXRzZWN5cmlsbGljID0gMHgwNGI1O1xuIHQudGV2aXJoZWJyZXcgPSAweDA1OWI7XG4gdC50ZXZpcmxlZnRoZWJyZXcgPSAweDA1OWI7XG4gdC50aGFiZW5nYWxpID0gMHgwOWE1O1xuIHQudGhhZGV2YSA9IDB4MDkyNTtcbiB0LnRoYWd1amFyYXRpID0gMHgwYWE1O1xuIHQudGhhZ3VybXVraGkgPSAweDBhMjU7XG4gdC50aGFsYXJhYmljID0gMHgwNjMwO1xuIHQudGhhbGZpbmFsYXJhYmljID0gMHhmZWFjO1xuIHQudGhhbnRoYWtoYXRsb3dsZWZ0dGhhaSA9IDB4Zjg5ODtcbiB0LnRoYW50aGFraGF0bG93cmlnaHR0aGFpID0gMHhmODk3O1xuIHQudGhhbnRoYWtoYXR0aGFpID0gMHgwZTRjO1xuIHQudGhhbnRoYWtoYXR1cHBlcmxlZnR0aGFpID0gMHhmODk2O1xuIHQudGhlaGFyYWJpYyA9IDB4MDYyYjtcbiB0LnRoZWhmaW5hbGFyYWJpYyA9IDB4ZmU5YTtcbiB0LnRoZWhpbml0aWFsYXJhYmljID0gMHhmZTliO1xuIHQudGhlaG1lZGlhbGFyYWJpYyA9IDB4ZmU5YztcbiB0LnRoZXJlZXhpc3RzID0gMHgyMjAzO1xuIHQudGhlcmVmb3JlID0gMHgyMjM0O1xuIHQudGhldGEgPSAweDAzYjg7XG4gdC50aGV0YTEgPSAweDAzZDE7XG4gdC50aGV0YXN5bWJvbGdyZWVrID0gMHgwM2QxO1xuIHQudGhpZXV0aGFjaXJjbGVrb3JlYW4gPSAweDMyNzk7XG4gdC50aGlldXRoYXBhcmVua29yZWFuID0gMHgzMjE5O1xuIHQudGhpZXV0aGNpcmNsZWtvcmVhbiA9IDB4MzI2YjtcbiB0LnRoaWV1dGhrb3JlYW4gPSAweDMxNGM7XG4gdC50aGlldXRocGFyZW5rb3JlYW4gPSAweDMyMGI7XG4gdC50aGlydGVlbmNpcmNsZSA9IDB4MjQ2YztcbiB0LnRoaXJ0ZWVucGFyZW4gPSAweDI0ODA7XG4gdC50aGlydGVlbnBlcmlvZCA9IDB4MjQ5NDtcbiB0LnRob25hbmdtb250aG90aGFpID0gMHgwZTExO1xuIHQudGhvb2sgPSAweDAxYWQ7XG4gdC50aG9waHV0aGFvdGhhaSA9IDB4MGUxMjtcbiB0LnRob3JuID0gMHgwMGZlO1xuIHQudGhvdGhhaGFudGhhaSA9IDB4MGUxNztcbiB0LnRob3RoYW50aGFpID0gMHgwZTEwO1xuIHQudGhvdGhvbmd0aGFpID0gMHgwZTE4O1xuIHQudGhvdGh1bmd0aGFpID0gMHgwZTE2O1xuIHQudGhvdXNhbmRjeXJpbGxpYyA9IDB4MDQ4MjtcbiB0LnRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYyA9IDB4MDY2YztcbiB0LnRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW4gPSAweDA2NmM7XG4gdC50aHJlZSA9IDB4MDAzMztcbiB0LnRocmVlYXJhYmljID0gMHgwNjYzO1xuIHQudGhyZWViZW5nYWxpID0gMHgwOWU5O1xuIHQudGhyZWVjaXJjbGUgPSAweDI0NjI7XG4gdC50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWYgPSAweDI3OGM7XG4gdC50aHJlZWRldmEgPSAweDA5Njk7XG4gdC50aHJlZWVpZ2h0aHMgPSAweDIxNWM7XG4gdC50aHJlZWd1amFyYXRpID0gMHgwYWU5O1xuIHQudGhyZWVndXJtdWtoaSA9IDB4MGE2OTtcbiB0LnRocmVlaGFja2FyYWJpYyA9IDB4MDY2MztcbiB0LnRocmVlaGFuZ3pob3UgPSAweDMwMjM7XG4gdC50aHJlZWlkZW9ncmFwaGljcGFyZW4gPSAweDMyMjI7XG4gdC50aHJlZWluZmVyaW9yID0gMHgyMDgzO1xuIHQudGhyZWVtb25vc3BhY2UgPSAweGZmMTM7XG4gdC50aHJlZW51bWVyYXRvcmJlbmdhbGkgPSAweDA5ZjY7XG4gdC50aHJlZW9sZHN0eWxlID0gMHhmNzMzO1xuIHQudGhyZWVwYXJlbiA9IDB4MjQ3NjtcbiB0LnRocmVlcGVyaW9kID0gMHgyNDhhO1xuIHQudGhyZWVwZXJzaWFuID0gMHgwNmYzO1xuIHQudGhyZWVxdWFydGVycyA9IDB4MDBiZTtcbiB0LnRocmVlcXVhcnRlcnNlbWRhc2ggPSAweGY2ZGU7XG4gdC50aHJlZXJvbWFuID0gMHgyMTcyO1xuIHQudGhyZWVzdXBlcmlvciA9IDB4MDBiMztcbiB0LnRocmVldGhhaSA9IDB4MGU1MztcbiB0LnRoenNxdWFyZSA9IDB4MzM5NDtcbiB0LnRpaGlyYWdhbmEgPSAweDMwNjE7XG4gdC50aWthdGFrYW5hID0gMHgzMGMxO1xuIHQudGlrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY4MTtcbiB0LnRpa2V1dGFjaXJjbGVrb3JlYW4gPSAweDMyNzA7XG4gdC50aWtldXRhcGFyZW5rb3JlYW4gPSAweDMyMTA7XG4gdC50aWtldXRjaXJjbGVrb3JlYW4gPSAweDMyNjI7XG4gdC50aWtldXRrb3JlYW4gPSAweDMxMzc7XG4gdC50aWtldXRwYXJlbmtvcmVhbiA9IDB4MzIwMjtcbiB0LnRpbGRlID0gMHgwMmRjO1xuIHQudGlsZGViZWxvd2NtYiA9IDB4MDMzMDtcbiB0LnRpbGRlY21iID0gMHgwMzAzO1xuIHQudGlsZGVjb21iID0gMHgwMzAzO1xuIHQudGlsZGVkb3VibGVjbWIgPSAweDAzNjA7XG4gdC50aWxkZW9wZXJhdG9yID0gMHgyMjNjO1xuIHQudGlsZGVvdmVybGF5Y21iID0gMHgwMzM0O1xuIHQudGlsZGV2ZXJ0aWNhbGNtYiA9IDB4MDMzZTtcbiB0LnRpbWVzY2lyY2xlID0gMHgyMjk3O1xuIHQudGlwZWhhaGVicmV3ID0gMHgwNTk2O1xuIHQudGlwZWhhbGVmdGhlYnJldyA9IDB4MDU5NjtcbiB0LnRpcHBpZ3VybXVraGkgPSAweDBhNzA7XG4gdC50aXRsb2N5cmlsbGljY21iID0gMHgwNDgzO1xuIHQudGl3bmFybWVuaWFuID0gMHgwNTdmO1xuIHQudGxpbmViZWxvdyA9IDB4MWU2ZjtcbiB0LnRtb25vc3BhY2UgPSAweGZmNTQ7XG4gdC50b2FybWVuaWFuID0gMHgwNTY5O1xuIHQudG9oaXJhZ2FuYSA9IDB4MzA2ODtcbiB0LnRva2F0YWthbmEgPSAweDMwYzg7XG4gdC50b2thdGFrYW5haGFsZndpZHRoID0gMHhmZjg0O1xuIHQudG9uZWJhcmV4dHJhaGlnaG1vZCA9IDB4MDJlNTtcbiB0LnRvbmViYXJleHRyYWxvd21vZCA9IDB4MDJlOTtcbiB0LnRvbmViYXJoaWdobW9kID0gMHgwMmU2O1xuIHQudG9uZWJhcmxvd21vZCA9IDB4MDJlODtcbiB0LnRvbmViYXJtaWRtb2QgPSAweDAyZTc7XG4gdC50b25lZml2ZSA9IDB4MDFiZDtcbiB0LnRvbmVzaXggPSAweDAxODU7XG4gdC50b25ldHdvID0gMHgwMWE4O1xuIHQudG9ub3MgPSAweDAzODQ7XG4gdC50b25zcXVhcmUgPSAweDMzMjc7XG4gdC50b3BhdGFrdGhhaSA9IDB4MGUwZjtcbiB0LnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCA9IDB4MzAxNDtcbiB0LnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsID0gMHhmZTVkO1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlMzk7XG4gdC50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0ID0gMHgzMDE1O1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsID0gMHhmZTVlO1xuIHQudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsID0gMHhmZTNhO1xuIHQudG90YW90aGFpID0gMHgwZTE1O1xuIHQudHBhbGF0YWxob29rID0gMHgwMWFiO1xuIHQudHBhcmVuID0gMHgyNGFmO1xuIHQudHJhZGVtYXJrID0gMHgyMTIyO1xuIHQudHJhZGVtYXJrc2FucyA9IDB4ZjhlYTtcbiB0LnRyYWRlbWFya3NlcmlmID0gMHhmNmRiO1xuIHQudHJldHJvZmxleGhvb2sgPSAweDAyODg7XG4gdC50cmlhZ2RuID0gMHgyNWJjO1xuIHQudHJpYWdsZiA9IDB4MjVjNDtcbiB0LnRyaWFncnQgPSAweDI1YmE7XG4gdC50cmlhZ3VwID0gMHgyNWIyO1xuIHQudHMgPSAweDAyYTY7XG4gdC50c2FkaSA9IDB4MDVlNjtcbiB0LnRzYWRpZGFnZXNoID0gMHhmYjQ2O1xuIHQudHNhZGlkYWdlc2hoZWJyZXcgPSAweGZiNDY7XG4gdC50c2FkaWhlYnJldyA9IDB4MDVlNjtcbiB0LnRzZWN5cmlsbGljID0gMHgwNDQ2O1xuIHQudHNlcmUgPSAweDA1YjU7XG4gdC50c2VyZTEyID0gMHgwNWI1O1xuIHQudHNlcmUxZSA9IDB4MDViNTtcbiB0LnRzZXJlMmIgPSAweDA1YjU7XG4gdC50c2VyZWhlYnJldyA9IDB4MDViNTtcbiB0LnRzZXJlbmFycm93aGVicmV3ID0gMHgwNWI1O1xuIHQudHNlcmVxdWFydGVyaGVicmV3ID0gMHgwNWI1O1xuIHQudHNlcmV3aWRlaGVicmV3ID0gMHgwNWI1O1xuIHQudHNoZWN5cmlsbGljID0gMHgwNDViO1xuIHQudHN1cGVyaW9yID0gMHhmNmYzO1xuIHQudHRhYmVuZ2FsaSA9IDB4MDk5ZjtcbiB0LnR0YWRldmEgPSAweDA5MWY7XG4gdC50dGFndWphcmF0aSA9IDB4MGE5ZjtcbiB0LnR0YWd1cm11a2hpID0gMHgwYTFmO1xuIHQudHRlaGFyYWJpYyA9IDB4MDY3OTtcbiB0LnR0ZWhmaW5hbGFyYWJpYyA9IDB4ZmI2NztcbiB0LnR0ZWhpbml0aWFsYXJhYmljID0gMHhmYjY4O1xuIHQudHRlaG1lZGlhbGFyYWJpYyA9IDB4ZmI2OTtcbiB0LnR0aGFiZW5nYWxpID0gMHgwOWEwO1xuIHQudHRoYWRldmEgPSAweDA5MjA7XG4gdC50dGhhZ3VqYXJhdGkgPSAweDBhYTA7XG4gdC50dGhhZ3VybXVraGkgPSAweDBhMjA7XG4gdC50dHVybmVkID0gMHgwMjg3O1xuIHQudHVoaXJhZ2FuYSA9IDB4MzA2NDtcbiB0LnR1a2F0YWthbmEgPSAweDMwYzQ7XG4gdC50dWthdGFrYW5haGFsZndpZHRoID0gMHhmZjgyO1xuIHQudHVzbWFsbGhpcmFnYW5hID0gMHgzMDYzO1xuIHQudHVzbWFsbGthdGFrYW5hID0gMHgzMGMzO1xuIHQudHVzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZmO1xuIHQudHdlbHZlY2lyY2xlID0gMHgyNDZiO1xuIHQudHdlbHZlcGFyZW4gPSAweDI0N2Y7XG4gdC50d2VsdmVwZXJpb2QgPSAweDI0OTM7XG4gdC50d2VsdmVyb21hbiA9IDB4MjE3YjtcbiB0LnR3ZW50eWNpcmNsZSA9IDB4MjQ3MztcbiB0LnR3ZW50eWhhbmd6aG91ID0gMHg1MzQ0O1xuIHQudHdlbnR5cGFyZW4gPSAweDI0ODc7XG4gdC50d2VudHlwZXJpb2QgPSAweDI0OWI7XG4gdC50d28gPSAweDAwMzI7XG4gdC50d29hcmFiaWMgPSAweDA2NjI7XG4gdC50d29iZW5nYWxpID0gMHgwOWU4O1xuIHQudHdvY2lyY2xlID0gMHgyNDYxO1xuIHQudHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiA9IDB4Mjc4YjtcbiB0LnR3b2RldmEgPSAweDA5Njg7XG4gdC50d29kb3RlbmxlYWRlciA9IDB4MjAyNTtcbiB0LnR3b2RvdGxlYWRlciA9IDB4MjAyNTtcbiB0LnR3b2RvdGxlYWRlcnZlcnRpY2FsID0gMHhmZTMwO1xuIHQudHdvZ3VqYXJhdGkgPSAweDBhZTg7XG4gdC50d29ndXJtdWtoaSA9IDB4MGE2ODtcbiB0LnR3b2hhY2thcmFiaWMgPSAweDA2NjI7XG4gdC50d29oYW5nemhvdSA9IDB4MzAyMjtcbiB0LnR3b2lkZW9ncmFwaGljcGFyZW4gPSAweDMyMjE7XG4gdC50d29pbmZlcmlvciA9IDB4MjA4MjtcbiB0LnR3b21vbm9zcGFjZSA9IDB4ZmYxMjtcbiB0LnR3b251bWVyYXRvcmJlbmdhbGkgPSAweDA5ZjU7XG4gdC50d29vbGRzdHlsZSA9IDB4ZjczMjtcbiB0LnR3b3BhcmVuID0gMHgyNDc1O1xuIHQudHdvcGVyaW9kID0gMHgyNDg5O1xuIHQudHdvcGVyc2lhbiA9IDB4MDZmMjtcbiB0LnR3b3JvbWFuID0gMHgyMTcxO1xuIHQudHdvc3Ryb2tlID0gMHgwMWJiO1xuIHQudHdvc3VwZXJpb3IgPSAweDAwYjI7XG4gdC50d290aGFpID0gMHgwZTUyO1xuIHQudHdvdGhpcmRzID0gMHgyMTU0O1xuIHQudSA9IDB4MDA3NTtcbiB0LnVhY3V0ZSA9IDB4MDBmYTtcbiB0LnViYXIgPSAweDAyODk7XG4gdC51YmVuZ2FsaSA9IDB4MDk4OTtcbiB0LnVib3BvbW9mbyA9IDB4MzEyODtcbiB0LnVicmV2ZSA9IDB4MDE2ZDtcbiB0LnVjYXJvbiA9IDB4MDFkNDtcbiB0LnVjaXJjbGUgPSAweDI0ZTQ7XG4gdC51Y2lyY3VtZmxleCA9IDB4MDBmYjtcbiB0LnVjaXJjdW1mbGV4YmVsb3cgPSAweDFlNzc7XG4gdC51Y3lyaWxsaWMgPSAweDA0NDM7XG4gdC51ZGF0dGFkZXZhID0gMHgwOTUxO1xuIHQudWRibGFjdXRlID0gMHgwMTcxO1xuIHQudWRibGdyYXZlID0gMHgwMjE1O1xuIHQudWRldmEgPSAweDA5MDk7XG4gdC51ZGllcmVzaXMgPSAweDAwZmM7XG4gdC51ZGllcmVzaXNhY3V0ZSA9IDB4MDFkODtcbiB0LnVkaWVyZXNpc2JlbG93ID0gMHgxZTczO1xuIHQudWRpZXJlc2lzY2Fyb24gPSAweDAxZGE7XG4gdC51ZGllcmVzaXNjeXJpbGxpYyA9IDB4MDRmMTtcbiB0LnVkaWVyZXNpc2dyYXZlID0gMHgwMWRjO1xuIHQudWRpZXJlc2lzbWFjcm9uID0gMHgwMWQ2O1xuIHQudWRvdGJlbG93ID0gMHgxZWU1O1xuIHQudWdyYXZlID0gMHgwMGY5O1xuIHQudWd1amFyYXRpID0gMHgwYTg5O1xuIHQudWd1cm11a2hpID0gMHgwYTA5O1xuIHQudWhpcmFnYW5hID0gMHgzMDQ2O1xuIHQudWhvb2thYm92ZSA9IDB4MWVlNztcbiB0LnVob3JuID0gMHgwMWIwO1xuIHQudWhvcm5hY3V0ZSA9IDB4MWVlOTtcbiB0LnVob3JuZG90YmVsb3cgPSAweDFlZjE7XG4gdC51aG9ybmdyYXZlID0gMHgxZWViO1xuIHQudWhvcm5ob29rYWJvdmUgPSAweDFlZWQ7XG4gdC51aG9ybnRpbGRlID0gMHgxZWVmO1xuIHQudWh1bmdhcnVtbGF1dCA9IDB4MDE3MTtcbiB0LnVodW5nYXJ1bWxhdXRjeXJpbGxpYyA9IDB4MDRmMztcbiB0LnVpbnZlcnRlZGJyZXZlID0gMHgwMjE3O1xuIHQudWthdGFrYW5hID0gMHgzMGE2O1xuIHQudWthdGFrYW5haGFsZndpZHRoID0gMHhmZjczO1xuIHQudWtjeXJpbGxpYyA9IDB4MDQ3OTtcbiB0LnVrb3JlYW4gPSAweDMxNWM7XG4gdC51bWFjcm9uID0gMHgwMTZiO1xuIHQudW1hY3JvbmN5cmlsbGljID0gMHgwNGVmO1xuIHQudW1hY3JvbmRpZXJlc2lzID0gMHgxZTdiO1xuIHQudW1hdHJhZ3VybXVraGkgPSAweDBhNDE7XG4gdC51bW9ub3NwYWNlID0gMHhmZjU1O1xuIHQudW5kZXJzY29yZSA9IDB4MDA1ZjtcbiB0LnVuZGVyc2NvcmVkYmwgPSAweDIwMTc7XG4gdC51bmRlcnNjb3JlbW9ub3NwYWNlID0gMHhmZjNmO1xuIHQudW5kZXJzY29yZXZlcnRpY2FsID0gMHhmZTMzO1xuIHQudW5kZXJzY29yZXdhdnkgPSAweGZlNGY7XG4gdC51bmlvbiA9IDB4MjIyYTtcbiB0LnVuaXZlcnNhbCA9IDB4MjIwMDtcbiB0LnVvZ29uZWsgPSAweDAxNzM7XG4gdC51cGFyZW4gPSAweDI0YjA7XG4gdC51cGJsb2NrID0gMHgyNTgwO1xuIHQudXBwZXJkb3RoZWJyZXcgPSAweDA1YzQ7XG4gdC51cHNpbG9uID0gMHgwM2M1O1xuIHQudXBzaWxvbmRpZXJlc2lzID0gMHgwM2NiO1xuIHQudXBzaWxvbmRpZXJlc2lzdG9ub3MgPSAweDAzYjA7XG4gdC51cHNpbG9ubGF0aW4gPSAweDAyOGE7XG4gdC51cHNpbG9udG9ub3MgPSAweDAzY2Q7XG4gdC51cHRhY2tiZWxvd2NtYiA9IDB4MDMxZDtcbiB0LnVwdGFja21vZCA9IDB4MDJkNDtcbiB0LnVyYWd1cm11a2hpID0gMHgwYTczO1xuIHQudXJpbmcgPSAweDAxNmY7XG4gdC51c2hvcnRjeXJpbGxpYyA9IDB4MDQ1ZTtcbiB0LnVzbWFsbGhpcmFnYW5hID0gMHgzMDQ1O1xuIHQudXNtYWxsa2F0YWthbmEgPSAweDMwYTU7XG4gdC51c21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2OTtcbiB0LnVzdHJhaWdodGN5cmlsbGljID0gMHgwNGFmO1xuIHQudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWMgPSAweDA0YjE7XG4gdC51dGlsZGUgPSAweDAxNjk7XG4gdC51dGlsZGVhY3V0ZSA9IDB4MWU3OTtcbiB0LnV0aWxkZWJlbG93ID0gMHgxZTc1O1xuIHQudXViZW5nYWxpID0gMHgwOThhO1xuIHQudXVkZXZhID0gMHgwOTBhO1xuIHQudXVndWphcmF0aSA9IDB4MGE4YTtcbiB0LnV1Z3VybXVraGkgPSAweDBhMGE7XG4gdC51dW1hdHJhZ3VybXVraGkgPSAweDBhNDI7XG4gdC51dXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzI7XG4gdC51dXZvd2Vsc2lnbmRldmEgPSAweDA5NDI7XG4gdC51dXZvd2Vsc2lnbmd1amFyYXRpID0gMHgwYWMyO1xuIHQudXZvd2Vsc2lnbmJlbmdhbGkgPSAweDA5YzE7XG4gdC51dm93ZWxzaWduZGV2YSA9IDB4MDk0MTtcbiB0LnV2b3dlbHNpZ25ndWphcmF0aSA9IDB4MGFjMTtcbiB0LnYgPSAweDAwNzY7XG4gdC52YWRldmEgPSAweDA5MzU7XG4gdC52YWd1amFyYXRpID0gMHgwYWI1O1xuIHQudmFndXJtdWtoaSA9IDB4MGEzNTtcbiB0LnZha2F0YWthbmEgPSAweDMwZjc7XG4gdC52YXYgPSAweDA1ZDU7XG4gdC52YXZkYWdlc2ggPSAweGZiMzU7XG4gdC52YXZkYWdlc2g2NSA9IDB4ZmIzNTtcbiB0LnZhdmRhZ2VzaGhlYnJldyA9IDB4ZmIzNTtcbiB0LnZhdmhlYnJldyA9IDB4MDVkNTtcbiB0LnZhdmhvbGFtID0gMHhmYjRiO1xuIHQudmF2aG9sYW1oZWJyZXcgPSAweGZiNGI7XG4gdC52YXZ2YXZoZWJyZXcgPSAweDA1ZjA7XG4gdC52YXZ5b2RoZWJyZXcgPSAweDA1ZjE7XG4gdC52Y2lyY2xlID0gMHgyNGU1O1xuIHQudmRvdGJlbG93ID0gMHgxZTdmO1xuIHQudmVjeXJpbGxpYyA9IDB4MDQzMjtcbiB0LnZlaGFyYWJpYyA9IDB4MDZhNDtcbiB0LnZlaGZpbmFsYXJhYmljID0gMHhmYjZiO1xuIHQudmVoaW5pdGlhbGFyYWJpYyA9IDB4ZmI2YztcbiB0LnZlaG1lZGlhbGFyYWJpYyA9IDB4ZmI2ZDtcbiB0LnZla2F0YWthbmEgPSAweDMwZjk7XG4gdC52ZW51cyA9IDB4MjY0MDtcbiB0LnZlcnRpY2FsYmFyID0gMHgwMDdjO1xuIHQudmVydGljYWxsaW5lYWJvdmVjbWIgPSAweDAzMGQ7XG4gdC52ZXJ0aWNhbGxpbmViZWxvd2NtYiA9IDB4MDMyOTtcbiB0LnZlcnRpY2FsbGluZWxvd21vZCA9IDB4MDJjYztcbiB0LnZlcnRpY2FsbGluZW1vZCA9IDB4MDJjODtcbiB0LnZld2FybWVuaWFuID0gMHgwNTdlO1xuIHQudmhvb2sgPSAweDAyOGI7XG4gdC52aWthdGFrYW5hID0gMHgzMGY4O1xuIHQudmlyYW1hYmVuZ2FsaSA9IDB4MDljZDtcbiB0LnZpcmFtYWRldmEgPSAweDA5NGQ7XG4gdC52aXJhbWFndWphcmF0aSA9IDB4MGFjZDtcbiB0LnZpc2FyZ2FiZW5nYWxpID0gMHgwOTgzO1xuIHQudmlzYXJnYWRldmEgPSAweDA5MDM7XG4gdC52aXNhcmdhZ3VqYXJhdGkgPSAweDBhODM7XG4gdC52bW9ub3NwYWNlID0gMHhmZjU2O1xuIHQudm9hcm1lbmlhbiA9IDB4MDU3ODtcbiB0LnZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hID0gMHgzMDllO1xuIHQudm9pY2VkaXRlcmF0aW9ua2F0YWthbmEgPSAweDMwZmU7XG4gdC52b2ljZWRtYXJra2FuYSA9IDB4MzA5YjtcbiB0LnZvaWNlZG1hcmtrYW5haGFsZndpZHRoID0gMHhmZjllO1xuIHQudm9rYXRha2FuYSA9IDB4MzBmYTtcbiB0LnZwYXJlbiA9IDB4MjRiMTtcbiB0LnZ0aWxkZSA9IDB4MWU3ZDtcbiB0LnZ0dXJuZWQgPSAweDAyOGM7XG4gdC52dWhpcmFnYW5hID0gMHgzMDk0O1xuIHQudnVrYXRha2FuYSA9IDB4MzBmNDtcbiB0LncgPSAweDAwNzc7XG4gdC53YWN1dGUgPSAweDFlODM7XG4gdC53YWVrb3JlYW4gPSAweDMxNTk7XG4gdC53YWhpcmFnYW5hID0gMHgzMDhmO1xuIHQud2FrYXRha2FuYSA9IDB4MzBlZjtcbiB0Lndha2F0YWthbmFoYWxmd2lkdGggPSAweGZmOWM7XG4gdC53YWtvcmVhbiA9IDB4MzE1ODtcbiB0Lndhc21hbGxoaXJhZ2FuYSA9IDB4MzA4ZTtcbiB0Lndhc21hbGxrYXRha2FuYSA9IDB4MzBlZTtcbiB0LndhdHRvc3F1YXJlID0gMHgzMzU3O1xuIHQud2F2ZWRhc2ggPSAweDMwMWM7XG4gdC53YXZ5dW5kZXJzY29yZXZlcnRpY2FsID0gMHhmZTM0O1xuIHQud2F3YXJhYmljID0gMHgwNjQ4O1xuIHQud2F3ZmluYWxhcmFiaWMgPSAweGZlZWU7XG4gdC53YXdoYW16YWFib3ZlYXJhYmljID0gMHgwNjI0O1xuIHQud2F3aGFtemFhYm92ZWZpbmFsYXJhYmljID0gMHhmZTg2O1xuIHQud2JzcXVhcmUgPSAweDMzZGQ7XG4gdC53Y2lyY2xlID0gMHgyNGU2O1xuIHQud2NpcmN1bWZsZXggPSAweDAxNzU7XG4gdC53ZGllcmVzaXMgPSAweDFlODU7XG4gdC53ZG90YWNjZW50ID0gMHgxZTg3O1xuIHQud2RvdGJlbG93ID0gMHgxZTg5O1xuIHQud2VoaXJhZ2FuYSA9IDB4MzA5MTtcbiB0LndlaWVyc3RyYXNzID0gMHgyMTE4O1xuIHQud2VrYXRha2FuYSA9IDB4MzBmMTtcbiB0Lndla29yZWFuID0gMHgzMTVlO1xuIHQud2Vva29yZWFuID0gMHgzMTVkO1xuIHQud2dyYXZlID0gMHgxZTgxO1xuIHQud2hpdGVidWxsZXQgPSAweDI1ZTY7XG4gdC53aGl0ZWNpcmNsZSA9IDB4MjVjYjtcbiB0LndoaXRlY2lyY2xlaW52ZXJzZSA9IDB4MjVkOTtcbiB0LndoaXRlY29ybmVyYnJhY2tldGxlZnQgPSAweDMwMGU7XG4gdC53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWwgPSAweGZlNDM7XG4gdC53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCA9IDB4MzAwZjtcbiB0LndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwgPSAweGZlNDQ7XG4gdC53aGl0ZWRpYW1vbmQgPSAweDI1Yzc7XG4gdC53aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQgPSAweDI1Yzg7XG4gdC53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGUgPSAweDI1YmY7XG4gdC53aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlID0gMHgyNWJkO1xuIHQud2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlID0gMHgyNWMzO1xuIHQud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZSA9IDB4MjVjMTtcbiB0LndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0ID0gMHgzMDE2O1xuIHQud2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0ID0gMHgzMDE3O1xuIHQud2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZSA9IDB4MjViOTtcbiB0LndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlID0gMHgyNWI3O1xuIHQud2hpdGVzbWFsbHNxdWFyZSA9IDB4MjVhYjtcbiB0LndoaXRlc21pbGluZ2ZhY2UgPSAweDI2M2E7XG4gdC53aGl0ZXNxdWFyZSA9IDB4MjVhMTtcbiB0LndoaXRlc3RhciA9IDB4MjYwNjtcbiB0LndoaXRldGVsZXBob25lID0gMHgyNjBmO1xuIHQud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQgPSAweDMwMTg7XG4gdC53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQgPSAweDMwMTk7XG4gdC53aGl0ZXVwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlID0gMHgyNWI1O1xuIHQud2hpdGV1cHBvaW50aW5ndHJpYW5nbGUgPSAweDI1YjM7XG4gdC53aWhpcmFnYW5hID0gMHgzMDkwO1xuIHQud2lrYXRha2FuYSA9IDB4MzBmMDtcbiB0Lndpa29yZWFuID0gMHgzMTVmO1xuIHQud21vbm9zcGFjZSA9IDB4ZmY1NztcbiB0LndvaGlyYWdhbmEgPSAweDMwOTI7XG4gdC53b2thdGFrYW5hID0gMHgzMGYyO1xuIHQud29rYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2NjtcbiB0LndvbiA9IDB4MjBhOTtcbiB0Lndvbm1vbm9zcGFjZSA9IDB4ZmZlNjtcbiB0Lndvd2FlbnRoYWkgPSAweDBlMjc7XG4gdC53cGFyZW4gPSAweDI0YjI7XG4gdC53cmluZyA9IDB4MWU5ODtcbiB0LndzdXBlcmlvciA9IDB4MDJiNztcbiB0Lnd0dXJuZWQgPSAweDAyOGQ7XG4gdC53eW5uID0gMHgwMWJmO1xuIHQueCA9IDB4MDA3ODtcbiB0LnhhYm92ZWNtYiA9IDB4MDMzZDtcbiB0Lnhib3BvbW9mbyA9IDB4MzExMjtcbiB0LnhjaXJjbGUgPSAweDI0ZTc7XG4gdC54ZGllcmVzaXMgPSAweDFlOGQ7XG4gdC54ZG90YWNjZW50ID0gMHgxZThiO1xuIHQueGVoYXJtZW5pYW4gPSAweDA1NmQ7XG4gdC54aSA9IDB4MDNiZTtcbiB0Lnhtb25vc3BhY2UgPSAweGZmNTg7XG4gdC54cGFyZW4gPSAweDI0YjM7XG4gdC54c3VwZXJpb3IgPSAweDAyZTM7XG4gdC55ID0gMHgwMDc5O1xuIHQueWFhZG9zcXVhcmUgPSAweDMzNGU7XG4gdC55YWJlbmdhbGkgPSAweDA5YWY7XG4gdC55YWN1dGUgPSAweDAwZmQ7XG4gdC55YWRldmEgPSAweDA5MmY7XG4gdC55YWVrb3JlYW4gPSAweDMxNTI7XG4gdC55YWd1amFyYXRpID0gMHgwYWFmO1xuIHQueWFndXJtdWtoaSA9IDB4MGEyZjtcbiB0LnlhaGlyYWdhbmEgPSAweDMwODQ7XG4gdC55YWthdGFrYW5hID0gMHgzMGU0O1xuIHQueWFrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NDtcbiB0Lnlha29yZWFuID0gMHgzMTUxO1xuIHQueWFtYWtrYW50aGFpID0gMHgwZTRlO1xuIHQueWFzbWFsbGhpcmFnYW5hID0gMHgzMDgzO1xuIHQueWFzbWFsbGthdGFrYW5hID0gMHgzMGUzO1xuIHQueWFzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZjO1xuIHQueWF0Y3lyaWxsaWMgPSAweDA0NjM7XG4gdC55Y2lyY2xlID0gMHgyNGU4O1xuIHQueWNpcmN1bWZsZXggPSAweDAxNzc7XG4gdC55ZGllcmVzaXMgPSAweDAwZmY7XG4gdC55ZG90YWNjZW50ID0gMHgxZThmO1xuIHQueWRvdGJlbG93ID0gMHgxZWY1O1xuIHQueWVoYXJhYmljID0gMHgwNjRhO1xuIHQueWVoYmFycmVlYXJhYmljID0gMHgwNmQyO1xuIHQueWVoYmFycmVlZmluYWxhcmFiaWMgPSAweGZiYWY7XG4gdC55ZWhmaW5hbGFyYWJpYyA9IDB4ZmVmMjtcbiB0LnllaGhhbXphYWJvdmVhcmFiaWMgPSAweDA2MjY7XG4gdC55ZWhoYW16YWFib3ZlZmluYWxhcmFiaWMgPSAweGZlOGE7XG4gdC55ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYyA9IDB4ZmU4YjtcbiB0LnllaGhhbXphYWJvdmVtZWRpYWxhcmFiaWMgPSAweGZlOGM7XG4gdC55ZWhpbml0aWFsYXJhYmljID0gMHhmZWYzO1xuIHQueWVobWVkaWFsYXJhYmljID0gMHhmZWY0O1xuIHQueWVobWVlbWluaXRpYWxhcmFiaWMgPSAweGZjZGQ7XG4gdC55ZWhtZWVtaXNvbGF0ZWRhcmFiaWMgPSAweGZjNTg7XG4gdC55ZWhub29uZmluYWxhcmFiaWMgPSAweGZjOTQ7XG4gdC55ZWh0aHJlZWRvdHNiZWxvd2FyYWJpYyA9IDB4MDZkMTtcbiB0Lnlla29yZWFuID0gMHgzMTU2O1xuIHQueWVuID0gMHgwMGE1O1xuIHQueWVubW9ub3NwYWNlID0gMHhmZmU1O1xuIHQueWVva29yZWFuID0gMHgzMTU1O1xuIHQueWVvcmluaGlldWhrb3JlYW4gPSAweDMxODY7XG4gdC55ZXJhaGJlbnlvbW9oZWJyZXcgPSAweDA1YWE7XG4gdC55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3ID0gMHgwNWFhO1xuIHQueWVyaWN5cmlsbGljID0gMHgwNDRiO1xuIHQueWVydWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0Zjk7XG4gdC55ZXNpZXVuZ2tvcmVhbiA9IDB4MzE4MTtcbiB0Lnllc2lldW5ncGFuc2lvc2tvcmVhbiA9IDB4MzE4MztcbiB0Lnllc2lldW5nc2lvc2tvcmVhbiA9IDB4MzE4MjtcbiB0LnlldGl2aGVicmV3ID0gMHgwNTlhO1xuIHQueWdyYXZlID0gMHgxZWYzO1xuIHQueWhvb2sgPSAweDAxYjQ7XG4gdC55aG9va2Fib3ZlID0gMHgxZWY3O1xuIHQueWlhcm1lbmlhbiA9IDB4MDU3NTtcbiB0LnlpY3lyaWxsaWMgPSAweDA0NTc7XG4gdC55aWtvcmVhbiA9IDB4MzE2MjtcbiB0LnlpbnlhbmcgPSAweDI2MmY7XG4gdC55aXduYXJtZW5pYW4gPSAweDA1ODI7XG4gdC55bW9ub3NwYWNlID0gMHhmZjU5O1xuIHQueW9kID0gMHgwNWQ5O1xuIHQueW9kZGFnZXNoID0gMHhmYjM5O1xuIHQueW9kZGFnZXNoaGVicmV3ID0gMHhmYjM5O1xuIHQueW9kaGVicmV3ID0gMHgwNWQ5O1xuIHQueW9keW9kaGVicmV3ID0gMHgwNWYyO1xuIHQueW9keW9kcGF0YWhoZWJyZXcgPSAweGZiMWY7XG4gdC55b2hpcmFnYW5hID0gMHgzMDg4O1xuIHQueW9pa29yZWFuID0gMHgzMTg5O1xuIHQueW9rYXRha2FuYSA9IDB4MzBlODtcbiB0Lnlva2F0YWthbmFoYWxmd2lkdGggPSAweGZmOTY7XG4gdC55b2tvcmVhbiA9IDB4MzE1YjtcbiB0Lnlvc21hbGxoaXJhZ2FuYSA9IDB4MzA4NztcbiB0Lnlvc21hbGxrYXRha2FuYSA9IDB4MzBlNztcbiB0Lnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY2ZTtcbiB0LnlvdGdyZWVrID0gMHgwM2YzO1xuIHQueW95YWVrb3JlYW4gPSAweDMxODg7XG4gdC55b3lha29yZWFuID0gMHgzMTg3O1xuIHQueW95YWt0aGFpID0gMHgwZTIyO1xuIHQueW95aW5ndGhhaSA9IDB4MGUwZDtcbiB0LnlwYXJlbiA9IDB4MjRiNDtcbiB0Lnlwb2dlZ3JhbW1lbmkgPSAweDAzN2E7XG4gdC55cG9nZWdyYW1tZW5pZ3JlZWtjbWIgPSAweDAzNDU7XG4gdC55ciA9IDB4MDFhNjtcbiB0LnlyaW5nID0gMHgxZTk5O1xuIHQueXN1cGVyaW9yID0gMHgwMmI4O1xuIHQueXRpbGRlID0gMHgxZWY5O1xuIHQueXR1cm5lZCA9IDB4MDI4ZTtcbiB0Lnl1aGlyYWdhbmEgPSAweDMwODY7XG4gdC55dWlrb3JlYW4gPSAweDMxOGM7XG4gdC55dWthdGFrYW5hID0gMHgzMGU2O1xuIHQueXVrYXRha2FuYWhhbGZ3aWR0aCA9IDB4ZmY5NTtcbiB0Lnl1a29yZWFuID0gMHgzMTYwO1xuIHQueXVzYmlnY3lyaWxsaWMgPSAweDA0NmI7XG4gdC55dXNiaWdpb3RpZmllZGN5cmlsbGljID0gMHgwNDZkO1xuIHQueXVzbGl0dGxlY3lyaWxsaWMgPSAweDA0Njc7XG4gdC55dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljID0gMHgwNDY5O1xuIHQueXVzbWFsbGhpcmFnYW5hID0gMHgzMDg1O1xuIHQueXVzbWFsbGthdGFrYW5hID0gMHgzMGU1O1xuIHQueXVzbWFsbGthdGFrYW5haGFsZndpZHRoID0gMHhmZjZkO1xuIHQueXV5ZWtvcmVhbiA9IDB4MzE4YjtcbiB0Lnl1eWVva29yZWFuID0gMHgzMThhO1xuIHQueXlhYmVuZ2FsaSA9IDB4MDlkZjtcbiB0Lnl5YWRldmEgPSAweDA5NWY7XG4gdC56ID0gMHgwMDdhO1xuIHQuemFhcm1lbmlhbiA9IDB4MDU2NjtcbiB0LnphY3V0ZSA9IDB4MDE3YTtcbiB0LnphZGV2YSA9IDB4MDk1YjtcbiB0LnphZ3VybXVraGkgPSAweDBhNWI7XG4gdC56YWhhcmFiaWMgPSAweDA2Mzg7XG4gdC56YWhmaW5hbGFyYWJpYyA9IDB4ZmVjNjtcbiB0LnphaGluaXRpYWxhcmFiaWMgPSAweGZlYzc7XG4gdC56YWhpcmFnYW5hID0gMHgzMDU2O1xuIHQuemFobWVkaWFsYXJhYmljID0gMHhmZWM4O1xuIHQuemFpbmFyYWJpYyA9IDB4MDYzMjtcbiB0LnphaW5maW5hbGFyYWJpYyA9IDB4ZmViMDtcbiB0Lnpha2F0YWthbmEgPSAweDMwYjY7XG4gdC56YXFlZmdhZG9saGVicmV3ID0gMHgwNTk1O1xuIHQuemFxZWZxYXRhbmhlYnJldyA9IDB4MDU5NDtcbiB0LnphcnFhaGVicmV3ID0gMHgwNTk4O1xuIHQuemF5aW4gPSAweDA1ZDY7XG4gdC56YXlpbmRhZ2VzaCA9IDB4ZmIzNjtcbiB0LnpheWluZGFnZXNoaGVicmV3ID0gMHhmYjM2O1xuIHQuemF5aW5oZWJyZXcgPSAweDA1ZDY7XG4gdC56Ym9wb21vZm8gPSAweDMxMTc7XG4gdC56Y2Fyb24gPSAweDAxN2U7XG4gdC56Y2lyY2xlID0gMHgyNGU5O1xuIHQuemNpcmN1bWZsZXggPSAweDFlOTE7XG4gdC56Y3VybCA9IDB4MDI5MTtcbiB0Lnpkb3QgPSAweDAxN2M7XG4gdC56ZG90YWNjZW50ID0gMHgwMTdjO1xuIHQuemRvdGJlbG93ID0gMHgxZTkzO1xuIHQuemVjeXJpbGxpYyA9IDB4MDQzNztcbiB0LnplZGVzY2VuZGVyY3lyaWxsaWMgPSAweDA0OTk7XG4gdC56ZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGY7XG4gdC56ZWhpcmFnYW5hID0gMHgzMDVjO1xuIHQuemVrYXRha2FuYSA9IDB4MzBiYztcbiB0Lnplcm8gPSAweDAwMzA7XG4gdC56ZXJvYXJhYmljID0gMHgwNjYwO1xuIHQuemVyb2JlbmdhbGkgPSAweDA5ZTY7XG4gdC56ZXJvZGV2YSA9IDB4MDk2NjtcbiB0Lnplcm9ndWphcmF0aSA9IDB4MGFlNjtcbiB0Lnplcm9ndXJtdWtoaSA9IDB4MGE2NjtcbiB0Lnplcm9oYWNrYXJhYmljID0gMHgwNjYwO1xuIHQuemVyb2luZmVyaW9yID0gMHgyMDgwO1xuIHQuemVyb21vbm9zcGFjZSA9IDB4ZmYxMDtcbiB0Lnplcm9vbGRzdHlsZSA9IDB4ZjczMDtcbiB0Lnplcm9wZXJzaWFuID0gMHgwNmYwO1xuIHQuemVyb3N1cGVyaW9yID0gMHgyMDcwO1xuIHQuemVyb3RoYWkgPSAweDBlNTA7XG4gdC56ZXJvd2lkdGhqb2luZXIgPSAweGZlZmY7XG4gdC56ZXJvd2lkdGhub25qb2luZXIgPSAweDIwMGM7XG4gdC56ZXJvd2lkdGhzcGFjZSA9IDB4MjAwYjtcbiB0LnpldGEgPSAweDAzYjY7XG4gdC56aGJvcG9tb2ZvID0gMHgzMTEzO1xuIHQuemhlYXJtZW5pYW4gPSAweDA1NmE7XG4gdC56aGVicmV2ZWN5cmlsbGljID0gMHgwNGMyO1xuIHQuemhlY3lyaWxsaWMgPSAweDA0MzY7XG4gdC56aGVkZXNjZW5kZXJjeXJpbGxpYyA9IDB4MDQ5NztcbiB0LnpoZWRpZXJlc2lzY3lyaWxsaWMgPSAweDA0ZGQ7XG4gdC56aWhpcmFnYW5hID0gMHgzMDU4O1xuIHQuemlrYXRha2FuYSA9IDB4MzBiODtcbiB0Lnppbm9yaGVicmV3ID0gMHgwNWFlO1xuIHQuemxpbmViZWxvdyA9IDB4MWU5NTtcbiB0Lnptb25vc3BhY2UgPSAweGZmNWE7XG4gdC56b2hpcmFnYW5hID0gMHgzMDVlO1xuIHQuem9rYXRha2FuYSA9IDB4MzBiZTtcbiB0LnpwYXJlbiA9IDB4MjRiNTtcbiB0LnpyZXRyb2ZsZXhob29rID0gMHgwMjkwO1xuIHQuenN0cm9rZSA9IDB4MDFiNjtcbiB0Lnp1aGlyYWdhbmEgPSAweDMwNWE7XG4gdC56dWthdGFrYW5hID0gMHgzMGJhO1xuIHRbXCIubm90ZGVmXCJdID0gMHgwMDAwO1xuIHQuYW5nYnJhY2tldGxlZnRiaWcgPSAweDIzMjk7XG4gdC5hbmdicmFja2V0bGVmdEJpZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRsZWZ0YmlnZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRsZWZ0QmlnZyA9IDB4MjMyOTtcbiB0LmFuZ2JyYWNrZXRyaWdodEJpZyA9IDB4MjMyYTtcbiB0LmFuZ2JyYWNrZXRyaWdodGJpZyA9IDB4MjMyYTtcbiB0LmFuZ2JyYWNrZXRyaWdodEJpZ2cgPSAweDIzMmE7XG4gdC5hbmdicmFja2V0cmlnaHRiaWdnID0gMHgyMzJhO1xuIHQuYXJyb3dob29rbGVmdCA9IDB4MjFhYTtcbiB0LmFycm93aG9va3JpZ2h0ID0gMHgyMWE5O1xuIHQuYXJyb3dsZWZ0dG9waGFsZiA9IDB4MjFiYztcbiB0LmFycm93bGVmdGJvdGhhbGYgPSAweDIxYmQ7XG4gdC5hcnJvd25vcnRoZWFzdCA9IDB4MjE5NztcbiB0LmFycm93bm9ydGh3ZXN0ID0gMHgyMTk2O1xuIHQuYXJyb3dyaWdodHRvcGhhbGYgPSAweDIxYzA7XG4gdC5hcnJvd3JpZ2h0Ym90aGFsZiA9IDB4MjFjMTtcbiB0LmFycm93c291dGhlYXN0ID0gMHgyMTk4O1xuIHQuYXJyb3dzb3V0aHdlc3QgPSAweDIxOTk7XG4gdC5iYWNrc2xhc2hiaWcgPSAweDIyMTY7XG4gdC5iYWNrc2xhc2hCaWcgPSAweDIyMTY7XG4gdC5iYWNrc2xhc2hCaWdnID0gMHgyMjE2O1xuIHQuYmFja3NsYXNoYmlnZyA9IDB4MjIxNjtcbiB0LmJhcmRibCA9IDB4MjAxNjtcbiB0LmJyYWNlaHRpcGRvd25sZWZ0ID0gMHhmZTM3O1xuIHQuYnJhY2VodGlwZG93bnJpZ2h0ID0gMHhmZTM3O1xuIHQuYnJhY2VodGlwdXBsZWZ0ID0gMHhmZTM4O1xuIHQuYnJhY2VodGlwdXByaWdodCA9IDB4ZmUzODtcbiB0LmJyYWNlbGVmdEJpZyA9IDB4MDA3YjtcbiB0LmJyYWNlbGVmdGJpZyA9IDB4MDA3YjtcbiB0LmJyYWNlbGVmdGJpZ2cgPSAweDAwN2I7XG4gdC5icmFjZWxlZnRCaWdnID0gMHgwMDdiO1xuIHQuYnJhY2VyaWdodEJpZyA9IDB4MDA3ZDtcbiB0LmJyYWNlcmlnaHRiaWcgPSAweDAwN2Q7XG4gdC5icmFjZXJpZ2h0YmlnZyA9IDB4MDA3ZDtcbiB0LmJyYWNlcmlnaHRCaWdnID0gMHgwMDdkO1xuIHQuYnJhY2tldGxlZnRiaWcgPSAweDAwNWI7XG4gdC5icmFja2V0bGVmdEJpZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRsZWZ0YmlnZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRsZWZ0QmlnZyA9IDB4MDA1YjtcbiB0LmJyYWNrZXRyaWdodEJpZyA9IDB4MDA1ZDtcbiB0LmJyYWNrZXRyaWdodGJpZyA9IDB4MDA1ZDtcbiB0LmJyYWNrZXRyaWdodGJpZ2cgPSAweDAwNWQ7XG4gdC5icmFja2V0cmlnaHRCaWdnID0gMHgwMDVkO1xuIHQuY2VpbGluZ2xlZnRiaWcgPSAweDIzMDg7XG4gdC5jZWlsaW5nbGVmdEJpZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdsZWZ0QmlnZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdsZWZ0YmlnZyA9IDB4MjMwODtcbiB0LmNlaWxpbmdyaWdodGJpZyA9IDB4MjMwOTtcbiB0LmNlaWxpbmdyaWdodEJpZyA9IDB4MjMwOTtcbiB0LmNlaWxpbmdyaWdodGJpZ2cgPSAweDIzMDk7XG4gdC5jZWlsaW5ncmlnaHRCaWdnID0gMHgyMzA5O1xuIHQuY2lyY2xlZG90ZGlzcGxheSA9IDB4MjI5OTtcbiB0LmNpcmNsZWRvdHRleHQgPSAweDIyOTk7XG4gdC5jaXJjbGVtdWx0aXBseWRpc3BsYXkgPSAweDIyOTc7XG4gdC5jaXJjbGVtdWx0aXBseXRleHQgPSAweDIyOTc7XG4gdC5jaXJjbGVwbHVzZGlzcGxheSA9IDB4MjI5NTtcbiB0LmNpcmNsZXBsdXN0ZXh0ID0gMHgyMjk1O1xuIHQuY29udGludGVncmFsZGlzcGxheSA9IDB4MjIyZTtcbiB0LmNvbnRpbnRlZ3JhbHRleHQgPSAweDIyMmU7XG4gdC5jb3Byb2R1Y3RkaXNwbGF5ID0gMHgyMjEwO1xuIHQuY29wcm9kdWN0dGV4dCA9IDB4MjIxMDtcbiB0LmZsb29ybGVmdEJpZyA9IDB4MjMwYTtcbiB0LmZsb29ybGVmdGJpZyA9IDB4MjMwYTtcbiB0LmZsb29ybGVmdGJpZ2cgPSAweDIzMGE7XG4gdC5mbG9vcmxlZnRCaWdnID0gMHgyMzBhO1xuIHQuZmxvb3JyaWdodGJpZyA9IDB4MjMwYjtcbiB0LmZsb29ycmlnaHRCaWcgPSAweDIzMGI7XG4gdC5mbG9vcnJpZ2h0QmlnZyA9IDB4MjMwYjtcbiB0LmZsb29ycmlnaHRiaWdnID0gMHgyMzBiO1xuIHQuaGF0d2lkZSA9IDB4MDMwMjtcbiB0LmhhdHdpZGVyID0gMHgwMzAyO1xuIHQuaGF0d2lkZXN0ID0gMHgwMzAyO1xuIHQuaW50ZXJjYWwgPSAweDFkNDA7XG4gdC5pbnRlZ3JhbGRpc3BsYXkgPSAweDIyMmI7XG4gdC5pbnRlZ3JhbHRleHQgPSAweDIyMmI7XG4gdC5pbnRlcnNlY3Rpb25kaXNwbGF5ID0gMHgyMmMyO1xuIHQuaW50ZXJzZWN0aW9udGV4dCA9IDB4MjJjMjtcbiB0LmxvZ2ljYWxhbmRkaXNwbGF5ID0gMHgyMjI3O1xuIHQubG9naWNhbGFuZHRleHQgPSAweDIyMjc7XG4gdC5sb2dpY2Fsb3JkaXNwbGF5ID0gMHgyMjI4O1xuIHQubG9naWNhbG9ydGV4dCA9IDB4MjIyODtcbiB0LnBhcmVubGVmdEJpZyA9IDB4MDAyODtcbiB0LnBhcmVubGVmdGJpZyA9IDB4MDAyODtcbiB0LnBhcmVubGVmdEJpZ2cgPSAweDAwMjg7XG4gdC5wYXJlbmxlZnRiaWdnID0gMHgwMDI4O1xuIHQucGFyZW5yaWdodEJpZyA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRiaWcgPSAweDAwMjk7XG4gdC5wYXJlbnJpZ2h0QmlnZyA9IDB4MDAyOTtcbiB0LnBhcmVucmlnaHRiaWdnID0gMHgwMDI5O1xuIHQucHJpbWUgPSAweDIwMzI7XG4gdC5wcm9kdWN0ZGlzcGxheSA9IDB4MjIwZjtcbiB0LnByb2R1Y3R0ZXh0ID0gMHgyMjBmO1xuIHQucmFkaWNhbGJpZyA9IDB4MjIxYTtcbiB0LnJhZGljYWxCaWcgPSAweDIyMWE7XG4gdC5yYWRpY2FsQmlnZyA9IDB4MjIxYTtcbiB0LnJhZGljYWxiaWdnID0gMHgyMjFhO1xuIHQucmFkaWNhbGJ0ID0gMHgyMjFhO1xuIHQucmFkaWNhbHRwID0gMHgyMjFhO1xuIHQucmFkaWNhbHZlcnRleCA9IDB4MjIxYTtcbiB0LnNsYXNoYmlnID0gMHgwMDJmO1xuIHQuc2xhc2hCaWcgPSAweDAwMmY7XG4gdC5zbGFzaEJpZ2cgPSAweDAwMmY7XG4gdC5zbGFzaGJpZ2cgPSAweDAwMmY7XG4gdC5zdW1tYXRpb25kaXNwbGF5ID0gMHgyMjExO1xuIHQuc3VtbWF0aW9udGV4dCA9IDB4MjIxMTtcbiB0LnRpbGRld2lkZSA9IDB4MDJkYztcbiB0LnRpbGRld2lkZXIgPSAweDAyZGM7XG4gdC50aWxkZXdpZGVzdCA9IDB4MDJkYztcbiB0LnVuaW9uZGlzcGxheSA9IDB4MjJjMztcbiB0LnVuaW9ubXVsdGlkaXNwbGF5ID0gMHgyMjhlO1xuIHQudW5pb25tdWx0aXRleHQgPSAweDIyOGU7XG4gdC51bmlvbnNxZGlzcGxheSA9IDB4MjI5NDtcbiB0LnVuaW9uc3F0ZXh0ID0gMHgyMjk0O1xuIHQudW5pb250ZXh0ID0gMHgyMmMzO1xuIHQudmV4dGVuZGRvdWJsZSA9IDB4MjIyNTtcbiB0LnZleHRlbmRzaW5nbGUgPSAweDIyMjM7XG59KTtcbnZhciBnZXREaW5nYmF0c0dseXBoc1VuaWNvZGUgPSBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZnVuY3Rpb24gKHQpIHtcbiB0LnNwYWNlID0gMHgwMDIwO1xuIHQuYTEgPSAweDI3MDE7XG4gdC5hMiA9IDB4MjcwMjtcbiB0LmEyMDIgPSAweDI3MDM7XG4gdC5hMyA9IDB4MjcwNDtcbiB0LmE0ID0gMHgyNjBlO1xuIHQuYTUgPSAweDI3MDY7XG4gdC5hMTE5ID0gMHgyNzA3O1xuIHQuYTExOCA9IDB4MjcwODtcbiB0LmExMTcgPSAweDI3MDk7XG4gdC5hMTEgPSAweDI2MWI7XG4gdC5hMTIgPSAweDI2MWU7XG4gdC5hMTMgPSAweDI3MGM7XG4gdC5hMTQgPSAweDI3MGQ7XG4gdC5hMTUgPSAweDI3MGU7XG4gdC5hMTYgPSAweDI3MGY7XG4gdC5hMTA1ID0gMHgyNzEwO1xuIHQuYTE3ID0gMHgyNzExO1xuIHQuYTE4ID0gMHgyNzEyO1xuIHQuYTE5ID0gMHgyNzEzO1xuIHQuYTIwID0gMHgyNzE0O1xuIHQuYTIxID0gMHgyNzE1O1xuIHQuYTIyID0gMHgyNzE2O1xuIHQuYTIzID0gMHgyNzE3O1xuIHQuYTI0ID0gMHgyNzE4O1xuIHQuYTI1ID0gMHgyNzE5O1xuIHQuYTI2ID0gMHgyNzFhO1xuIHQuYTI3ID0gMHgyNzFiO1xuIHQuYTI4ID0gMHgyNzFjO1xuIHQuYTYgPSAweDI3MWQ7XG4gdC5hNyA9IDB4MjcxZTtcbiB0LmE4ID0gMHgyNzFmO1xuIHQuYTkgPSAweDI3MjA7XG4gdC5hMTAgPSAweDI3MjE7XG4gdC5hMjkgPSAweDI3MjI7XG4gdC5hMzAgPSAweDI3MjM7XG4gdC5hMzEgPSAweDI3MjQ7XG4gdC5hMzIgPSAweDI3MjU7XG4gdC5hMzMgPSAweDI3MjY7XG4gdC5hMzQgPSAweDI3Mjc7XG4gdC5hMzUgPSAweDI2MDU7XG4gdC5hMzYgPSAweDI3Mjk7XG4gdC5hMzcgPSAweDI3MmE7XG4gdC5hMzggPSAweDI3MmI7XG4gdC5hMzkgPSAweDI3MmM7XG4gdC5hNDAgPSAweDI3MmQ7XG4gdC5hNDEgPSAweDI3MmU7XG4gdC5hNDIgPSAweDI3MmY7XG4gdC5hNDMgPSAweDI3MzA7XG4gdC5hNDQgPSAweDI3MzE7XG4gdC5hNDUgPSAweDI3MzI7XG4gdC5hNDYgPSAweDI3MzM7XG4gdC5hNDcgPSAweDI3MzQ7XG4gdC5hNDggPSAweDI3MzU7XG4gdC5hNDkgPSAweDI3MzY7XG4gdC5hNTAgPSAweDI3Mzc7XG4gdC5hNTEgPSAweDI3Mzg7XG4gdC5hNTIgPSAweDI3Mzk7XG4gdC5hNTMgPSAweDI3M2E7XG4gdC5hNTQgPSAweDI3M2I7XG4gdC5hNTUgPSAweDI3M2M7XG4gdC5hNTYgPSAweDI3M2Q7XG4gdC5hNTcgPSAweDI3M2U7XG4gdC5hNTggPSAweDI3M2Y7XG4gdC5hNTkgPSAweDI3NDA7XG4gdC5hNjAgPSAweDI3NDE7XG4gdC5hNjEgPSAweDI3NDI7XG4gdC5hNjIgPSAweDI3NDM7XG4gdC5hNjMgPSAweDI3NDQ7XG4gdC5hNjQgPSAweDI3NDU7XG4gdC5hNjUgPSAweDI3NDY7XG4gdC5hNjYgPSAweDI3NDc7XG4gdC5hNjcgPSAweDI3NDg7XG4gdC5hNjggPSAweDI3NDk7XG4gdC5hNjkgPSAweDI3NGE7XG4gdC5hNzAgPSAweDI3NGI7XG4gdC5hNzEgPSAweDI1Y2Y7XG4gdC5hNzIgPSAweDI3NGQ7XG4gdC5hNzMgPSAweDI1YTA7XG4gdC5hNzQgPSAweDI3NGY7XG4gdC5hMjAzID0gMHgyNzUwO1xuIHQuYTc1ID0gMHgyNzUxO1xuIHQuYTIwNCA9IDB4Mjc1MjtcbiB0LmE3NiA9IDB4MjViMjtcbiB0LmE3NyA9IDB4MjViYztcbiB0LmE3OCA9IDB4MjVjNjtcbiB0LmE3OSA9IDB4Mjc1NjtcbiB0LmE4MSA9IDB4MjVkNztcbiB0LmE4MiA9IDB4Mjc1ODtcbiB0LmE4MyA9IDB4Mjc1OTtcbiB0LmE4NCA9IDB4Mjc1YTtcbiB0LmE5NyA9IDB4Mjc1YjtcbiB0LmE5OCA9IDB4Mjc1YztcbiB0LmE5OSA9IDB4Mjc1ZDtcbiB0LmExMDAgPSAweDI3NWU7XG4gdC5hMTAxID0gMHgyNzYxO1xuIHQuYTEwMiA9IDB4Mjc2MjtcbiB0LmExMDMgPSAweDI3NjM7XG4gdC5hMTA0ID0gMHgyNzY0O1xuIHQuYTEwNiA9IDB4Mjc2NTtcbiB0LmExMDcgPSAweDI3NjY7XG4gdC5hMTA4ID0gMHgyNzY3O1xuIHQuYTExMiA9IDB4MjY2MztcbiB0LmExMTEgPSAweDI2NjY7XG4gdC5hMTEwID0gMHgyNjY1O1xuIHQuYTEwOSA9IDB4MjY2MDtcbiB0LmExMjAgPSAweDI0NjA7XG4gdC5hMTIxID0gMHgyNDYxO1xuIHQuYTEyMiA9IDB4MjQ2MjtcbiB0LmExMjMgPSAweDI0NjM7XG4gdC5hMTI0ID0gMHgyNDY0O1xuIHQuYTEyNSA9IDB4MjQ2NTtcbiB0LmExMjYgPSAweDI0NjY7XG4gdC5hMTI3ID0gMHgyNDY3O1xuIHQuYTEyOCA9IDB4MjQ2ODtcbiB0LmExMjkgPSAweDI0Njk7XG4gdC5hMTMwID0gMHgyNzc2O1xuIHQuYTEzMSA9IDB4Mjc3NztcbiB0LmExMzIgPSAweDI3Nzg7XG4gdC5hMTMzID0gMHgyNzc5O1xuIHQuYTEzNCA9IDB4Mjc3YTtcbiB0LmExMzUgPSAweDI3N2I7XG4gdC5hMTM2ID0gMHgyNzdjO1xuIHQuYTEzNyA9IDB4Mjc3ZDtcbiB0LmExMzggPSAweDI3N2U7XG4gdC5hMTM5ID0gMHgyNzdmO1xuIHQuYTE0MCA9IDB4Mjc4MDtcbiB0LmExNDEgPSAweDI3ODE7XG4gdC5hMTQyID0gMHgyNzgyO1xuIHQuYTE0MyA9IDB4Mjc4MztcbiB0LmExNDQgPSAweDI3ODQ7XG4gdC5hMTQ1ID0gMHgyNzg1O1xuIHQuYTE0NiA9IDB4Mjc4NjtcbiB0LmExNDcgPSAweDI3ODc7XG4gdC5hMTQ4ID0gMHgyNzg4O1xuIHQuYTE0OSA9IDB4Mjc4OTtcbiB0LmExNTAgPSAweDI3OGE7XG4gdC5hMTUxID0gMHgyNzhiO1xuIHQuYTE1MiA9IDB4Mjc4YztcbiB0LmExNTMgPSAweDI3OGQ7XG4gdC5hMTU0ID0gMHgyNzhlO1xuIHQuYTE1NSA9IDB4Mjc4ZjtcbiB0LmExNTYgPSAweDI3OTA7XG4gdC5hMTU3ID0gMHgyNzkxO1xuIHQuYTE1OCA9IDB4Mjc5MjtcbiB0LmExNTkgPSAweDI3OTM7XG4gdC5hMTYwID0gMHgyNzk0O1xuIHQuYTE2MSA9IDB4MjE5MjtcbiB0LmExNjMgPSAweDIxOTQ7XG4gdC5hMTY0ID0gMHgyMTk1O1xuIHQuYTE5NiA9IDB4Mjc5ODtcbiB0LmExNjUgPSAweDI3OTk7XG4gdC5hMTkyID0gMHgyNzlhO1xuIHQuYTE2NiA9IDB4Mjc5YjtcbiB0LmExNjcgPSAweDI3OWM7XG4gdC5hMTY4ID0gMHgyNzlkO1xuIHQuYTE2OSA9IDB4Mjc5ZTtcbiB0LmExNzAgPSAweDI3OWY7XG4gdC5hMTcxID0gMHgyN2EwO1xuIHQuYTE3MiA9IDB4MjdhMTtcbiB0LmExNzMgPSAweDI3YTI7XG4gdC5hMTYyID0gMHgyN2EzO1xuIHQuYTE3NCA9IDB4MjdhNDtcbiB0LmExNzUgPSAweDI3YTU7XG4gdC5hMTc2ID0gMHgyN2E2O1xuIHQuYTE3NyA9IDB4MjdhNztcbiB0LmExNzggPSAweDI3YTg7XG4gdC5hMTc5ID0gMHgyN2E5O1xuIHQuYTE5MyA9IDB4MjdhYTtcbiB0LmExODAgPSAweDI3YWI7XG4gdC5hMTk5ID0gMHgyN2FjO1xuIHQuYTE4MSA9IDB4MjdhZDtcbiB0LmEyMDAgPSAweDI3YWU7XG4gdC5hMTgyID0gMHgyN2FmO1xuIHQuYTIwMSA9IDB4MjdiMTtcbiB0LmExODMgPSAweDI3YjI7XG4gdC5hMTg0ID0gMHgyN2IzO1xuIHQuYTE5NyA9IDB4MjdiNDtcbiB0LmExODUgPSAweDI3YjU7XG4gdC5hMTk0ID0gMHgyN2I2O1xuIHQuYTE5OCA9IDB4MjdiNztcbiB0LmExODYgPSAweDI3Yjg7XG4gdC5hMTk1ID0gMHgyN2I5O1xuIHQuYTE4NyA9IDB4MjdiYTtcbiB0LmExODggPSAweDI3YmI7XG4gdC5hMTg5ID0gMHgyN2JjO1xuIHQuYTE5MCA9IDB4MjdiZDtcbiB0LmExOTEgPSAweDI3YmU7XG4gdC5hODkgPSAweDI3Njg7XG4gdC5hOTAgPSAweDI3Njk7XG4gdC5hOTMgPSAweDI3NmE7XG4gdC5hOTQgPSAweDI3NmI7XG4gdC5hOTEgPSAweDI3NmM7XG4gdC5hOTIgPSAweDI3NmQ7XG4gdC5hMjA1ID0gMHgyNzZlO1xuIHQuYTg1ID0gMHgyNzZmO1xuIHQuYTIwNiA9IDB4Mjc3MDtcbiB0LmE4NiA9IDB4Mjc3MTtcbiB0LmE4NyA9IDB4Mjc3MjtcbiB0LmE4OCA9IDB4Mjc3MztcbiB0LmE5NSA9IDB4Mjc3NDtcbiB0LmE5NiA9IDB4Mjc3NTtcbiB0W1wiLm5vdGRlZlwiXSA9IDB4MDAwMDtcbn0pO1xuZXhwb3J0cy5nZXRHbHlwaHNVbmljb2RlID0gZ2V0R2x5cGhzVW5pY29kZTtcbmV4cG9ydHMuZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlID0gZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlO1xuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9IGV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrID0gZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBleHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGV4cG9ydHMuZ2V0U3RkRm9udE1hcCA9IHZvaWQgMDtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxuY29uc3QgZ2V0U3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQXJpYWxOYXJyb3cgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWxOYXJyb3ctQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsTmFycm93LUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWxOYXJyb3ctSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsQmxhY2sgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWxCbGFjay1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWxCbGFjay1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsQmxhY2stSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQmxhY2tcIl0gPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWwtQmxhY2stQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUJsYWNrLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQmxhY2stSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkFyaWFsLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbC1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNNVFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1Cb2xkTVRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbC1JdGFsaWNNVFwiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdC5BcmlhbE1UID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkNvdXJpZXItQm9sZFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRJdGFsaWNcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkNvdXJpZXItSXRhbGljXCJdID0gXCJDb3VyaWVyLU9ibGlxdWVcIjtcbiAgdC5Db3VyaWVyTmV3ID0gXCJDb3VyaWVyXCI7XG4gIHRbXCJDb3VyaWVyTmV3LUJvbGRcIl0gPSBcIkNvdXJpZXItQm9sZFwiO1xuICB0W1wiQ291cmllck5ldy1Cb2xkSXRhbGljXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3LUl0YWxpY1wiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtQm9sZE1UXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkNvdXJpZXJOZXdQUy1JdGFsaWNNVFwiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHQuQ291cmllck5ld1BTTVQgPSBcIkNvdXJpZXJcIjtcbiAgdC5IZWx2ZXRpY2EgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiSGVsdmV0aWNhLUl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLU9ibGlxdWVcIjtcbiAgdFtcIkhlbHZldGljYS1PYmxpcXVlXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiU3ltYm9sLUJvbGRcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUJvbGRJdGFsaWNcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUl0YWxpY1wiXSA9IFwiU3ltYm9sXCI7XG4gIHQuVGltZXNOZXdSb21hbiA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW4tQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuLUl0YWxpY1wiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTID0gXCJUaW1lcy1Sb21hblwiO1xuICB0W1wiVGltZXNOZXdSb21hblBTLUJvbGRcIl0gPSBcIlRpbWVzLUJvbGRcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZE1UXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtSXRhbGljXCJdID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVFwiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTTVQgPSBcIlRpbWVzLVJvbWFuXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xufSk7XG5leHBvcnRzLmdldFN0ZEZvbnRNYXAgPSBnZXRTdGRGb250TWFwO1xuY29uc3QgZ2V0Tm9uU3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQ2FsaWJyaSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ2VudHVyeUdvdGhpYyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2VudHVyeUdvdGhpYy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ29taWNTYW5zTVMgPSBcIkNvbWljIFNhbnMgTVNcIjtcbiAgdFtcIkNvbWljU2Fuc01TLUJvbGRcIl0gPSBcIkNvbWljIFNhbnMgTVMtQm9sZFwiO1xuICB0W1wiQ29taWNTYW5zTVMtQm9sZEl0YWxpY1wiXSA9IFwiQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJDb21pY1NhbnNNUy1JdGFsaWNcIl0gPSBcIkNvbWljIFNhbnMgTVMtSXRhbGljXCI7XG4gIHQuTHVjaWRhQ29uc29sZSA9IFwiQ291cmllclwiO1xuICB0W1wiTHVjaWRhQ29uc29sZS1Cb2xkXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpY1wiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiTHVjaWRhQ29uc29sZS1JdGFsaWNcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiTHVjaWRhU2Fucy1EZW1pXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiTVMtR290aGljXCJdID0gXCJNUyBHb3RoaWNcIjtcbiAgdFtcIk1TLUdvdGhpYy1Cb2xkXCJdID0gXCJNUyBHb3RoaWMtQm9sZFwiO1xuICB0W1wiTVMtR290aGljLUJvbGRJdGFsaWNcIl0gPSBcIk1TIEdvdGhpYy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1Hb3RoaWMtSXRhbGljXCJdID0gXCJNUyBHb3RoaWMtSXRhbGljXCI7XG4gIHRbXCJNUy1NaW5jaG9cIl0gPSBcIk1TIE1pbmNob1wiO1xuICB0W1wiTVMtTWluY2hvLUJvbGRcIl0gPSBcIk1TIE1pbmNoby1Cb2xkXCI7XG4gIHRbXCJNUy1NaW5jaG8tQm9sZEl0YWxpY1wiXSA9IFwiTVMgTWluY2hvLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLU1pbmNoby1JdGFsaWNcIl0gPSBcIk1TIE1pbmNoby1JdGFsaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWNcIl0gPSBcIk1TIFBHb3RoaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWMtQm9sZFwiXSA9IFwiTVMgUEdvdGhpYy1Cb2xkXCI7XG4gIHRbXCJNUy1QR290aGljLUJvbGRJdGFsaWNcIl0gPSBcIk1TIFBHb3RoaWMtQm9sZEl0YWxpY1wiO1xuICB0W1wiTVMtUEdvdGhpYy1JdGFsaWNcIl0gPSBcIk1TIFBHb3RoaWMtSXRhbGljXCI7XG4gIHRbXCJNUy1QTWluY2hvXCJdID0gXCJNUyBQTWluY2hvXCI7XG4gIHRbXCJNUy1QTWluY2hvLUJvbGRcIl0gPSBcIk1TIFBNaW5jaG8tQm9sZFwiO1xuICB0W1wiTVMtUE1pbmNoby1Cb2xkSXRhbGljXCJdID0gXCJNUyBQTWluY2hvLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLVBNaW5jaG8tSXRhbGljXCJdID0gXCJNUyBQTWluY2hvLUl0YWxpY1wiO1xuICB0Lk51cHRpYWxTY3JpcHQgPSBcIlRpbWVzLUl0YWxpY1wiO1xuICB0LlNlZ29lVUlTeW1ib2wgPSBcIkhlbHZldGljYVwiO1xuICB0LldpbmdkaW5ncyA9IFwiWmFwZkRpbmdiYXRzXCI7XG4gIHRbXCJXaW5nZGluZ3MtUmVndWxhclwiXSA9IFwiWmFwZkRpbmdiYXRzXCI7XG59KTtcbmV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGdldE5vblN0ZEZvbnRNYXA7XG5jb25zdCBnZXRTZXJpZkZvbnRzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdFtcIkFkb2JlIEplbnNvblwiXSA9IHRydWU7XG4gIHRbXCJBZG9iZSBUZXh0XCJdID0gdHJ1ZTtcbiAgdC5BbGJlcnR1cyA9IHRydWU7XG4gIHQuQWxkdXMgPSB0cnVlO1xuICB0LkFsZXhhbmRyaWEgPSB0cnVlO1xuICB0LkFsZ2VyaWFuID0gdHJ1ZTtcbiAgdFtcIkFtZXJpY2FuIFR5cGV3cml0ZXJcIl0gPSB0cnVlO1xuICB0LkFudGlxdWEgPSB0cnVlO1xuICB0LkFwZXggPSB0cnVlO1xuICB0LkFybm8gPSB0cnVlO1xuICB0LkFzdGVyID0gdHJ1ZTtcbiAgdC5BdXJvcmEgPSB0cnVlO1xuICB0LkJhc2tlcnZpbGxlID0gdHJ1ZTtcbiAgdC5CZWxsID0gdHJ1ZTtcbiAgdC5CZW1ibyA9IHRydWU7XG4gIHRbXCJCZW1ibyBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5CZW5ndWlhdCA9IHRydWU7XG4gIHRbXCJCZXJrZWxleSBPbGQgU3R5bGVcIl0gPSB0cnVlO1xuICB0W1wiQmVybmhhcmQgTW9kZXJuXCJdID0gdHJ1ZTtcbiAgdFtcIkJlcnRob2xkIENpdHlcIl0gPSB0cnVlO1xuICB0LkJvZG9uaSA9IHRydWU7XG4gIHRbXCJCYXVlciBCb2RvbmlcIl0gPSB0cnVlO1xuICB0W1wiQm9vayBBbnRpcXVhXCJdID0gdHJ1ZTtcbiAgdC5Cb29rbWFuID0gdHJ1ZTtcbiAgdFtcIkJvcmRlYXV4IFJvbWFuXCJdID0gdHJ1ZTtcbiAgdFtcIkNhbGlmb3JuaWFuIEZCXCJdID0gdHJ1ZTtcbiAgdC5DYWxpc3RvID0gdHJ1ZTtcbiAgdC5DYWx2ZXJ0ID0gdHJ1ZTtcbiAgdC5DYXBpdGFscyA9IHRydWU7XG4gIHQuQ2FtYnJpYSA9IHRydWU7XG4gIHQuQ2FydGllciA9IHRydWU7XG4gIHQuQ2FzbG9uID0gdHJ1ZTtcbiAgdC5DYXR1bGwgPSB0cnVlO1xuICB0LkNlbnRhdXIgPSB0cnVlO1xuICB0W1wiQ2VudHVyeSBPbGQgU3R5bGVcIl0gPSB0cnVlO1xuICB0W1wiQ2VudHVyeSBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5DaGFwYXJyYWwgPSB0cnVlO1xuICB0W1wiQ2hhcmlzIFNJTFwiXSA9IHRydWU7XG4gIHQuQ2hlbHRlbmhhbSA9IHRydWU7XG4gIHRbXCJDaG9sbGEgU2xhYlwiXSA9IHRydWU7XG4gIHQuQ2xhcmVuZG9uID0gdHJ1ZTtcbiAgdC5DbGVhcmZhY2UgPSB0cnVlO1xuICB0LkNvY2hpbiA9IHRydWU7XG4gIHQuQ29sb25uYSA9IHRydWU7XG4gIHRbXCJDb21wdXRlciBNb2Rlcm5cIl0gPSB0cnVlO1xuICB0W1wiQ29uY3JldGUgUm9tYW5cIl0gPSB0cnVlO1xuICB0LkNvbnN0YW50aWEgPSB0cnVlO1xuICB0W1wiQ29vcGVyIEJsYWNrXCJdID0gdHJ1ZTtcbiAgdC5Db3JvbmEgPSB0cnVlO1xuICB0LkVjb3R5cGUgPSB0cnVlO1xuICB0LkVneXB0aWVubmUgPSB0cnVlO1xuICB0LkVsZXBoYW50ID0gdHJ1ZTtcbiAgdC5FeGNlbHNpb3IgPSB0cnVlO1xuICB0LkZhaXJmaWVsZCA9IHRydWU7XG4gIHRbXCJGRiBTY2FsYVwiXSA9IHRydWU7XG4gIHQuRm9sa2FyZCA9IHRydWU7XG4gIHQuRm9vdGxpZ2h0ID0gdHJ1ZTtcbiAgdC5GcmVlU2VyaWYgPSB0cnVlO1xuICB0W1wiRnJpeiBRdWFkcmF0YVwiXSA9IHRydWU7XG4gIHQuR2FyYW1vbmQgPSB0cnVlO1xuICB0LkdlbnRpdW0gPSB0cnVlO1xuICB0Lkdlb3JnaWEgPSB0cnVlO1xuICB0Lkdsb3VjZXN0ZXIgPSB0cnVlO1xuICB0W1wiR291ZHkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IFNjaG9vbGJvb2tcIl0gPSB0cnVlO1xuICB0W1wiR291ZHkgUHJvIEZvbnRcIl0gPSB0cnVlO1xuICB0LkdyYW5qb24gPSB0cnVlO1xuICB0W1wiR3VhcmRpYW4gRWd5cHRpYW5cIl0gPSB0cnVlO1xuICB0LkhlYXRoZXIgPSB0cnVlO1xuICB0LkhlcmN1bGVzID0gdHJ1ZTtcbiAgdFtcIkhpZ2ggVG93ZXIgVGV4dFwiXSA9IHRydWU7XG4gIHQuSGlyb3NoaWdlID0gdHJ1ZTtcbiAgdFtcIkhvZWZsZXIgVGV4dFwiXSA9IHRydWU7XG4gIHRbXCJIdW1hbmEgU2VyaWZcIl0gPSB0cnVlO1xuICB0LkltcHJpbnQgPSB0cnVlO1xuICB0W1wiSW9uaWMgTm8uIDVcIl0gPSB0cnVlO1xuICB0LkphbnNvbiA9IHRydWU7XG4gIHQuSm9hbm5hID0gdHJ1ZTtcbiAgdC5Lb3Jpbm5hID0gdHJ1ZTtcbiAgdC5MZXhpY29uID0gdHJ1ZTtcbiAgdFtcIkxpYmVyYXRpb24gU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTGludXggTGliZXJ0aW5lXCJdID0gdHJ1ZTtcbiAgdC5MaXRlcmF0dXJuYXlhID0gdHJ1ZTtcbiAgdC5MdWNpZGEgPSB0cnVlO1xuICB0W1wiTHVjaWRhIEJyaWdodFwiXSA9IHRydWU7XG4gIHQuTWVsaW9yID0gdHJ1ZTtcbiAgdC5NZW1waGlzID0gdHJ1ZTtcbiAgdC5NaWxsZXIgPSB0cnVlO1xuICB0Lk1pbmlvbiA9IHRydWU7XG4gIHQuTW9kZXJuID0gdHJ1ZTtcbiAgdFtcIk1vbmEgTGlzYVwiXSA9IHRydWU7XG4gIHRbXCJNcnMgRWF2ZXNcIl0gPSB0cnVlO1xuICB0W1wiTVMgU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTXVzZW8gU2xhYlwiXSA9IHRydWU7XG4gIHRbXCJOZXcgWW9ya1wiXSA9IHRydWU7XG4gIHRbXCJOaW1idXMgUm9tYW5cIl0gPSB0cnVlO1xuICB0W1wiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5XCJdID0gdHJ1ZTtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gdHJ1ZTtcbiAgdC5QYWxhdGlubyA9IHRydWU7XG4gIHQuUGVycGV0dWEgPSB0cnVlO1xuICB0LlBsYW50aW4gPSB0cnVlO1xuICB0W1wiUGxhbnRpbiBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5QbGF5YmlsbCA9IHRydWU7XG4gIHRbXCJQb29yIFJpY2hhcmRcIl0gPSB0cnVlO1xuICB0W1wiUmF3bGluc29uIFJvYWR3YXlcIl0gPSB0cnVlO1xuICB0LlJlbmF1bHQgPSB0cnVlO1xuICB0LlJlcXVpZW0gPSB0cnVlO1xuICB0LlJvY2t3ZWxsID0gdHJ1ZTtcbiAgdC5Sb21hbiA9IHRydWU7XG4gIHRbXCJSb3RpcyBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU2Fib24gPSB0cnVlO1xuICB0LlNjYWxhID0gdHJ1ZTtcbiAgdC5TZWFndWxsID0gdHJ1ZTtcbiAgdC5TaXN0aW5hID0gdHJ1ZTtcbiAgdC5Tb3V2ZW5pciA9IHRydWU7XG4gIHQuU1RJWCA9IHRydWU7XG4gIHRbXCJTdG9uZSBJbmZvcm1hbFwiXSA9IHRydWU7XG4gIHRbXCJTdG9uZSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU3lsZmFlbiA9IHRydWU7XG4gIHQuVGltZXMgPSB0cnVlO1xuICB0LlRyYWphbiA9IHRydWU7XG4gIHRbXCJUcmluaXTDqVwiXSA9IHRydWU7XG4gIHRbXCJUcnVtcCBNZWRpYWV2YWxcIl0gPSB0cnVlO1xuICB0LlV0b3BpYSA9IHRydWU7XG4gIHRbXCJWYWxlIFR5cGVcIl0gPSB0cnVlO1xuICB0W1wiQml0c3RyZWFtIFZlcmFcIl0gPSB0cnVlO1xuICB0W1wiVmVyYSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuVmVyc2FpbGxlcyA9IHRydWU7XG4gIHQuV2FudGVkID0gdHJ1ZTtcbiAgdC5XZWlzcyA9IHRydWU7XG4gIHRbXCJXaWRlIExhdGluXCJdID0gdHJ1ZTtcbiAgdC5XaW5kc29yID0gdHJ1ZTtcbiAgdC5YSVRTID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTZXJpZkZvbnRzID0gZ2V0U2VyaWZGb250cztcbmNvbnN0IGdldFN5bWJvbHNGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuRGluZ2JhdHMgPSB0cnVlO1xuICB0LlN5bWJvbCA9IHRydWU7XG4gIHQuWmFwZkRpbmdiYXRzID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBnZXRTeW1ib2xzRm9udHM7XG5jb25zdCBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzJdID0gMTA7XG4gIHRbM10gPSAzMjtcbiAgdFs0XSA9IDMzO1xuICB0WzVdID0gMzQ7XG4gIHRbNl0gPSAzNTtcbiAgdFs3XSA9IDM2O1xuICB0WzhdID0gMzc7XG4gIHRbOV0gPSAzODtcbiAgdFsxMF0gPSAzOTtcbiAgdFsxMV0gPSA0MDtcbiAgdFsxMl0gPSA0MTtcbiAgdFsxM10gPSA0MjtcbiAgdFsxNF0gPSA0MztcbiAgdFsxNV0gPSA0NDtcbiAgdFsxNl0gPSA0NTtcbiAgdFsxN10gPSA0NjtcbiAgdFsxOF0gPSA0NztcbiAgdFsxOV0gPSA0ODtcbiAgdFsyMF0gPSA0OTtcbiAgdFsyMV0gPSA1MDtcbiAgdFsyMl0gPSA1MTtcbiAgdFsyM10gPSA1MjtcbiAgdFsyNF0gPSA1MztcbiAgdFsyNV0gPSA1NDtcbiAgdFsyNl0gPSA1NTtcbiAgdFsyN10gPSA1NjtcbiAgdFsyOF0gPSA1NztcbiAgdFsyOV0gPSA1ODtcbiAgdFszMF0gPSA4OTQ7XG4gIHRbMzFdID0gNjA7XG4gIHRbMzJdID0gNjE7XG4gIHRbMzNdID0gNjI7XG4gIHRbMzRdID0gNjM7XG4gIHRbMzVdID0gNjQ7XG4gIHRbMzZdID0gNjU7XG4gIHRbMzddID0gNjY7XG4gIHRbMzhdID0gNjc7XG4gIHRbMzldID0gNjg7XG4gIHRbNDBdID0gNjk7XG4gIHRbNDFdID0gNzA7XG4gIHRbNDJdID0gNzE7XG4gIHRbNDNdID0gNzI7XG4gIHRbNDRdID0gNzM7XG4gIHRbNDVdID0gNzQ7XG4gIHRbNDZdID0gNzU7XG4gIHRbNDddID0gNzY7XG4gIHRbNDhdID0gNzc7XG4gIHRbNDldID0gNzg7XG4gIHRbNTBdID0gNzk7XG4gIHRbNTFdID0gODA7XG4gIHRbNTJdID0gODE7XG4gIHRbNTNdID0gODI7XG4gIHRbNTRdID0gODM7XG4gIHRbNTVdID0gODQ7XG4gIHRbNTZdID0gODU7XG4gIHRbNTddID0gODY7XG4gIHRbNThdID0gODc7XG4gIHRbNTldID0gODg7XG4gIHRbNjBdID0gODk7XG4gIHRbNjFdID0gOTA7XG4gIHRbNjJdID0gOTE7XG4gIHRbNjNdID0gOTI7XG4gIHRbNjRdID0gOTM7XG4gIHRbNjVdID0gOTQ7XG4gIHRbNjZdID0gOTU7XG4gIHRbNjddID0gOTY7XG4gIHRbNjhdID0gOTc7XG4gIHRbNjldID0gOTg7XG4gIHRbNzBdID0gOTk7XG4gIHRbNzFdID0gMTAwO1xuICB0WzcyXSA9IDEwMTtcbiAgdFs3M10gPSAxMDI7XG4gIHRbNzRdID0gMTAzO1xuICB0Wzc1XSA9IDEwNDtcbiAgdFs3Nl0gPSAxMDU7XG4gIHRbNzddID0gMTA2O1xuICB0Wzc4XSA9IDEwNztcbiAgdFs3OV0gPSAxMDg7XG4gIHRbODBdID0gMTA5O1xuICB0WzgxXSA9IDExMDtcbiAgdFs4Ml0gPSAxMTE7XG4gIHRbODNdID0gMTEyO1xuICB0Wzg0XSA9IDExMztcbiAgdFs4NV0gPSAxMTQ7XG4gIHRbODZdID0gMTE1O1xuICB0Wzg3XSA9IDExNjtcbiAgdFs4OF0gPSAxMTc7XG4gIHRbODldID0gMTE4O1xuICB0WzkwXSA9IDExOTtcbiAgdFs5MV0gPSAxMjA7XG4gIHRbOTJdID0gMTIxO1xuICB0WzkzXSA9IDEyMjtcbiAgdFs5NF0gPSAxMjM7XG4gIHRbOTVdID0gMTI0O1xuICB0Wzk2XSA9IDEyNTtcbiAgdFs5N10gPSAxMjY7XG4gIHRbOThdID0gMTk2O1xuICB0Wzk5XSA9IDE5NztcbiAgdFsxMDBdID0gMTk5O1xuICB0WzEwMV0gPSAyMDE7XG4gIHRbMTAyXSA9IDIwOTtcbiAgdFsxMDNdID0gMjE0O1xuICB0WzEwNF0gPSAyMjA7XG4gIHRbMTA1XSA9IDIyNTtcbiAgdFsxMDZdID0gMjI0O1xuICB0WzEwN10gPSAyMjY7XG4gIHRbMTA4XSA9IDIyODtcbiAgdFsxMDldID0gMjI3O1xuICB0WzExMF0gPSAyMjk7XG4gIHRbMTExXSA9IDIzMTtcbiAgdFsxMTJdID0gMjMzO1xuICB0WzExM10gPSAyMzI7XG4gIHRbMTE0XSA9IDIzNDtcbiAgdFsxMTVdID0gMjM1O1xuICB0WzExNl0gPSAyMzc7XG4gIHRbMTE3XSA9IDIzNjtcbiAgdFsxMThdID0gMjM4O1xuICB0WzExOV0gPSAyMzk7XG4gIHRbMTIwXSA9IDI0MTtcbiAgdFsxMjFdID0gMjQzO1xuICB0WzEyMl0gPSAyNDI7XG4gIHRbMTIzXSA9IDI0NDtcbiAgdFsxMjRdID0gMjQ2O1xuICB0WzEyNV0gPSAyNDU7XG4gIHRbMTI2XSA9IDI1MDtcbiAgdFsxMjddID0gMjQ5O1xuICB0WzEyOF0gPSAyNTE7XG4gIHRbMTI5XSA9IDI1MjtcbiAgdFsxMzBdID0gODIyNDtcbiAgdFsxMzFdID0gMTc2O1xuICB0WzEzMl0gPSAxNjI7XG4gIHRbMTMzXSA9IDE2MztcbiAgdFsxMzRdID0gMTY3O1xuICB0WzEzNV0gPSA4MjI2O1xuICB0WzEzNl0gPSAxODI7XG4gIHRbMTM3XSA9IDIyMztcbiAgdFsxMzhdID0gMTc0O1xuICB0WzEzOV0gPSAxNjk7XG4gIHRbMTQwXSA9IDg0ODI7XG4gIHRbMTQxXSA9IDE4MDtcbiAgdFsxNDJdID0gMTY4O1xuICB0WzE0M10gPSA4ODAwO1xuICB0WzE0NF0gPSAxOTg7XG4gIHRbMTQ1XSA9IDIxNjtcbiAgdFsxNDZdID0gODczNDtcbiAgdFsxNDddID0gMTc3O1xuICB0WzE0OF0gPSA4ODA0O1xuICB0WzE0OV0gPSA4ODA1O1xuICB0WzE1MF0gPSAxNjU7XG4gIHRbMTUxXSA9IDE4MTtcbiAgdFsxNTJdID0gODcwNjtcbiAgdFsxNTNdID0gODcyMTtcbiAgdFsxNTRdID0gODcxOTtcbiAgdFsxNTZdID0gODc0NztcbiAgdFsxNTddID0gMTcwO1xuICB0WzE1OF0gPSAxODY7XG4gIHRbMTU5XSA9IDg0ODY7XG4gIHRbMTYwXSA9IDIzMDtcbiAgdFsxNjFdID0gMjQ4O1xuICB0WzE2Ml0gPSAxOTE7XG4gIHRbMTYzXSA9IDE2MTtcbiAgdFsxNjRdID0gMTcyO1xuICB0WzE2NV0gPSA4NzMwO1xuICB0WzE2Nl0gPSA0MDI7XG4gIHRbMTY3XSA9IDg3NzY7XG4gIHRbMTY4XSA9IDg3MTA7XG4gIHRbMTY5XSA9IDE3MTtcbiAgdFsxNzBdID0gMTg3O1xuICB0WzE3MV0gPSA4MjMwO1xuICB0WzIxMF0gPSAyMTg7XG4gIHRbMjIzXSA9IDcxMTtcbiAgdFsyMjRdID0gMzIxO1xuICB0WzIyNV0gPSAzMjI7XG4gIHRbMjI3XSA9IDM1MztcbiAgdFsyMjldID0gMzgyO1xuICB0WzIzNF0gPSAyNTM7XG4gIHRbMjUyXSA9IDI2MztcbiAgdFsyNTNdID0gMjY4O1xuICB0WzI1NF0gPSAyNjk7XG4gIHRbMjU4XSA9IDI1ODtcbiAgdFsyNjBdID0gMjYwO1xuICB0WzI2MV0gPSAyNjE7XG4gIHRbMjY1XSA9IDI4MDtcbiAgdFsyNjZdID0gMjgxO1xuICB0WzI2OF0gPSAyODM7XG4gIHRbMjY5XSA9IDMxMztcbiAgdFsyNzVdID0gMzIzO1xuICB0WzI3Nl0gPSAzMjQ7XG4gIHRbMjc4XSA9IDMyODtcbiAgdFsyODRdID0gMzQ1O1xuICB0WzI4NV0gPSAzNDY7XG4gIHRbMjg2XSA9IDM0NztcbiAgdFsyOTJdID0gMzY3O1xuICB0WzI5NV0gPSAzNzc7XG4gIHRbMjk2XSA9IDM3ODtcbiAgdFsyOThdID0gMzgwO1xuICB0WzMwNV0gPSA5NjM7XG4gIHRbMzA2XSA9IDk2NDtcbiAgdFszMDddID0gOTY2O1xuICB0WzMwOF0gPSA4MjE1O1xuICB0WzMwOV0gPSA4MjUyO1xuICB0WzMxMF0gPSA4MzE5O1xuICB0WzMxMV0gPSA4MzU5O1xuICB0WzMxMl0gPSA4NTkyO1xuICB0WzMxM10gPSA4NTkzO1xuICB0WzMzN10gPSA5NTUyO1xuICB0WzQ5M10gPSAxMDM5O1xuICB0WzQ5NF0gPSAxMDQwO1xuICB0WzcwNV0gPSAxNTI0O1xuICB0WzcwNl0gPSA4MzYyO1xuICB0WzcxMF0gPSA2NDI4ODtcbiAgdFs3MTFdID0gNjQyOTg7XG4gIHRbNzU5XSA9IDE2MTc7XG4gIHRbNzYxXSA9IDE3NzY7XG4gIHRbNzYzXSA9IDE3Nzg7XG4gIHRbNzc1XSA9IDE2NTI7XG4gIHRbNzc3XSA9IDE3NjQ7XG4gIHRbNzc4XSA9IDE3ODA7XG4gIHRbNzc5XSA9IDE3ODE7XG4gIHRbNzgwXSA9IDE3ODI7XG4gIHRbNzgyXSA9IDc3MTtcbiAgdFs3ODNdID0gNjQ3MjY7XG4gIHRbNzg2XSA9IDgzNjM7XG4gIHRbNzg4XSA9IDg1MzI7XG4gIHRbNzkwXSA9IDc2ODtcbiAgdFs3OTFdID0gNzY5O1xuICB0Wzc5Ml0gPSA3Njg7XG4gIHRbNzk1XSA9IDgwMztcbiAgdFs3OTddID0gNjQzMzY7XG4gIHRbNzk4XSA9IDY0MzM3O1xuICB0Wzc5OV0gPSA2NDM0MjtcbiAgdFs4MDBdID0gNjQzNDM7XG4gIHRbODAxXSA9IDY0MzQ0O1xuICB0WzgwMl0gPSA2NDM0NTtcbiAgdFs4MDNdID0gNjQzNjI7XG4gIHRbODA0XSA9IDY0MzYzO1xuICB0WzgwNV0gPSA2NDM2NDtcbiAgdFsyNDI0XSA9IDc4MjE7XG4gIHRbMjQyNV0gPSA3ODIyO1xuICB0WzI0MjZdID0gNzgyMztcbiAgdFsyNDI3XSA9IDc4MjQ7XG4gIHRbMjQyOF0gPSA3ODI1O1xuICB0WzI0MjldID0gNzgyNjtcbiAgdFsyNDMwXSA9IDc4Mjc7XG4gIHRbMjQzM10gPSA3NjgyO1xuICB0WzI2NzhdID0gODA0NTtcbiAgdFsyNjc5XSA9IDgwNDY7XG4gIHRbMjgzMF0gPSAxNTUyO1xuICB0WzI4MzhdID0gNjg2O1xuICB0WzI4NDBdID0gNzUxO1xuICB0WzI4NDJdID0gNzUzO1xuICB0WzI4NDNdID0gNzU0O1xuICB0WzI4NDRdID0gNzU1O1xuICB0WzI4NDZdID0gNzU3O1xuICB0WzI4NTZdID0gNzY3O1xuICB0WzI4NTddID0gODQ4O1xuICB0WzI4NThdID0gODQ5O1xuICB0WzI4NjJdID0gODUzO1xuICB0WzI4NjNdID0gODU0O1xuICB0WzI4NjRdID0gODU1O1xuICB0WzI4NjVdID0gODYxO1xuICB0WzI4NjZdID0gODYyO1xuICB0WzI5MDZdID0gNzQ2MDtcbiAgdFsyOTA4XSA9IDc0NjI7XG4gIHRbMjkwOV0gPSA3NDYzO1xuICB0WzI5MTBdID0gNzQ2NDtcbiAgdFsyOTEyXSA9IDc0NjY7XG4gIHRbMjkxM10gPSA3NDY3O1xuICB0WzI5MTRdID0gNzQ2ODtcbiAgdFsyOTE2XSA9IDc0NzA7XG4gIHRbMjkxN10gPSA3NDcxO1xuICB0WzI5MThdID0gNzQ3MjtcbiAgdFsyOTIwXSA9IDc0NzQ7XG4gIHRbMjkyMV0gPSA3NDc1O1xuICB0WzI5MjJdID0gNzQ3NjtcbiAgdFsyOTI0XSA9IDc0Nzg7XG4gIHRbMjkyNV0gPSA3NDc5O1xuICB0WzI5MjZdID0gNzQ4MDtcbiAgdFsyOTI4XSA9IDc0ODI7XG4gIHRbMjkyOV0gPSA3NDgzO1xuICB0WzI5MzBdID0gNzQ4NDtcbiAgdFsyOTMyXSA9IDc0ODY7XG4gIHRbMjkzM10gPSA3NDg3O1xuICB0WzI5MzRdID0gNzQ4ODtcbiAgdFsyOTM2XSA9IDc0OTA7XG4gIHRbMjkzN10gPSA3NDkxO1xuICB0WzI5MzhdID0gNzQ5MjtcbiAgdFsyOTQwXSA9IDc0OTQ7XG4gIHRbMjk0MV0gPSA3NDk1O1xuICB0WzI5NDJdID0gNzQ5NjtcbiAgdFsyOTQ0XSA9IDc0OTg7XG4gIHRbMjk0Nl0gPSA3NTAwO1xuICB0WzI5NDhdID0gNzUwMjtcbiAgdFsyOTUwXSA9IDc1MDQ7XG4gIHRbMjk1MV0gPSA3NTA1O1xuICB0WzI5NTJdID0gNzUwNjtcbiAgdFsyOTU0XSA9IDc1MDg7XG4gIHRbMjk1NV0gPSA3NTA5O1xuICB0WzI5NTZdID0gNzUxMDtcbiAgdFsyOTU4XSA9IDc1MTI7XG4gIHRbMjk1OV0gPSA3NTEzO1xuICB0WzI5NjBdID0gNzUxNDtcbiAgdFsyOTYyXSA9IDc1MTY7XG4gIHRbMjk2M10gPSA3NTE3O1xuICB0WzI5NjRdID0gNzUxODtcbiAgdFsyOTY2XSA9IDc1MjA7XG4gIHRbMjk2N10gPSA3NTIxO1xuICB0WzI5NjhdID0gNzUyMjtcbiAgdFsyOTcwXSA9IDc1MjQ7XG4gIHRbMjk3MV0gPSA3NTI1O1xuICB0WzI5NzJdID0gNzUyNjtcbiAgdFsyOTc0XSA9IDc1Mjg7XG4gIHRbMjk3NV0gPSA3NTI5O1xuICB0WzI5NzZdID0gNzUzMDtcbiAgdFsyOTc4XSA9IDE1Mzc7XG4gIHRbMjk3OV0gPSAxNTM4O1xuICB0WzI5ODBdID0gMTUzOTtcbiAgdFsyOTgyXSA9IDE1NDk7XG4gIHRbMjk4M10gPSAxNTUxO1xuICB0WzI5ODRdID0gMTU1MjtcbiAgdFsyOTg2XSA9IDE1NTQ7XG4gIHRbMjk4N10gPSAxNTU1O1xuICB0WzI5ODhdID0gMTU1NjtcbiAgdFsyOTkwXSA9IDE2MjM7XG4gIHRbMjk5MV0gPSAxNjI0O1xuICB0WzI5OTVdID0gMTc3NTtcbiAgdFsyOTk5XSA9IDE3OTE7XG4gIHRbMzAwMl0gPSA2NDI5MDtcbiAgdFszMDAzXSA9IDY0MjkxO1xuICB0WzMwMDRdID0gNjQyOTI7XG4gIHRbMzAwNl0gPSA2NDI5NDtcbiAgdFszMDA3XSA9IDY0Mjk1O1xuICB0WzMwMDhdID0gNjQyOTY7XG4gIHRbMzAxMV0gPSAxOTAwO1xuICB0WzMwMTRdID0gODIyMztcbiAgdFszMDE1XSA9IDgyNDQ7XG4gIHRbMzAxN10gPSA3NTMyO1xuICB0WzMwMThdID0gNzUzMztcbiAgdFszMDE5XSA9IDc1MzQ7XG4gIHRbMzA3NV0gPSA3NTkwO1xuICB0WzMwNzZdID0gNzU5MTtcbiAgdFszMDc5XSA9IDc1OTQ7XG4gIHRbMzA4MF0gPSA3NTk1O1xuICB0WzMwODNdID0gNzU5ODtcbiAgdFszMDg0XSA9IDc1OTk7XG4gIHRbMzA4N10gPSA3NjAyO1xuICB0WzMwODhdID0gNzYwMztcbiAgdFszMDkxXSA9IDc2MDY7XG4gIHRbMzA5Ml0gPSA3NjA3O1xuICB0WzMwOTVdID0gNzYxMDtcbiAgdFszMDk2XSA9IDc2MTE7XG4gIHRbMzA5OV0gPSA3NjE0O1xuICB0WzMxMDBdID0gNzYxNTtcbiAgdFszMTAzXSA9IDc2MTg7XG4gIHRbMzEwNF0gPSA3NjE5O1xuICB0WzMxMDddID0gODMzNztcbiAgdFszMTA4XSA9IDgzMzg7XG4gIHRbMzExNl0gPSAxODg0O1xuICB0WzMxMTldID0gMTg4NTtcbiAgdFszMTIwXSA9IDE4ODU7XG4gIHRbMzEyM10gPSAxODg2O1xuICB0WzMxMjRdID0gMTg4NjtcbiAgdFszMTI3XSA9IDE4ODc7XG4gIHRbMzEyOF0gPSAxODg3O1xuICB0WzMxMzFdID0gMTg4ODtcbiAgdFszMTMyXSA9IDE4ODg7XG4gIHRbMzEzNV0gPSAxODg5O1xuICB0WzMxMzZdID0gMTg4OTtcbiAgdFszMTM5XSA9IDE4OTA7XG4gIHRbMzE0MF0gPSAxODkwO1xuICB0WzMxNDNdID0gMTg5MTtcbiAgdFszMTQ0XSA9IDE4OTE7XG4gIHRbMzE0N10gPSAxODkyO1xuICB0WzMxNDhdID0gMTg5MjtcbiAgdFszMTUzXSA9IDU4MDtcbiAgdFszMTU0XSA9IDU4MTtcbiAgdFszMTU3XSA9IDU4NDtcbiAgdFszMTU4XSA9IDU4NTtcbiAgdFszMTYxXSA9IDU4ODtcbiAgdFszMTYyXSA9IDU4OTtcbiAgdFszMTY1XSA9IDg5MTtcbiAgdFszMTY2XSA9IDg5MjtcbiAgdFszMTY5XSA9IDEyNzQ7XG4gIHRbMzE3MF0gPSAxMjc1O1xuICB0WzMxNzNdID0gMTI3ODtcbiAgdFszMTc0XSA9IDEyNzk7XG4gIHRbMzE4MV0gPSA3NjIyO1xuICB0WzMxODJdID0gNzYyMztcbiAgdFszMjgyXSA9IDExNzk5O1xuICB0WzMzMTZdID0gNTc4O1xuICB0WzMzNzldID0gNDI3ODU7XG4gIHRbMzM5M10gPSAxMTU5O1xuICB0WzM0MTZdID0gODM3Nztcbn0pO1xuZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM7XG5jb25zdCBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzIyN10gPSAzMjI7XG4gIHRbMjY0XSA9IDI2MTtcbiAgdFsyOTFdID0gMzQ2O1xufSk7XG5leHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaztcbmNvbnN0IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbMV0gPSAzMjtcbiAgdFs0XSA9IDY1O1xuICB0WzE3XSA9IDY2O1xuICB0WzE4XSA9IDY3O1xuICB0WzI0XSA9IDY4O1xuICB0WzI4XSA9IDY5O1xuICB0WzM4XSA9IDcwO1xuICB0WzM5XSA9IDcxO1xuICB0WzQ0XSA9IDcyO1xuICB0WzQ3XSA9IDczO1xuICB0WzU4XSA9IDc0O1xuICB0WzYwXSA9IDc1O1xuICB0WzYyXSA9IDc2O1xuICB0WzY4XSA9IDc3O1xuICB0WzY5XSA9IDc4O1xuICB0Wzc1XSA9IDc5O1xuICB0Wzg3XSA9IDgwO1xuICB0Wzg5XSA9IDgxO1xuICB0WzkwXSA9IDgyO1xuICB0Wzk0XSA9IDgzO1xuICB0WzEwMF0gPSA4NDtcbiAgdFsxMDRdID0gODU7XG4gIHRbMTE1XSA9IDg2O1xuICB0WzExNl0gPSA4NztcbiAgdFsxMjFdID0gODg7XG4gIHRbMTIyXSA9IDg5O1xuICB0WzEyN10gPSA5MDtcbiAgdFsyNThdID0gOTc7XG4gIHRbMjY4XSA9IDI2MTtcbiAgdFsyNzFdID0gOTg7XG4gIHRbMjcyXSA9IDk5O1xuICB0WzI3M10gPSAyNjM7XG4gIHRbMjgyXSA9IDEwMDtcbiAgdFsyODZdID0gMTAxO1xuICB0WzI5NV0gPSAyODE7XG4gIHRbMjk2XSA9IDEwMjtcbiAgdFszMzZdID0gMTAzO1xuICB0WzM0Nl0gPSAxMDQ7XG4gIHRbMzQ5XSA9IDEwNTtcbiAgdFszNjFdID0gMTA2O1xuICB0WzM2NF0gPSAxMDc7XG4gIHRbMzY3XSA9IDEwODtcbiAgdFszNzFdID0gMzIyO1xuICB0WzM3M10gPSAxMDk7XG4gIHRbMzc0XSA9IDExMDtcbiAgdFszODFdID0gMTExO1xuICB0WzM4M10gPSAyNDM7XG4gIHRbMzkzXSA9IDExMjtcbiAgdFszOTVdID0gMTEzO1xuICB0WzM5Nl0gPSAxMTQ7XG4gIHRbNDAwXSA9IDExNTtcbiAgdFs0MDFdID0gMzQ3O1xuICB0WzQxMF0gPSAxMTY7XG4gIHRbNDM3XSA9IDExNztcbiAgdFs0NDhdID0gMTE4O1xuICB0WzQ0OV0gPSAxMTk7XG4gIHRbNDU0XSA9IDEyMDtcbiAgdFs0NTVdID0gMTIxO1xuICB0WzQ2MF0gPSAxMjI7XG4gIHRbNDYzXSA9IDM4MDtcbiAgdFs4NTNdID0gNDQ7XG4gIHRbODU1XSA9IDU4O1xuICB0Wzg1Nl0gPSA0NjtcbiAgdFs4NzZdID0gNDc7XG4gIHRbODc4XSA9IDQ1O1xuICB0Wzg4Ml0gPSA0NTtcbiAgdFs4OTRdID0gNDA7XG4gIHRbODk1XSA9IDQxO1xuICB0Wzg5Nl0gPSA5MTtcbiAgdFs4OTddID0gOTM7XG4gIHRbOTIzXSA9IDY0O1xuICB0WzEwMDRdID0gNDg7XG4gIHRbMTAwNV0gPSA0OTtcbiAgdFsxMDA2XSA9IDUwO1xuICB0WzEwMDddID0gNTE7XG4gIHRbMTAwOF0gPSA1MjtcbiAgdFsxMDA5XSA9IDUzO1xuICB0WzEwMTBdID0gNTQ7XG4gIHRbMTAxMV0gPSA1NTtcbiAgdFsxMDEyXSA9IDU2O1xuICB0WzEwMTNdID0gNTc7XG4gIHRbMTA4MV0gPSAzNztcbiAgdFsxMDg1XSA9IDQzO1xuICB0WzEwODZdID0gNDU7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpO1xuXG4vKioqLyB9KSxcbi8qIDM2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cbnZhciBnZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpLmdldExvb2t1cFRhYmxlRmFjdG9yeTtcbnZhciBnZXRTcGVjaWFsUFVBU3ltYm9scyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuIHRbNjM3MjFdID0gMHgwMGE5O1xuIHRbNjMxOTNdID0gMHgwMGE5O1xuIHRbNjM3MjBdID0gMHgwMGFlO1xuIHRbNjMxOTRdID0gMHgwMGFlO1xuIHRbNjM3MjJdID0gMHgyMTIyO1xuIHRbNjMxOTVdID0gMHgyMTIyO1xuIHRbNjM3MjldID0gMHgyM2E3O1xuIHRbNjM3MzBdID0gMHgyM2E4O1xuIHRbNjM3MzFdID0gMHgyM2E5O1xuIHRbNjM3NDBdID0gMHgyM2FiO1xuIHRbNjM3NDFdID0gMHgyM2FjO1xuIHRbNjM3NDJdID0gMHgyM2FkO1xuIHRbNjM3MjZdID0gMHgyM2ExO1xuIHRbNjM3MjddID0gMHgyM2EyO1xuIHRbNjM3MjhdID0gMHgyM2EzO1xuIHRbNjM3MzddID0gMHgyM2E0O1xuIHRbNjM3MzhdID0gMHgyM2E1O1xuIHRbNjM3MzldID0gMHgyM2E2O1xuIHRbNjM3MjNdID0gMHgyMzliO1xuIHRbNjM3MjRdID0gMHgyMzljO1xuIHRbNjM3MjVdID0gMHgyMzlkO1xuIHRbNjM3MzRdID0gMHgyMzllO1xuIHRbNjM3MzVdID0gMHgyMzlmO1xuIHRbNjM3MzZdID0gMHgyM2EwO1xufSk7XG5mdW5jdGlvbiBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcyhjb2RlKSB7XG4gaWYgKGNvZGUgPj0gMHhmZmYwICYmIGNvZGUgPD0gMHhmZmZmKSB7XG4gIHJldHVybiAwO1xuIH0gZWxzZSBpZiAoY29kZSA+PSAweGY2MDAgJiYgY29kZSA8PSAweGY4ZmYpIHtcbiAgcmV0dXJuIGdldFNwZWNpYWxQVUFTeW1ib2xzKClbY29kZV0gfHwgY29kZTtcbiB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MDBhZCkge1xuICByZXR1cm4gMHgwMDJkO1xuIH1cbiByZXR1cm4gY29kZTtcbn1cbmZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7XG4gdmFyIHVuaWNvZGUgPSBnbHlwaHNVbmljb2RlTWFwW25hbWVdO1xuIGlmICh1bmljb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHVuaWNvZGU7XG4gfVxuIGlmICghbmFtZSkge1xuICByZXR1cm4gLTE7XG4gfVxuIGlmIChuYW1lWzBdID09PSBcInVcIikge1xuICB2YXIgbmFtZUxlbiA9IG5hbWUubGVuZ3RoLCBoZXhTdHI7XG4gIGlmIChuYW1lTGVuID09PSA3ICYmIG5hbWVbMV0gPT09IFwiblwiICYmIG5hbWVbMl0gPT09IFwiaVwiKSB7XG4gICBoZXhTdHIgPSBuYW1lLnN1YnN0cmluZygzKTtcbiAgfSBlbHNlIGlmIChuYW1lTGVuID49IDUgJiYgbmFtZUxlbiA8PSA3KSB7XG4gICBoZXhTdHIgPSBuYW1lLnN1YnN0cmluZygxKTtcbiAgfSBlbHNlIHtcbiAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoaGV4U3RyID09PSBoZXhTdHIudG9VcHBlckNhc2UoKSkge1xuICAgdW5pY29kZSA9IHBhcnNlSW50KGhleFN0ciwgMTYpO1xuICAgaWYgKHVuaWNvZGUgPj0gMCkge1xuICAgIHJldHVybiB1bmljb2RlO1xuICAgfVxuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbnZhciBVbmljb2RlUmFuZ2VzID0gW1xuIHtcbiAgYmVnaW46IDB4MDAwMCxcbiAgZW5kOiAweDAwN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDA4MCxcbiAgZW5kOiAweDAwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDEwMCxcbiAgZW5kOiAweDAxN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDE4MCxcbiAgZW5kOiAweDAyNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDI1MCxcbiAgZW5kOiAweDAyYWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDJiMCxcbiAgZW5kOiAweDAyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDMwMCxcbiAgZW5kOiAweDAzNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDM3MCxcbiAgZW5kOiAweDAzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MmM4MCxcbiAgZW5kOiAweDJjZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDQwMCxcbiAgZW5kOiAweDA0ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDUzMCxcbiAgZW5kOiAweDA1OGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDU5MCxcbiAgZW5kOiAweDA1ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTUwMCxcbiAgZW5kOiAweGE2M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDYwMCxcbiAgZW5kOiAweDA2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDdjMCxcbiAgZW5kOiAweDA3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDkwMCxcbiAgZW5kOiAweDA5N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDk4MCxcbiAgZW5kOiAweDA5ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGEwMCxcbiAgZW5kOiAweDBhN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGE4MCxcbiAgZW5kOiAweDBhZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGIwMCxcbiAgZW5kOiAweDBiN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGI4MCxcbiAgZW5kOiAweDBiZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGMwMCxcbiAgZW5kOiAweDBjN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGM4MCxcbiAgZW5kOiAweDBjZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGQwMCxcbiAgZW5kOiAweDBkN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGUwMCxcbiAgZW5kOiAweDBlN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGU4MCxcbiAgZW5kOiAweDBlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTBhMCxcbiAgZW5kOiAweDEwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWIwMCxcbiAgZW5kOiAweDFiN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTEwMCxcbiAgZW5kOiAweDExZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWUwMCxcbiAgZW5kOiAweDFlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWYwMCxcbiAgZW5kOiAweDFmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjAwMCxcbiAgZW5kOiAweDIwNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjA3MCxcbiAgZW5kOiAweDIwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjBhMCxcbiAgZW5kOiAweDIwY2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjBkMCxcbiAgZW5kOiAweDIwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjEwMCxcbiAgZW5kOiAweDIxNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjE1MCxcbiAgZW5kOiAweDIxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjE5MCxcbiAgZW5kOiAweDIxZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjIwMCxcbiAgZW5kOiAweDIyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjMwMCxcbiAgZW5kOiAweDIzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQwMCxcbiAgZW5kOiAweDI0M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQ0MCxcbiAgZW5kOiAweDI0NWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjQ2MCxcbiAgZW5kOiAweDI0ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjUwMCxcbiAgZW5kOiAweDI1N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjU4MCxcbiAgZW5kOiAweDI1OWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjVhMCxcbiAgZW5kOiAweDI1ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjYwMCxcbiAgZW5kOiAweDI2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjcwMCxcbiAgZW5kOiAweDI3YmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzAwMCxcbiAgZW5kOiAweDMwM2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzA0MCxcbiAgZW5kOiAweDMwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzBhMCxcbiAgZW5kOiAweDMwZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzEwMCxcbiAgZW5kOiAweDMxMmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzEzMCxcbiAgZW5kOiAweDMxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTg0MCxcbiAgZW5kOiAweGE4N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzIwMCxcbiAgZW5kOiAweDMyZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzMwMCxcbiAgZW5kOiAweDMzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YWMwMCxcbiAgZW5kOiAweGQ3YWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZDgwMCxcbiAgZW5kOiAweGRmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA5MDAsXG4gIGVuZDogMHgxMDkxZlxuIH0sXG4ge1xuICBiZWdpbjogMHg0ZTAwLFxuICBlbmQ6IDB4OWZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhlMDAwLFxuICBlbmQ6IDB4ZjhmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgzMWMwLFxuICBlbmQ6IDB4MzFlZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmYjAwLFxuICBlbmQ6IDB4ZmI0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmYjUwLFxuICBlbmQ6IDB4ZmRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTIwLFxuICBlbmQ6IDB4ZmUyZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTEwLFxuICBlbmQ6IDB4ZmUxZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTUwLFxuICBlbmQ6IDB4ZmU2ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTcwLFxuICBlbmQ6IDB4ZmVmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZjAwLFxuICBlbmQ6IDB4ZmZlZlxuIH0sXG4ge1xuICBiZWdpbjogMHhmZmYwLFxuICBlbmQ6IDB4ZmZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwZjAwLFxuICBlbmQ6IDB4MGZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwNzAwLFxuICBlbmQ6IDB4MDc0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwNzgwLFxuICBlbmQ6IDB4MDdiZlxuIH0sXG4ge1xuICBiZWdpbjogMHgwZDgwLFxuICBlbmQ6IDB4MGRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDAwLFxuICBlbmQ6IDB4MTA5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMjAwLFxuICBlbmQ6IDB4MTM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxM2EwLFxuICBlbmQ6IDB4MTNmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNDAwLFxuICBlbmQ6IDB4MTY3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNjgwLFxuICBlbmQ6IDB4MTY5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNmEwLFxuICBlbmQ6IDB4MTZmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNzgwLFxuICBlbmQ6IDB4MTdmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxODAwLFxuICBlbmQ6IDB4MThhZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyODAwLFxuICBlbmQ6IDB4MjhmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhMDAwLFxuICBlbmQ6IDB4YTQ4ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxNzAwLFxuICBlbmQ6IDB4MTcxZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDMwMCxcbiAgZW5kOiAweDEwMzJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMzMwLFxuICBlbmQ6IDB4MTAzNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0MDAsXG4gIGVuZDogMHgxMDQ0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDAwMCxcbiAgZW5kOiAweDFkMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFkNDAwLFxuICBlbmQ6IDB4MWQ3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmYwMDAsXG4gIGVuZDogMHhmZmZmZFxuIH0sXG4ge1xuICBiZWdpbjogMHhmZTAwLFxuICBlbmQ6IDB4ZmUwZlxuIH0sXG4ge1xuICBiZWdpbjogMHhlMDAwMCxcbiAgZW5kOiAweGUwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5MDAsXG4gIGVuZDogMHgxOTRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5NTAsXG4gIGVuZDogMHgxOTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDE5ODAsXG4gIGVuZDogMHgxOWRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFhMDAsXG4gIGVuZDogMHgxYTFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJjMDAsXG4gIGVuZDogMHgyYzVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJkMzAsXG4gIGVuZDogMHgyZDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDRkYzAsXG4gIGVuZDogMHg0ZGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE4MDAsXG4gIGVuZDogMHhhODJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMDAwLFxuICBlbmQ6IDB4MTAwN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAxNDAsXG4gIGVuZDogMHgxMDE4ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDM4MCxcbiAgZW5kOiAweDEwMzlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwM2EwLFxuICBlbmQ6IDB4MTAzZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0NTAsXG4gIGVuZDogMHgxMDQ3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDQ4MCxcbiAgZW5kOiAweDEwNGFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwODAwLFxuICBlbmQ6IDB4MTA4M2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTBhMDAsXG4gIGVuZDogMHgxMGE1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDMwMCxcbiAgZW5kOiAweDFkMzVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEyMDAwLFxuICBlbmQ6IDB4MTIzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQzNjAsXG4gIGVuZDogMHgxZDM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYjgwLFxuICBlbmQ6IDB4MWJiZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYzAwLFxuICBlbmQ6IDB4MWM0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYzUwLFxuICBlbmQ6IDB4MWM3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhODgwLFxuICBlbmQ6IDB4YThkZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhOTAwLFxuICBlbmQ6IDB4YTkyZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhOTMwLFxuICBlbmQ6IDB4YTk1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhYTAwLFxuICBlbmQ6IDB4YWE1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDE5MCxcbiAgZW5kOiAweDEwMWNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMWQwLFxuICBlbmQ6IDB4MTAxZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAyYTAsXG4gIGVuZDogMHgxMDJkZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZjAzMCxcbiAgZW5kOiAweDFmMDlmXG4gfVxuXTtcbmZ1bmN0aW9uIGdldFVuaWNvZGVSYW5nZUZvcih2YWx1ZSkge1xuIGZvciAodmFyIGkgPSAwLCBpaSA9IFVuaWNvZGVSYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgIHJldHVybiBpO1xuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGlzUlRMUmFuZ2VGb3IodmFsdWUpIHtcbiB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzWzEzXTtcbiBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgcmV0dXJuIHRydWU7XG4gfVxuIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gIHJldHVybiB0cnVlO1xuIH1cbiByZXR1cm4gZmFsc2U7XG59XG52YXIgZ2V0Tm9ybWFsaXplZFVuaWNvZGVzID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gdFtcIlxcdTAwQThcIl0gPSBcIlxcdTAwMjBcXHUwMzA4XCI7XG4gdFtcIlxcdTAwQUZcIl0gPSBcIlxcdTAwMjBcXHUwMzA0XCI7XG4gdFtcIlxcdTAwQjRcIl0gPSBcIlxcdTAwMjBcXHUwMzAxXCI7XG4gdFtcIlxcdTAwQjVcIl0gPSBcIlxcdTAzQkNcIjtcbiB0W1wiXFx1MDBCOFwiXSA9IFwiXFx1MDAyMFxcdTAzMjdcIjtcbiB0W1wiXFx1MDEzMlwiXSA9IFwiXFx1MDA0OVxcdTAwNEFcIjtcbiB0W1wiXFx1MDEzM1wiXSA9IFwiXFx1MDA2OVxcdTAwNkFcIjtcbiB0W1wiXFx1MDEzRlwiXSA9IFwiXFx1MDA0Q1xcdTAwQjdcIjtcbiB0W1wiXFx1MDE0MFwiXSA9IFwiXFx1MDA2Q1xcdTAwQjdcIjtcbiB0W1wiXFx1MDE0OVwiXSA9IFwiXFx1MDJCQ1xcdTAwNkVcIjtcbiB0W1wiXFx1MDE3RlwiXSA9IFwiXFx1MDA3M1wiO1xuIHRbXCJcXHUwMUM0XCJdID0gXCJcXHUwMDQ0XFx1MDE3RFwiO1xuIHRbXCJcXHUwMUM1XCJdID0gXCJcXHUwMDQ0XFx1MDE3RVwiO1xuIHRbXCJcXHUwMUM2XCJdID0gXCJcXHUwMDY0XFx1MDE3RVwiO1xuIHRbXCJcXHUwMUM3XCJdID0gXCJcXHUwMDRDXFx1MDA0QVwiO1xuIHRbXCJcXHUwMUM4XCJdID0gXCJcXHUwMDRDXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUM5XCJdID0gXCJcXHUwMDZDXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUNBXCJdID0gXCJcXHUwMDRFXFx1MDA0QVwiO1xuIHRbXCJcXHUwMUNCXCJdID0gXCJcXHUwMDRFXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUNDXCJdID0gXCJcXHUwMDZFXFx1MDA2QVwiO1xuIHRbXCJcXHUwMUYxXCJdID0gXCJcXHUwMDQ0XFx1MDA1QVwiO1xuIHRbXCJcXHUwMUYyXCJdID0gXCJcXHUwMDQ0XFx1MDA3QVwiO1xuIHRbXCJcXHUwMUYzXCJdID0gXCJcXHUwMDY0XFx1MDA3QVwiO1xuIHRbXCJcXHUwMkQ4XCJdID0gXCJcXHUwMDIwXFx1MDMwNlwiO1xuIHRbXCJcXHUwMkQ5XCJdID0gXCJcXHUwMDIwXFx1MDMwN1wiO1xuIHRbXCJcXHUwMkRBXCJdID0gXCJcXHUwMDIwXFx1MDMwQVwiO1xuIHRbXCJcXHUwMkRCXCJdID0gXCJcXHUwMDIwXFx1MDMyOFwiO1xuIHRbXCJcXHUwMkRDXCJdID0gXCJcXHUwMDIwXFx1MDMwM1wiO1xuIHRbXCJcXHUwMkREXCJdID0gXCJcXHUwMDIwXFx1MDMwQlwiO1xuIHRbXCJcXHUwMzdBXCJdID0gXCJcXHUwMDIwXFx1MDM0NVwiO1xuIHRbXCJcXHUwMzg0XCJdID0gXCJcXHUwMDIwXFx1MDMwMVwiO1xuIHRbXCJcXHUwM0QwXCJdID0gXCJcXHUwM0IyXCI7XG4gdFtcIlxcdTAzRDFcIl0gPSBcIlxcdTAzQjhcIjtcbiB0W1wiXFx1MDNEMlwiXSA9IFwiXFx1MDNBNVwiO1xuIHRbXCJcXHUwM0Q1XCJdID0gXCJcXHUwM0M2XCI7XG4gdFtcIlxcdTAzRDZcIl0gPSBcIlxcdTAzQzBcIjtcbiB0W1wiXFx1MDNGMFwiXSA9IFwiXFx1MDNCQVwiO1xuIHRbXCJcXHUwM0YxXCJdID0gXCJcXHUwM0MxXCI7XG4gdFtcIlxcdTAzRjJcIl0gPSBcIlxcdTAzQzJcIjtcbiB0W1wiXFx1MDNGNFwiXSA9IFwiXFx1MDM5OFwiO1xuIHRbXCJcXHUwM0Y1XCJdID0gXCJcXHUwM0I1XCI7XG4gdFtcIlxcdTAzRjlcIl0gPSBcIlxcdTAzQTNcIjtcbiB0W1wiXFx1MDU4N1wiXSA9IFwiXFx1MDU2NVxcdTA1ODJcIjtcbiB0W1wiXFx1MDY3NVwiXSA9IFwiXFx1MDYyN1xcdTA2NzRcIjtcbiB0W1wiXFx1MDY3NlwiXSA9IFwiXFx1MDY0OFxcdTA2NzRcIjtcbiB0W1wiXFx1MDY3N1wiXSA9IFwiXFx1MDZDN1xcdTA2NzRcIjtcbiB0W1wiXFx1MDY3OFwiXSA9IFwiXFx1MDY0QVxcdTA2NzRcIjtcbiB0W1wiXFx1MEUzM1wiXSA9IFwiXFx1MEU0RFxcdTBFMzJcIjtcbiB0W1wiXFx1MEVCM1wiXSA9IFwiXFx1MEVDRFxcdTBFQjJcIjtcbiB0W1wiXFx1MEVEQ1wiXSA9IFwiXFx1MEVBQlxcdTBFOTlcIjtcbiB0W1wiXFx1MEVERFwiXSA9IFwiXFx1MEVBQlxcdTBFQTFcIjtcbiB0W1wiXFx1MEY3N1wiXSA9IFwiXFx1MEZCMlxcdTBGODFcIjtcbiB0W1wiXFx1MEY3OVwiXSA9IFwiXFx1MEZCM1xcdTBGODFcIjtcbiB0W1wiXFx1MUU5QVwiXSA9IFwiXFx1MDA2MVxcdTAyQkVcIjtcbiB0W1wiXFx1MUZCRFwiXSA9IFwiXFx1MDAyMFxcdTAzMTNcIjtcbiB0W1wiXFx1MUZCRlwiXSA9IFwiXFx1MDAyMFxcdTAzMTNcIjtcbiB0W1wiXFx1MUZDMFwiXSA9IFwiXFx1MDAyMFxcdTAzNDJcIjtcbiB0W1wiXFx1MUZGRVwiXSA9IFwiXFx1MDAyMFxcdTAzMTRcIjtcbiB0W1wiXFx1MjAwMlwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDAzXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMDRcIl0gPSBcIlxcdTAwMjBcIjtcbiB0W1wiXFx1MjAwNVwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDA2XCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMDhcIl0gPSBcIlxcdTAwMjBcIjtcbiB0W1wiXFx1MjAwOVwiXSA9IFwiXFx1MDAyMFwiO1xuIHRbXCJcXHUyMDBBXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwMTdcIl0gPSBcIlxcdTAwMjBcXHUwMzMzXCI7XG4gdFtcIlxcdTIwMjRcIl0gPSBcIlxcdTAwMkVcIjtcbiB0W1wiXFx1MjAyNVwiXSA9IFwiXFx1MDAyRVxcdTAwMkVcIjtcbiB0W1wiXFx1MjAyNlwiXSA9IFwiXFx1MDAyRVxcdTAwMkVcXHUwMDJFXCI7XG4gdFtcIlxcdTIwMzNcIl0gPSBcIlxcdTIwMzJcXHUyMDMyXCI7XG4gdFtcIlxcdTIwMzRcIl0gPSBcIlxcdTIwMzJcXHUyMDMyXFx1MjAzMlwiO1xuIHRbXCJcXHUyMDM2XCJdID0gXCJcXHUyMDM1XFx1MjAzNVwiO1xuIHRbXCJcXHUyMDM3XCJdID0gXCJcXHUyMDM1XFx1MjAzNVxcdTIwMzVcIjtcbiB0W1wiXFx1MjAzQ1wiXSA9IFwiXFx1MDAyMVxcdTAwMjFcIjtcbiB0W1wiXFx1MjAzRVwiXSA9IFwiXFx1MDAyMFxcdTAzMDVcIjtcbiB0W1wiXFx1MjA0N1wiXSA9IFwiXFx1MDAzRlxcdTAwM0ZcIjtcbiB0W1wiXFx1MjA0OFwiXSA9IFwiXFx1MDAzRlxcdTAwMjFcIjtcbiB0W1wiXFx1MjA0OVwiXSA9IFwiXFx1MDAyMVxcdTAwM0ZcIjtcbiB0W1wiXFx1MjA1N1wiXSA9IFwiXFx1MjAzMlxcdTIwMzJcXHUyMDMyXFx1MjAzMlwiO1xuIHRbXCJcXHUyMDVGXCJdID0gXCJcXHUwMDIwXCI7XG4gdFtcIlxcdTIwQThcIl0gPSBcIlxcdTAwNTJcXHUwMDczXCI7XG4gdFtcIlxcdTIxMDBcIl0gPSBcIlxcdTAwNjFcXHUwMDJGXFx1MDA2M1wiO1xuIHRbXCJcXHUyMTAxXCJdID0gXCJcXHUwMDYxXFx1MDAyRlxcdTAwNzNcIjtcbiB0W1wiXFx1MjEwM1wiXSA9IFwiXFx1MDBCMFxcdTAwNDNcIjtcbiB0W1wiXFx1MjEwNVwiXSA9IFwiXFx1MDA2M1xcdTAwMkZcXHUwMDZGXCI7XG4gdFtcIlxcdTIxMDZcIl0gPSBcIlxcdTAwNjNcXHUwMDJGXFx1MDA3NVwiO1xuIHRbXCJcXHUyMTA3XCJdID0gXCJcXHUwMTkwXCI7XG4gdFtcIlxcdTIxMDlcIl0gPSBcIlxcdTAwQjBcXHUwMDQ2XCI7XG4gdFtcIlxcdTIxMTZcIl0gPSBcIlxcdTAwNEVcXHUwMDZGXCI7XG4gdFtcIlxcdTIxMjFcIl0gPSBcIlxcdTAwNTRcXHUwMDQ1XFx1MDA0Q1wiO1xuIHRbXCJcXHUyMTM1XCJdID0gXCJcXHUwNUQwXCI7XG4gdFtcIlxcdTIxMzZcIl0gPSBcIlxcdTA1RDFcIjtcbiB0W1wiXFx1MjEzN1wiXSA9IFwiXFx1MDVEMlwiO1xuIHRbXCJcXHUyMTM4XCJdID0gXCJcXHUwNUQzXCI7XG4gdFtcIlxcdTIxM0JcIl0gPSBcIlxcdTAwNDZcXHUwMDQxXFx1MDA1OFwiO1xuIHRbXCJcXHUyMTYwXCJdID0gXCJcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjFcIl0gPSBcIlxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjJcIl0gPSBcIlxcdTAwNDlcXHUwMDQ5XFx1MDA0OVwiO1xuIHRbXCJcXHUyMTYzXCJdID0gXCJcXHUwMDQ5XFx1MDA1NlwiO1xuIHRbXCJcXHUyMTY0XCJdID0gXCJcXHUwMDU2XCI7XG4gdFtcIlxcdTIxNjVcIl0gPSBcIlxcdTAwNTZcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjZcIl0gPSBcIlxcdTAwNTZcXHUwMDQ5XFx1MDA0OVwiO1xuIHRbXCJcXHUyMTY3XCJdID0gXCJcXHUwMDU2XFx1MDA0OVxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNjhcIl0gPSBcIlxcdTAwNDlcXHUwMDU4XCI7XG4gdFtcIlxcdTIxNjlcIl0gPSBcIlxcdTAwNThcIjtcbiB0W1wiXFx1MjE2QVwiXSA9IFwiXFx1MDA1OFxcdTAwNDlcIjtcbiB0W1wiXFx1MjE2QlwiXSA9IFwiXFx1MDA1OFxcdTAwNDlcXHUwMDQ5XCI7XG4gdFtcIlxcdTIxNkNcIl0gPSBcIlxcdTAwNENcIjtcbiB0W1wiXFx1MjE2RFwiXSA9IFwiXFx1MDA0M1wiO1xuIHRbXCJcXHUyMTZFXCJdID0gXCJcXHUwMDQ0XCI7XG4gdFtcIlxcdTIxNkZcIl0gPSBcIlxcdTAwNERcIjtcbiB0W1wiXFx1MjE3MFwiXSA9IFwiXFx1MDA2OVwiO1xuIHRbXCJcXHUyMTcxXCJdID0gXCJcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTcyXCJdID0gXCJcXHUwMDY5XFx1MDA2OVxcdTAwNjlcIjtcbiB0W1wiXFx1MjE3M1wiXSA9IFwiXFx1MDA2OVxcdTAwNzZcIjtcbiB0W1wiXFx1MjE3NFwiXSA9IFwiXFx1MDA3NlwiO1xuIHRbXCJcXHUyMTc1XCJdID0gXCJcXHUwMDc2XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTc2XCJdID0gXCJcXHUwMDc2XFx1MDA2OVxcdTAwNjlcIjtcbiB0W1wiXFx1MjE3N1wiXSA9IFwiXFx1MDA3NlxcdTAwNjlcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTc4XCJdID0gXCJcXHUwMDY5XFx1MDA3OFwiO1xuIHRbXCJcXHUyMTc5XCJdID0gXCJcXHUwMDc4XCI7XG4gdFtcIlxcdTIxN0FcIl0gPSBcIlxcdTAwNzhcXHUwMDY5XCI7XG4gdFtcIlxcdTIxN0JcIl0gPSBcIlxcdTAwNzhcXHUwMDY5XFx1MDA2OVwiO1xuIHRbXCJcXHUyMTdDXCJdID0gXCJcXHUwMDZDXCI7XG4gdFtcIlxcdTIxN0RcIl0gPSBcIlxcdTAwNjNcIjtcbiB0W1wiXFx1MjE3RVwiXSA9IFwiXFx1MDA2NFwiO1xuIHRbXCJcXHUyMTdGXCJdID0gXCJcXHUwMDZEXCI7XG4gdFtcIlxcdTIyMkNcIl0gPSBcIlxcdTIyMkJcXHUyMjJCXCI7XG4gdFtcIlxcdTIyMkRcIl0gPSBcIlxcdTIyMkJcXHUyMjJCXFx1MjIyQlwiO1xuIHRbXCJcXHUyMjJGXCJdID0gXCJcXHUyMjJFXFx1MjIyRVwiO1xuIHRbXCJcXHUyMjMwXCJdID0gXCJcXHUyMjJFXFx1MjIyRVxcdTIyMkVcIjtcbiB0W1wiXFx1MjQ3NFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0NzVcIl0gPSBcIlxcdTAwMjhcXHUwMDMyXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDc2XCJdID0gXCJcXHUwMDI4XFx1MDAzM1xcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3N1wiXSA9IFwiXFx1MDAyOFxcdTAwMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0NzhcIl0gPSBcIlxcdTAwMjhcXHUwMDM1XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDc5XCJdID0gXCJcXHUwMDI4XFx1MDAzNlxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3QVwiXSA9IFwiXFx1MDAyOFxcdTAwMzdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0N0JcIl0gPSBcIlxcdTAwMjhcXHUwMDM4XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDdDXCJdID0gXCJcXHUwMDI4XFx1MDAzOVxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ3RFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMwXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDdFXCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0N0ZcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzMlxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4MFwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMzXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDgxXCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODJcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzNVxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4M1wiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM2XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDg0XCJdID0gXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODVcIl0gPSBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzOFxcdTAwMjlcIjtcbiB0W1wiXFx1MjQ4NlwiXSA9IFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM5XFx1MDAyOVwiO1xuIHRbXCJcXHUyNDg3XCJdID0gXCJcXHUwMDI4XFx1MDAzMlxcdTAwMzBcXHUwMDI5XCI7XG4gdFtcIlxcdTI0ODhcIl0gPSBcIlxcdTAwMzFcXHUwMDJFXCI7XG4gdFtcIlxcdTI0ODlcIl0gPSBcIlxcdTAwMzJcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEFcIl0gPSBcIlxcdTAwMzNcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEJcIl0gPSBcIlxcdTAwMzRcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OENcIl0gPSBcIlxcdTAwMzVcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OERcIl0gPSBcIlxcdTAwMzZcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEVcIl0gPSBcIlxcdTAwMzdcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OEZcIl0gPSBcIlxcdTAwMzhcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTBcIl0gPSBcIlxcdTAwMzlcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTFcIl0gPSBcIlxcdTAwMzFcXHUwMDMwXFx1MDAyRVwiO1xuIHRbXCJcXHUyNDkyXCJdID0gXCJcXHUwMDMxXFx1MDAzMVxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5M1wiXSA9IFwiXFx1MDAzMVxcdTAwMzJcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTRcIl0gPSBcIlxcdTAwMzFcXHUwMDMzXFx1MDAyRVwiO1xuIHRbXCJcXHUyNDk1XCJdID0gXCJcXHUwMDMxXFx1MDAzNFxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5NlwiXSA9IFwiXFx1MDAzMVxcdTAwMzVcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OTdcIl0gPSBcIlxcdTAwMzFcXHUwMDM2XFx1MDAyRVwiO1xuIHRbXCJcXHUyNDk4XCJdID0gXCJcXHUwMDMxXFx1MDAzN1xcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5OVwiXSA9IFwiXFx1MDAzMVxcdTAwMzhcXHUwMDJFXCI7XG4gdFtcIlxcdTI0OUFcIl0gPSBcIlxcdTAwMzFcXHUwMDM5XFx1MDAyRVwiO1xuIHRbXCJcXHUyNDlCXCJdID0gXCJcXHUwMDMyXFx1MDAzMFxcdTAwMkVcIjtcbiB0W1wiXFx1MjQ5Q1wiXSA9IFwiXFx1MDAyOFxcdTAwNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0OURcIl0gPSBcIlxcdTAwMjhcXHUwMDYyXFx1MDAyOVwiO1xuIHRbXCJcXHUyNDlFXCJdID0gXCJcXHUwMDI4XFx1MDA2M1xcdTAwMjlcIjtcbiB0W1wiXFx1MjQ5RlwiXSA9IFwiXFx1MDAyOFxcdTAwNjRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTBcIl0gPSBcIlxcdTAwMjhcXHUwMDY1XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEExXCJdID0gXCJcXHUwMDI4XFx1MDA2NlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBMlwiXSA9IFwiXFx1MDAyOFxcdTAwNjdcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTNcIl0gPSBcIlxcdTAwMjhcXHUwMDY4XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEE0XCJdID0gXCJcXHUwMDI4XFx1MDA2OVxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBNVwiXSA9IFwiXFx1MDAyOFxcdTAwNkFcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTZcIl0gPSBcIlxcdTAwMjhcXHUwMDZCXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEE3XCJdID0gXCJcXHUwMDI4XFx1MDA2Q1xcdTAwMjlcIjtcbiB0W1wiXFx1MjRBOFwiXSA9IFwiXFx1MDAyOFxcdTAwNkRcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QTlcIl0gPSBcIlxcdTAwMjhcXHUwMDZFXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEFBXCJdID0gXCJcXHUwMDI4XFx1MDA2RlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBQlwiXSA9IFwiXFx1MDAyOFxcdTAwNzBcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QUNcIl0gPSBcIlxcdTAwMjhcXHUwMDcxXFx1MDAyOVwiO1xuIHRbXCJcXHUyNEFEXCJdID0gXCJcXHUwMDI4XFx1MDA3MlxcdTAwMjlcIjtcbiB0W1wiXFx1MjRBRVwiXSA9IFwiXFx1MDAyOFxcdTAwNzNcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QUZcIl0gPSBcIlxcdTAwMjhcXHUwMDc0XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEIwXCJdID0gXCJcXHUwMDI4XFx1MDA3NVxcdTAwMjlcIjtcbiB0W1wiXFx1MjRCMVwiXSA9IFwiXFx1MDAyOFxcdTAwNzZcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QjJcIl0gPSBcIlxcdTAwMjhcXHUwMDc3XFx1MDAyOVwiO1xuIHRbXCJcXHUyNEIzXCJdID0gXCJcXHUwMDI4XFx1MDA3OFxcdTAwMjlcIjtcbiB0W1wiXFx1MjRCNFwiXSA9IFwiXFx1MDAyOFxcdTAwNzlcXHUwMDI5XCI7XG4gdFtcIlxcdTI0QjVcIl0gPSBcIlxcdTAwMjhcXHUwMDdBXFx1MDAyOVwiO1xuIHRbXCJcXHUyQTBDXCJdID0gXCJcXHUyMjJCXFx1MjIyQlxcdTIyMkJcXHUyMjJCXCI7XG4gdFtcIlxcdTJBNzRcIl0gPSBcIlxcdTAwM0FcXHUwMDNBXFx1MDAzRFwiO1xuIHRbXCJcXHUyQTc1XCJdID0gXCJcXHUwMDNEXFx1MDAzRFwiO1xuIHRbXCJcXHUyQTc2XCJdID0gXCJcXHUwMDNEXFx1MDAzRFxcdTAwM0RcIjtcbiB0W1wiXFx1MkU5RlwiXSA9IFwiXFx1NkJDRFwiO1xuIHRbXCJcXHUyRUYzXCJdID0gXCJcXHU5RjlGXCI7XG4gdFtcIlxcdTJGMDBcIl0gPSBcIlxcdTRFMDBcIjtcbiB0W1wiXFx1MkYwMVwiXSA9IFwiXFx1NEUyOFwiO1xuIHRbXCJcXHUyRjAyXCJdID0gXCJcXHU0RTM2XCI7XG4gdFtcIlxcdTJGMDNcIl0gPSBcIlxcdTRFM0ZcIjtcbiB0W1wiXFx1MkYwNFwiXSA9IFwiXFx1NEU1OVwiO1xuIHRbXCJcXHUyRjA1XCJdID0gXCJcXHU0RTg1XCI7XG4gdFtcIlxcdTJGMDZcIl0gPSBcIlxcdTRFOENcIjtcbiB0W1wiXFx1MkYwN1wiXSA9IFwiXFx1NEVBMFwiO1xuIHRbXCJcXHUyRjA4XCJdID0gXCJcXHU0RUJBXCI7XG4gdFtcIlxcdTJGMDlcIl0gPSBcIlxcdTUxM0ZcIjtcbiB0W1wiXFx1MkYwQVwiXSA9IFwiXFx1NTE2NVwiO1xuIHRbXCJcXHUyRjBCXCJdID0gXCJcXHU1MTZCXCI7XG4gdFtcIlxcdTJGMENcIl0gPSBcIlxcdTUxODJcIjtcbiB0W1wiXFx1MkYwRFwiXSA9IFwiXFx1NTE5NlwiO1xuIHRbXCJcXHUyRjBFXCJdID0gXCJcXHU1MUFCXCI7XG4gdFtcIlxcdTJGMEZcIl0gPSBcIlxcdTUxRTBcIjtcbiB0W1wiXFx1MkYxMFwiXSA9IFwiXFx1NTFGNVwiO1xuIHRbXCJcXHUyRjExXCJdID0gXCJcXHU1MjAwXCI7XG4gdFtcIlxcdTJGMTJcIl0gPSBcIlxcdTUyOUJcIjtcbiB0W1wiXFx1MkYxM1wiXSA9IFwiXFx1NTJGOVwiO1xuIHRbXCJcXHUyRjE0XCJdID0gXCJcXHU1MzE1XCI7XG4gdFtcIlxcdTJGMTVcIl0gPSBcIlxcdTUzMUFcIjtcbiB0W1wiXFx1MkYxNlwiXSA9IFwiXFx1NTMzOFwiO1xuIHRbXCJcXHUyRjE3XCJdID0gXCJcXHU1MzQxXCI7XG4gdFtcIlxcdTJGMThcIl0gPSBcIlxcdTUzNUNcIjtcbiB0W1wiXFx1MkYxOVwiXSA9IFwiXFx1NTM2OVwiO1xuIHRbXCJcXHUyRjFBXCJdID0gXCJcXHU1MzgyXCI7XG4gdFtcIlxcdTJGMUJcIl0gPSBcIlxcdTUzQjZcIjtcbiB0W1wiXFx1MkYxQ1wiXSA9IFwiXFx1NTNDOFwiO1xuIHRbXCJcXHUyRjFEXCJdID0gXCJcXHU1M0UzXCI7XG4gdFtcIlxcdTJGMUVcIl0gPSBcIlxcdTU2RDdcIjtcbiB0W1wiXFx1MkYxRlwiXSA9IFwiXFx1NTcxRlwiO1xuIHRbXCJcXHUyRjIwXCJdID0gXCJcXHU1OEVCXCI7XG4gdFtcIlxcdTJGMjFcIl0gPSBcIlxcdTU5MDJcIjtcbiB0W1wiXFx1MkYyMlwiXSA9IFwiXFx1NTkwQVwiO1xuIHRbXCJcXHUyRjIzXCJdID0gXCJcXHU1OTE1XCI7XG4gdFtcIlxcdTJGMjRcIl0gPSBcIlxcdTU5MjdcIjtcbiB0W1wiXFx1MkYyNVwiXSA9IFwiXFx1NTk3M1wiO1xuIHRbXCJcXHUyRjI2XCJdID0gXCJcXHU1QjUwXCI7XG4gdFtcIlxcdTJGMjdcIl0gPSBcIlxcdTVCODBcIjtcbiB0W1wiXFx1MkYyOFwiXSA9IFwiXFx1NUJGOFwiO1xuIHRbXCJcXHUyRjI5XCJdID0gXCJcXHU1QzBGXCI7XG4gdFtcIlxcdTJGMkFcIl0gPSBcIlxcdTVDMjJcIjtcbiB0W1wiXFx1MkYyQlwiXSA9IFwiXFx1NUMzOFwiO1xuIHRbXCJcXHUyRjJDXCJdID0gXCJcXHU1QzZFXCI7XG4gdFtcIlxcdTJGMkRcIl0gPSBcIlxcdTVDNzFcIjtcbiB0W1wiXFx1MkYyRVwiXSA9IFwiXFx1NUREQlwiO1xuIHRbXCJcXHUyRjJGXCJdID0gXCJcXHU1REU1XCI7XG4gdFtcIlxcdTJGMzBcIl0gPSBcIlxcdTVERjFcIjtcbiB0W1wiXFx1MkYzMVwiXSA9IFwiXFx1NURGRVwiO1xuIHRbXCJcXHUyRjMyXCJdID0gXCJcXHU1RTcyXCI7XG4gdFtcIlxcdTJGMzNcIl0gPSBcIlxcdTVFN0FcIjtcbiB0W1wiXFx1MkYzNFwiXSA9IFwiXFx1NUU3RlwiO1xuIHRbXCJcXHUyRjM1XCJdID0gXCJcXHU1RUY0XCI7XG4gdFtcIlxcdTJGMzZcIl0gPSBcIlxcdTVFRkVcIjtcbiB0W1wiXFx1MkYzN1wiXSA9IFwiXFx1NUYwQlwiO1xuIHRbXCJcXHUyRjM4XCJdID0gXCJcXHU1RjEzXCI7XG4gdFtcIlxcdTJGMzlcIl0gPSBcIlxcdTVGNTBcIjtcbiB0W1wiXFx1MkYzQVwiXSA9IFwiXFx1NUY2MVwiO1xuIHRbXCJcXHUyRjNCXCJdID0gXCJcXHU1RjczXCI7XG4gdFtcIlxcdTJGM0NcIl0gPSBcIlxcdTVGQzNcIjtcbiB0W1wiXFx1MkYzRFwiXSA9IFwiXFx1NjIwOFwiO1xuIHRbXCJcXHUyRjNFXCJdID0gXCJcXHU2MjM2XCI7XG4gdFtcIlxcdTJGM0ZcIl0gPSBcIlxcdTYyNEJcIjtcbiB0W1wiXFx1MkY0MFwiXSA9IFwiXFx1NjUyRlwiO1xuIHRbXCJcXHUyRjQxXCJdID0gXCJcXHU2NTM0XCI7XG4gdFtcIlxcdTJGNDJcIl0gPSBcIlxcdTY1ODdcIjtcbiB0W1wiXFx1MkY0M1wiXSA9IFwiXFx1NjU5N1wiO1xuIHRbXCJcXHUyRjQ0XCJdID0gXCJcXHU2NUE0XCI7XG4gdFtcIlxcdTJGNDVcIl0gPSBcIlxcdTY1QjlcIjtcbiB0W1wiXFx1MkY0NlwiXSA9IFwiXFx1NjVFMFwiO1xuIHRbXCJcXHUyRjQ3XCJdID0gXCJcXHU2NUU1XCI7XG4gdFtcIlxcdTJGNDhcIl0gPSBcIlxcdTY2RjBcIjtcbiB0W1wiXFx1MkY0OVwiXSA9IFwiXFx1NjcwOFwiO1xuIHRbXCJcXHUyRjRBXCJdID0gXCJcXHU2NzI4XCI7XG4gdFtcIlxcdTJGNEJcIl0gPSBcIlxcdTZCMjBcIjtcbiB0W1wiXFx1MkY0Q1wiXSA9IFwiXFx1NkI2MlwiO1xuIHRbXCJcXHUyRjREXCJdID0gXCJcXHU2Qjc5XCI7XG4gdFtcIlxcdTJGNEVcIl0gPSBcIlxcdTZCQjNcIjtcbiB0W1wiXFx1MkY0RlwiXSA9IFwiXFx1NkJDQlwiO1xuIHRbXCJcXHUyRjUwXCJdID0gXCJcXHU2QkQ0XCI7XG4gdFtcIlxcdTJGNTFcIl0gPSBcIlxcdTZCREJcIjtcbiB0W1wiXFx1MkY1MlwiXSA9IFwiXFx1NkMwRlwiO1xuIHRbXCJcXHUyRjUzXCJdID0gXCJcXHU2QzE0XCI7XG4gdFtcIlxcdTJGNTRcIl0gPSBcIlxcdTZDMzRcIjtcbiB0W1wiXFx1MkY1NVwiXSA9IFwiXFx1NzA2QlwiO1xuIHRbXCJcXHUyRjU2XCJdID0gXCJcXHU3MjJBXCI7XG4gdFtcIlxcdTJGNTdcIl0gPSBcIlxcdTcyMzZcIjtcbiB0W1wiXFx1MkY1OFwiXSA9IFwiXFx1NzIzQlwiO1xuIHRbXCJcXHUyRjU5XCJdID0gXCJcXHU3MjNGXCI7XG4gdFtcIlxcdTJGNUFcIl0gPSBcIlxcdTcyNDdcIjtcbiB0W1wiXFx1MkY1QlwiXSA9IFwiXFx1NzI1OVwiO1xuIHRbXCJcXHUyRjVDXCJdID0gXCJcXHU3MjVCXCI7XG4gdFtcIlxcdTJGNURcIl0gPSBcIlxcdTcyQUNcIjtcbiB0W1wiXFx1MkY1RVwiXSA9IFwiXFx1NzM4NFwiO1xuIHRbXCJcXHUyRjVGXCJdID0gXCJcXHU3Mzg5XCI7XG4gdFtcIlxcdTJGNjBcIl0gPSBcIlxcdTc0RENcIjtcbiB0W1wiXFx1MkY2MVwiXSA9IFwiXFx1NzRFNlwiO1xuIHRbXCJcXHUyRjYyXCJdID0gXCJcXHU3NTE4XCI7XG4gdFtcIlxcdTJGNjNcIl0gPSBcIlxcdTc1MUZcIjtcbiB0W1wiXFx1MkY2NFwiXSA9IFwiXFx1NzUyOFwiO1xuIHRbXCJcXHUyRjY1XCJdID0gXCJcXHU3NTMwXCI7XG4gdFtcIlxcdTJGNjZcIl0gPSBcIlxcdTc1OEJcIjtcbiB0W1wiXFx1MkY2N1wiXSA9IFwiXFx1NzU5MlwiO1xuIHRbXCJcXHUyRjY4XCJdID0gXCJcXHU3Njc2XCI7XG4gdFtcIlxcdTJGNjlcIl0gPSBcIlxcdTc2N0RcIjtcbiB0W1wiXFx1MkY2QVwiXSA9IFwiXFx1NzZBRVwiO1xuIHRbXCJcXHUyRjZCXCJdID0gXCJcXHU3NkJGXCI7XG4gdFtcIlxcdTJGNkNcIl0gPSBcIlxcdTc2RUVcIjtcbiB0W1wiXFx1MkY2RFwiXSA9IFwiXFx1NzdEQlwiO1xuIHRbXCJcXHUyRjZFXCJdID0gXCJcXHU3N0UyXCI7XG4gdFtcIlxcdTJGNkZcIl0gPSBcIlxcdTc3RjNcIjtcbiB0W1wiXFx1MkY3MFwiXSA9IFwiXFx1NzkzQVwiO1xuIHRbXCJcXHUyRjcxXCJdID0gXCJcXHU3OUI4XCI7XG4gdFtcIlxcdTJGNzJcIl0gPSBcIlxcdTc5QkVcIjtcbiB0W1wiXFx1MkY3M1wiXSA9IFwiXFx1N0E3NFwiO1xuIHRbXCJcXHUyRjc0XCJdID0gXCJcXHU3QUNCXCI7XG4gdFtcIlxcdTJGNzVcIl0gPSBcIlxcdTdBRjlcIjtcbiB0W1wiXFx1MkY3NlwiXSA9IFwiXFx1N0M3M1wiO1xuIHRbXCJcXHUyRjc3XCJdID0gXCJcXHU3Q0Y4XCI7XG4gdFtcIlxcdTJGNzhcIl0gPSBcIlxcdTdGMzZcIjtcbiB0W1wiXFx1MkY3OVwiXSA9IFwiXFx1N0Y1MVwiO1xuIHRbXCJcXHUyRjdBXCJdID0gXCJcXHU3RjhBXCI7XG4gdFtcIlxcdTJGN0JcIl0gPSBcIlxcdTdGQkRcIjtcbiB0W1wiXFx1MkY3Q1wiXSA9IFwiXFx1ODAwMVwiO1xuIHRbXCJcXHUyRjdEXCJdID0gXCJcXHU4MDBDXCI7XG4gdFtcIlxcdTJGN0VcIl0gPSBcIlxcdTgwMTJcIjtcbiB0W1wiXFx1MkY3RlwiXSA9IFwiXFx1ODAzM1wiO1xuIHRbXCJcXHUyRjgwXCJdID0gXCJcXHU4MDdGXCI7XG4gdFtcIlxcdTJGODFcIl0gPSBcIlxcdTgwODlcIjtcbiB0W1wiXFx1MkY4MlwiXSA9IFwiXFx1ODFFM1wiO1xuIHRbXCJcXHUyRjgzXCJdID0gXCJcXHU4MUVBXCI7XG4gdFtcIlxcdTJGODRcIl0gPSBcIlxcdTgxRjNcIjtcbiB0W1wiXFx1MkY4NVwiXSA9IFwiXFx1ODFGQ1wiO1xuIHRbXCJcXHUyRjg2XCJdID0gXCJcXHU4MjBDXCI7XG4gdFtcIlxcdTJGODdcIl0gPSBcIlxcdTgyMUJcIjtcbiB0W1wiXFx1MkY4OFwiXSA9IFwiXFx1ODIxRlwiO1xuIHRbXCJcXHUyRjg5XCJdID0gXCJcXHU4MjZFXCI7XG4gdFtcIlxcdTJGOEFcIl0gPSBcIlxcdTgyNzJcIjtcbiB0W1wiXFx1MkY4QlwiXSA9IFwiXFx1ODI3OFwiO1xuIHRbXCJcXHUyRjhDXCJdID0gXCJcXHU4NjREXCI7XG4gdFtcIlxcdTJGOERcIl0gPSBcIlxcdTg2NkJcIjtcbiB0W1wiXFx1MkY4RVwiXSA9IFwiXFx1ODg0MFwiO1xuIHRbXCJcXHUyRjhGXCJdID0gXCJcXHU4ODRDXCI7XG4gdFtcIlxcdTJGOTBcIl0gPSBcIlxcdTg4NjNcIjtcbiB0W1wiXFx1MkY5MVwiXSA9IFwiXFx1ODk3RVwiO1xuIHRbXCJcXHUyRjkyXCJdID0gXCJcXHU4OThCXCI7XG4gdFtcIlxcdTJGOTNcIl0gPSBcIlxcdTg5RDJcIjtcbiB0W1wiXFx1MkY5NFwiXSA9IFwiXFx1OEEwMFwiO1xuIHRbXCJcXHUyRjk1XCJdID0gXCJcXHU4QzM3XCI7XG4gdFtcIlxcdTJGOTZcIl0gPSBcIlxcdThDNDZcIjtcbiB0W1wiXFx1MkY5N1wiXSA9IFwiXFx1OEM1NVwiO1xuIHRbXCJcXHUyRjk4XCJdID0gXCJcXHU4Qzc4XCI7XG4gdFtcIlxcdTJGOTlcIl0gPSBcIlxcdThDOURcIjtcbiB0W1wiXFx1MkY5QVwiXSA9IFwiXFx1OEQ2NFwiO1xuIHRbXCJcXHUyRjlCXCJdID0gXCJcXHU4RDcwXCI7XG4gdFtcIlxcdTJGOUNcIl0gPSBcIlxcdThEQjNcIjtcbiB0W1wiXFx1MkY5RFwiXSA9IFwiXFx1OEVBQlwiO1xuIHRbXCJcXHUyRjlFXCJdID0gXCJcXHU4RUNBXCI7XG4gdFtcIlxcdTJGOUZcIl0gPSBcIlxcdThGOUJcIjtcbiB0W1wiXFx1MkZBMFwiXSA9IFwiXFx1OEZCMFwiO1xuIHRbXCJcXHUyRkExXCJdID0gXCJcXHU4RkI1XCI7XG4gdFtcIlxcdTJGQTJcIl0gPSBcIlxcdTkwOTFcIjtcbiB0W1wiXFx1MkZBM1wiXSA9IFwiXFx1OTE0OVwiO1xuIHRbXCJcXHUyRkE0XCJdID0gXCJcXHU5MUM2XCI7XG4gdFtcIlxcdTJGQTVcIl0gPSBcIlxcdTkxQ0NcIjtcbiB0W1wiXFx1MkZBNlwiXSA9IFwiXFx1OTFEMVwiO1xuIHRbXCJcXHUyRkE3XCJdID0gXCJcXHU5NTc3XCI7XG4gdFtcIlxcdTJGQThcIl0gPSBcIlxcdTk1ODBcIjtcbiB0W1wiXFx1MkZBOVwiXSA9IFwiXFx1OTYxQ1wiO1xuIHRbXCJcXHUyRkFBXCJdID0gXCJcXHU5NkI2XCI7XG4gdFtcIlxcdTJGQUJcIl0gPSBcIlxcdTk2QjlcIjtcbiB0W1wiXFx1MkZBQ1wiXSA9IFwiXFx1OTZFOFwiO1xuIHRbXCJcXHUyRkFEXCJdID0gXCJcXHU5NzUxXCI7XG4gdFtcIlxcdTJGQUVcIl0gPSBcIlxcdTk3NUVcIjtcbiB0W1wiXFx1MkZBRlwiXSA9IFwiXFx1OTc2MlwiO1xuIHRbXCJcXHUyRkIwXCJdID0gXCJcXHU5NzY5XCI7XG4gdFtcIlxcdTJGQjFcIl0gPSBcIlxcdTk3Q0JcIjtcbiB0W1wiXFx1MkZCMlwiXSA9IFwiXFx1OTdFRFwiO1xuIHRbXCJcXHUyRkIzXCJdID0gXCJcXHU5N0YzXCI7XG4gdFtcIlxcdTJGQjRcIl0gPSBcIlxcdTk4MDFcIjtcbiB0W1wiXFx1MkZCNVwiXSA9IFwiXFx1OThBOFwiO1xuIHRbXCJcXHUyRkI2XCJdID0gXCJcXHU5OERCXCI7XG4gdFtcIlxcdTJGQjdcIl0gPSBcIlxcdTk4REZcIjtcbiB0W1wiXFx1MkZCOFwiXSA9IFwiXFx1OTk5NlwiO1xuIHRbXCJcXHUyRkI5XCJdID0gXCJcXHU5OTk5XCI7XG4gdFtcIlxcdTJGQkFcIl0gPSBcIlxcdTk5QUNcIjtcbiB0W1wiXFx1MkZCQlwiXSA9IFwiXFx1OUFBOFwiO1xuIHRbXCJcXHUyRkJDXCJdID0gXCJcXHU5QUQ4XCI7XG4gdFtcIlxcdTJGQkRcIl0gPSBcIlxcdTlBREZcIjtcbiB0W1wiXFx1MkZCRVwiXSA9IFwiXFx1OUIyNVwiO1xuIHRbXCJcXHUyRkJGXCJdID0gXCJcXHU5QjJGXCI7XG4gdFtcIlxcdTJGQzBcIl0gPSBcIlxcdTlCMzJcIjtcbiB0W1wiXFx1MkZDMVwiXSA9IFwiXFx1OUIzQ1wiO1xuIHRbXCJcXHUyRkMyXCJdID0gXCJcXHU5QjVBXCI7XG4gdFtcIlxcdTJGQzNcIl0gPSBcIlxcdTlDRTVcIjtcbiB0W1wiXFx1MkZDNFwiXSA9IFwiXFx1OUU3NVwiO1xuIHRbXCJcXHUyRkM1XCJdID0gXCJcXHU5RTdGXCI7XG4gdFtcIlxcdTJGQzZcIl0gPSBcIlxcdTlFQTVcIjtcbiB0W1wiXFx1MkZDN1wiXSA9IFwiXFx1OUVCQlwiO1xuIHRbXCJcXHUyRkM4XCJdID0gXCJcXHU5RUMzXCI7XG4gdFtcIlxcdTJGQzlcIl0gPSBcIlxcdTlFQ0RcIjtcbiB0W1wiXFx1MkZDQVwiXSA9IFwiXFx1OUVEMVwiO1xuIHRbXCJcXHUyRkNCXCJdID0gXCJcXHU5RUY5XCI7XG4gdFtcIlxcdTJGQ0NcIl0gPSBcIlxcdTlFRkRcIjtcbiB0W1wiXFx1MkZDRFwiXSA9IFwiXFx1OUYwRVwiO1xuIHRbXCJcXHUyRkNFXCJdID0gXCJcXHU5RjEzXCI7XG4gdFtcIlxcdTJGQ0ZcIl0gPSBcIlxcdTlGMjBcIjtcbiB0W1wiXFx1MkZEMFwiXSA9IFwiXFx1OUYzQlwiO1xuIHRbXCJcXHUyRkQxXCJdID0gXCJcXHU5RjRBXCI7XG4gdFtcIlxcdTJGRDJcIl0gPSBcIlxcdTlGNTJcIjtcbiB0W1wiXFx1MkZEM1wiXSA9IFwiXFx1OUY4RFwiO1xuIHRbXCJcXHUyRkQ0XCJdID0gXCJcXHU5RjlDXCI7XG4gdFtcIlxcdTJGRDVcIl0gPSBcIlxcdTlGQTBcIjtcbiB0W1wiXFx1MzAzNlwiXSA9IFwiXFx1MzAxMlwiO1xuIHRbXCJcXHUzMDM4XCJdID0gXCJcXHU1MzQxXCI7XG4gdFtcIlxcdTMwMzlcIl0gPSBcIlxcdTUzNDRcIjtcbiB0W1wiXFx1MzAzQVwiXSA9IFwiXFx1NTM0NVwiO1xuIHRbXCJcXHUzMDlCXCJdID0gXCJcXHUwMDIwXFx1MzA5OVwiO1xuIHRbXCJcXHUzMDlDXCJdID0gXCJcXHUwMDIwXFx1MzA5QVwiO1xuIHRbXCJcXHUzMTMxXCJdID0gXCJcXHUxMTAwXCI7XG4gdFtcIlxcdTMxMzJcIl0gPSBcIlxcdTExMDFcIjtcbiB0W1wiXFx1MzEzM1wiXSA9IFwiXFx1MTFBQVwiO1xuIHRbXCJcXHUzMTM0XCJdID0gXCJcXHUxMTAyXCI7XG4gdFtcIlxcdTMxMzVcIl0gPSBcIlxcdTExQUNcIjtcbiB0W1wiXFx1MzEzNlwiXSA9IFwiXFx1MTFBRFwiO1xuIHRbXCJcXHUzMTM3XCJdID0gXCJcXHUxMTAzXCI7XG4gdFtcIlxcdTMxMzhcIl0gPSBcIlxcdTExMDRcIjtcbiB0W1wiXFx1MzEzOVwiXSA9IFwiXFx1MTEwNVwiO1xuIHRbXCJcXHUzMTNBXCJdID0gXCJcXHUxMUIwXCI7XG4gdFtcIlxcdTMxM0JcIl0gPSBcIlxcdTExQjFcIjtcbiB0W1wiXFx1MzEzQ1wiXSA9IFwiXFx1MTFCMlwiO1xuIHRbXCJcXHUzMTNEXCJdID0gXCJcXHUxMUIzXCI7XG4gdFtcIlxcdTMxM0VcIl0gPSBcIlxcdTExQjRcIjtcbiB0W1wiXFx1MzEzRlwiXSA9IFwiXFx1MTFCNVwiO1xuIHRbXCJcXHUzMTQwXCJdID0gXCJcXHUxMTFBXCI7XG4gdFtcIlxcdTMxNDFcIl0gPSBcIlxcdTExMDZcIjtcbiB0W1wiXFx1MzE0MlwiXSA9IFwiXFx1MTEwN1wiO1xuIHRbXCJcXHUzMTQzXCJdID0gXCJcXHUxMTA4XCI7XG4gdFtcIlxcdTMxNDRcIl0gPSBcIlxcdTExMjFcIjtcbiB0W1wiXFx1MzE0NVwiXSA9IFwiXFx1MTEwOVwiO1xuIHRbXCJcXHUzMTQ2XCJdID0gXCJcXHUxMTBBXCI7XG4gdFtcIlxcdTMxNDdcIl0gPSBcIlxcdTExMEJcIjtcbiB0W1wiXFx1MzE0OFwiXSA9IFwiXFx1MTEwQ1wiO1xuIHRbXCJcXHUzMTQ5XCJdID0gXCJcXHUxMTBEXCI7XG4gdFtcIlxcdTMxNEFcIl0gPSBcIlxcdTExMEVcIjtcbiB0W1wiXFx1MzE0QlwiXSA9IFwiXFx1MTEwRlwiO1xuIHRbXCJcXHUzMTRDXCJdID0gXCJcXHUxMTEwXCI7XG4gdFtcIlxcdTMxNERcIl0gPSBcIlxcdTExMTFcIjtcbiB0W1wiXFx1MzE0RVwiXSA9IFwiXFx1MTExMlwiO1xuIHRbXCJcXHUzMTRGXCJdID0gXCJcXHUxMTYxXCI7XG4gdFtcIlxcdTMxNTBcIl0gPSBcIlxcdTExNjJcIjtcbiB0W1wiXFx1MzE1MVwiXSA9IFwiXFx1MTE2M1wiO1xuIHRbXCJcXHUzMTUyXCJdID0gXCJcXHUxMTY0XCI7XG4gdFtcIlxcdTMxNTNcIl0gPSBcIlxcdTExNjVcIjtcbiB0W1wiXFx1MzE1NFwiXSA9IFwiXFx1MTE2NlwiO1xuIHRbXCJcXHUzMTU1XCJdID0gXCJcXHUxMTY3XCI7XG4gdFtcIlxcdTMxNTZcIl0gPSBcIlxcdTExNjhcIjtcbiB0W1wiXFx1MzE1N1wiXSA9IFwiXFx1MTE2OVwiO1xuIHRbXCJcXHUzMTU4XCJdID0gXCJcXHUxMTZBXCI7XG4gdFtcIlxcdTMxNTlcIl0gPSBcIlxcdTExNkJcIjtcbiB0W1wiXFx1MzE1QVwiXSA9IFwiXFx1MTE2Q1wiO1xuIHRbXCJcXHUzMTVCXCJdID0gXCJcXHUxMTZEXCI7XG4gdFtcIlxcdTMxNUNcIl0gPSBcIlxcdTExNkVcIjtcbiB0W1wiXFx1MzE1RFwiXSA9IFwiXFx1MTE2RlwiO1xuIHRbXCJcXHUzMTVFXCJdID0gXCJcXHUxMTcwXCI7XG4gdFtcIlxcdTMxNUZcIl0gPSBcIlxcdTExNzFcIjtcbiB0W1wiXFx1MzE2MFwiXSA9IFwiXFx1MTE3MlwiO1xuIHRbXCJcXHUzMTYxXCJdID0gXCJcXHUxMTczXCI7XG4gdFtcIlxcdTMxNjJcIl0gPSBcIlxcdTExNzRcIjtcbiB0W1wiXFx1MzE2M1wiXSA9IFwiXFx1MTE3NVwiO1xuIHRbXCJcXHUzMTY0XCJdID0gXCJcXHUxMTYwXCI7XG4gdFtcIlxcdTMxNjVcIl0gPSBcIlxcdTExMTRcIjtcbiB0W1wiXFx1MzE2NlwiXSA9IFwiXFx1MTExNVwiO1xuIHRbXCJcXHUzMTY3XCJdID0gXCJcXHUxMUM3XCI7XG4gdFtcIlxcdTMxNjhcIl0gPSBcIlxcdTExQzhcIjtcbiB0W1wiXFx1MzE2OVwiXSA9IFwiXFx1MTFDQ1wiO1xuIHRbXCJcXHUzMTZBXCJdID0gXCJcXHUxMUNFXCI7XG4gdFtcIlxcdTMxNkJcIl0gPSBcIlxcdTExRDNcIjtcbiB0W1wiXFx1MzE2Q1wiXSA9IFwiXFx1MTFEN1wiO1xuIHRbXCJcXHUzMTZEXCJdID0gXCJcXHUxMUQ5XCI7XG4gdFtcIlxcdTMxNkVcIl0gPSBcIlxcdTExMUNcIjtcbiB0W1wiXFx1MzE2RlwiXSA9IFwiXFx1MTFERFwiO1xuIHRbXCJcXHUzMTcwXCJdID0gXCJcXHUxMURGXCI7XG4gdFtcIlxcdTMxNzFcIl0gPSBcIlxcdTExMURcIjtcbiB0W1wiXFx1MzE3MlwiXSA9IFwiXFx1MTExRVwiO1xuIHRbXCJcXHUzMTczXCJdID0gXCJcXHUxMTIwXCI7XG4gdFtcIlxcdTMxNzRcIl0gPSBcIlxcdTExMjJcIjtcbiB0W1wiXFx1MzE3NVwiXSA9IFwiXFx1MTEyM1wiO1xuIHRbXCJcXHUzMTc2XCJdID0gXCJcXHUxMTI3XCI7XG4gdFtcIlxcdTMxNzdcIl0gPSBcIlxcdTExMjlcIjtcbiB0W1wiXFx1MzE3OFwiXSA9IFwiXFx1MTEyQlwiO1xuIHRbXCJcXHUzMTc5XCJdID0gXCJcXHUxMTJDXCI7XG4gdFtcIlxcdTMxN0FcIl0gPSBcIlxcdTExMkRcIjtcbiB0W1wiXFx1MzE3QlwiXSA9IFwiXFx1MTEyRVwiO1xuIHRbXCJcXHUzMTdDXCJdID0gXCJcXHUxMTJGXCI7XG4gdFtcIlxcdTMxN0RcIl0gPSBcIlxcdTExMzJcIjtcbiB0W1wiXFx1MzE3RVwiXSA9IFwiXFx1MTEzNlwiO1xuIHRbXCJcXHUzMTdGXCJdID0gXCJcXHUxMTQwXCI7XG4gdFtcIlxcdTMxODBcIl0gPSBcIlxcdTExNDdcIjtcbiB0W1wiXFx1MzE4MVwiXSA9IFwiXFx1MTE0Q1wiO1xuIHRbXCJcXHUzMTgyXCJdID0gXCJcXHUxMUYxXCI7XG4gdFtcIlxcdTMxODNcIl0gPSBcIlxcdTExRjJcIjtcbiB0W1wiXFx1MzE4NFwiXSA9IFwiXFx1MTE1N1wiO1xuIHRbXCJcXHUzMTg1XCJdID0gXCJcXHUxMTU4XCI7XG4gdFtcIlxcdTMxODZcIl0gPSBcIlxcdTExNTlcIjtcbiB0W1wiXFx1MzE4N1wiXSA9IFwiXFx1MTE4NFwiO1xuIHRbXCJcXHUzMTg4XCJdID0gXCJcXHUxMTg1XCI7XG4gdFtcIlxcdTMxODlcIl0gPSBcIlxcdTExODhcIjtcbiB0W1wiXFx1MzE4QVwiXSA9IFwiXFx1MTE5MVwiO1xuIHRbXCJcXHUzMThCXCJdID0gXCJcXHUxMTkyXCI7XG4gdFtcIlxcdTMxOENcIl0gPSBcIlxcdTExOTRcIjtcbiB0W1wiXFx1MzE4RFwiXSA9IFwiXFx1MTE5RVwiO1xuIHRbXCJcXHUzMThFXCJdID0gXCJcXHUxMUExXCI7XG4gdFtcIlxcdTMyMDBcIl0gPSBcIlxcdTAwMjhcXHUxMTAwXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjAxXCJdID0gXCJcXHUwMDI4XFx1MTEwMlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwMlwiXSA9IFwiXFx1MDAyOFxcdTExMDNcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDNcIl0gPSBcIlxcdTAwMjhcXHUxMTA1XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjA0XCJdID0gXCJcXHUwMDI4XFx1MTEwNlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwNVwiXSA9IFwiXFx1MDAyOFxcdTExMDdcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDZcIl0gPSBcIlxcdTAwMjhcXHUxMTA5XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjA3XCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwOFwiXSA9IFwiXFx1MDAyOFxcdTExMENcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMDlcIl0gPSBcIlxcdTAwMjhcXHUxMTBFXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBBXCJdID0gXCJcXHUwMDI4XFx1MTEwRlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwQlwiXSA9IFwiXFx1MDAyOFxcdTExMTBcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMENcIl0gPSBcIlxcdTAwMjhcXHUxMTExXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBEXCJdID0gXCJcXHUwMDI4XFx1MTExMlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIwRVwiXSA9IFwiXFx1MDAyOFxcdTExMDBcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjBGXCJdID0gXCJcXHUwMDI4XFx1MTEwMlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTBcIl0gPSBcIlxcdTAwMjhcXHUxMTAzXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxMVwiXSA9IFwiXFx1MDAyOFxcdTExMDVcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjEyXCJdID0gXCJcXHUwMDI4XFx1MTEwNlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTNcIl0gPSBcIlxcdTAwMjhcXHUxMTA3XFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxNFwiXSA9IFwiXFx1MDAyOFxcdTExMDlcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjE1XCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTZcIl0gPSBcIlxcdTAwMjhcXHUxMTBDXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxN1wiXSA9IFwiXFx1MDAyOFxcdTExMEVcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjE4XCJdID0gXCJcXHUwMDI4XFx1MTEwRlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMTlcIl0gPSBcIlxcdTAwMjhcXHUxMTEwXFx1MTE2MVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxQVwiXSA9IFwiXFx1MDAyOFxcdTExMTFcXHUxMTYxXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjFCXCJdID0gXCJcXHUwMDI4XFx1MTExMlxcdTExNjFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMUNcIl0gPSBcIlxcdTAwMjhcXHUxMTBDXFx1MTE2RVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIxRFwiXSA9IFwiXFx1MDAyOFxcdTExMEJcXHUxMTY5XFx1MTEwQ1xcdTExNjVcXHUxMUFCXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjFFXCJdID0gXCJcXHUwMDI4XFx1MTEwQlxcdTExNjlcXHUxMTEyXFx1MTE2RVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyMFwiXSA9IFwiXFx1MDAyOFxcdTRFMDBcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjFcIl0gPSBcIlxcdTAwMjhcXHU0RThDXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjIyXCJdID0gXCJcXHUwMDI4XFx1NEUwOVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyM1wiXSA9IFwiXFx1MDAyOFxcdTU2REJcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjRcIl0gPSBcIlxcdTAwMjhcXHU0RTk0XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjI1XCJdID0gXCJcXHUwMDI4XFx1NTE2RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyNlwiXSA9IFwiXFx1MDAyOFxcdTRFMDNcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMjdcIl0gPSBcIlxcdTAwMjhcXHU1MTZCXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjI4XCJdID0gXCJcXHUwMDI4XFx1NEU1RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyOVwiXSA9IFwiXFx1MDAyOFxcdTUzNDFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMkFcIl0gPSBcIlxcdTAwMjhcXHU2NzA4XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjJCXCJdID0gXCJcXHUwMDI4XFx1NzA2QlxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyQ1wiXSA9IFwiXFx1MDAyOFxcdTZDMzRcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMkRcIl0gPSBcIlxcdTAwMjhcXHU2NzI4XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjJFXCJdID0gXCJcXHUwMDI4XFx1OTFEMVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIyRlwiXSA9IFwiXFx1MDAyOFxcdTU3MUZcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzBcIl0gPSBcIlxcdTAwMjhcXHU2NUU1XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjMxXCJdID0gXCJcXHUwMDI4XFx1NjgyQVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzMlwiXSA9IFwiXFx1MDAyOFxcdTY3MDlcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzNcIl0gPSBcIlxcdTAwMjhcXHU3OTNFXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjM0XCJdID0gXCJcXHUwMDI4XFx1NTQwRFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzNVwiXSA9IFwiXFx1MDAyOFxcdTcyNzlcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzZcIl0gPSBcIlxcdTAwMjhcXHU4Q0ExXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjM3XCJdID0gXCJcXHUwMDI4XFx1Nzk1RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzOFwiXSA9IFwiXFx1MDAyOFxcdTUyQjRcXHUwMDI5XCI7XG4gdFtcIlxcdTMyMzlcIl0gPSBcIlxcdTAwMjhcXHU0RUUzXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjNBXCJdID0gXCJcXHUwMDI4XFx1NTQ3Q1xcdTAwMjlcIjtcbiB0W1wiXFx1MzIzQlwiXSA9IFwiXFx1MDAyOFxcdTVCNjZcXHUwMDI5XCI7XG4gdFtcIlxcdTMyM0NcIl0gPSBcIlxcdTAwMjhcXHU3NkUzXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjNEXCJdID0gXCJcXHUwMDI4XFx1NEYwMVxcdTAwMjlcIjtcbiB0W1wiXFx1MzIzRVwiXSA9IFwiXFx1MDAyOFxcdThDQzdcXHUwMDI5XCI7XG4gdFtcIlxcdTMyM0ZcIl0gPSBcIlxcdTAwMjhcXHU1MzU0XFx1MDAyOVwiO1xuIHRbXCJcXHUzMjQwXCJdID0gXCJcXHUwMDI4XFx1Nzk2RFxcdTAwMjlcIjtcbiB0W1wiXFx1MzI0MVwiXSA9IFwiXFx1MDAyOFxcdTRGMTFcXHUwMDI5XCI7XG4gdFtcIlxcdTMyNDJcIl0gPSBcIlxcdTAwMjhcXHU4MUVBXFx1MDAyOVwiO1xuIHRbXCJcXHUzMjQzXCJdID0gXCJcXHUwMDI4XFx1ODFGM1xcdTAwMjlcIjtcbiB0W1wiXFx1MzJDMFwiXSA9IFwiXFx1MDAzMVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDMVwiXSA9IFwiXFx1MDAzMlxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDMlwiXSA9IFwiXFx1MDAzM1xcdTY3MDhcIjtcbiB0W1wiXFx1MzJDM1wiXSA9IFwiXFx1MDAzNFxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNFwiXSA9IFwiXFx1MDAzNVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNVwiXSA9IFwiXFx1MDAzNlxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDNlwiXSA9IFwiXFx1MDAzN1xcdTY3MDhcIjtcbiB0W1wiXFx1MzJDN1wiXSA9IFwiXFx1MDAzOFxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDOFwiXSA9IFwiXFx1MDAzOVxcdTY3MDhcIjtcbiB0W1wiXFx1MzJDOVwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU2NzA4XCI7XG4gdFtcIlxcdTMyQ0FcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NjcwOFwiO1xuIHRbXCJcXHUzMkNCXCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTY3MDhcIjtcbiB0W1wiXFx1MzM1OFwiXSA9IFwiXFx1MDAzMFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1OVwiXSA9IFwiXFx1MDAzMVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1QVwiXSA9IFwiXFx1MDAzMlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1QlwiXSA9IFwiXFx1MDAzM1xcdTcwQjlcIjtcbiB0W1wiXFx1MzM1Q1wiXSA9IFwiXFx1MDAzNFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RFwiXSA9IFwiXFx1MDAzNVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RVwiXSA9IFwiXFx1MDAzNlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM1RlwiXSA9IFwiXFx1MDAzN1xcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MFwiXSA9IFwiXFx1MDAzOFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MVwiXSA9IFwiXFx1MDAzOVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2MlwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjNcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzY0XCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2NVwiXSA9IFwiXFx1MDAzMVxcdTAwMzNcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjZcIl0gPSBcIlxcdTAwMzFcXHUwMDM0XFx1NzBCOVwiO1xuIHRbXCJcXHUzMzY3XCJdID0gXCJcXHUwMDMxXFx1MDAzNVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2OFwiXSA9IFwiXFx1MDAzMVxcdTAwMzZcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNjlcIl0gPSBcIlxcdTAwMzFcXHUwMDM3XFx1NzBCOVwiO1xuIHRbXCJcXHUzMzZBXCJdID0gXCJcXHUwMDMxXFx1MDAzOFxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2QlwiXSA9IFwiXFx1MDAzMVxcdTAwMzlcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNkNcIl0gPSBcIlxcdTAwMzJcXHUwMDMwXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzZEXCJdID0gXCJcXHUwMDMyXFx1MDAzMVxcdTcwQjlcIjtcbiB0W1wiXFx1MzM2RVwiXSA9IFwiXFx1MDAzMlxcdTAwMzJcXHU3MEI5XCI7XG4gdFtcIlxcdTMzNkZcIl0gPSBcIlxcdTAwMzJcXHUwMDMzXFx1NzBCOVwiO1xuIHRbXCJcXHUzMzcwXCJdID0gXCJcXHUwMDMyXFx1MDAzNFxcdTcwQjlcIjtcbiB0W1wiXFx1MzNFMFwiXSA9IFwiXFx1MDAzMVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFMVwiXSA9IFwiXFx1MDAzMlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFMlwiXSA9IFwiXFx1MDAzM1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNFM1wiXSA9IFwiXFx1MDAzNFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNFwiXSA9IFwiXFx1MDAzNVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNVwiXSA9IFwiXFx1MDAzNlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFNlwiXSA9IFwiXFx1MDAzN1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNFN1wiXSA9IFwiXFx1MDAzOFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFOFwiXSA9IFwiXFx1MDAzOVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFOVwiXSA9IFwiXFx1MDAzMVxcdTAwMzBcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRUFcIl0gPSBcIlxcdTAwMzFcXHUwMDMxXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0VCXCJdID0gXCJcXHUwMDMxXFx1MDAzMlxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFQ1wiXSA9IFwiXFx1MDAzMVxcdTAwMzNcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRURcIl0gPSBcIlxcdTAwMzFcXHUwMDM0XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0VFXCJdID0gXCJcXHUwMDMxXFx1MDAzNVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNFRlwiXSA9IFwiXFx1MDAzMVxcdTAwMzZcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjBcIl0gPSBcIlxcdTAwMzFcXHUwMDM3XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0YxXCJdID0gXCJcXHUwMDMxXFx1MDAzOFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGMlwiXSA9IFwiXFx1MDAzMVxcdTAwMzlcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjNcIl0gPSBcIlxcdTAwMzJcXHUwMDMwXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0Y0XCJdID0gXCJcXHUwMDMyXFx1MDAzMVxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGNVwiXSA9IFwiXFx1MDAzMlxcdTAwMzJcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjZcIl0gPSBcIlxcdTAwMzJcXHUwMDMzXFx1NjVFNVwiO1xuIHRbXCJcXHUzM0Y3XCJdID0gXCJcXHUwMDMyXFx1MDAzNFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGOFwiXSA9IFwiXFx1MDAzMlxcdTAwMzVcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRjlcIl0gPSBcIlxcdTAwMzJcXHUwMDM2XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0ZBXCJdID0gXCJcXHUwMDMyXFx1MDAzN1xcdTY1RTVcIjtcbiB0W1wiXFx1MzNGQlwiXSA9IFwiXFx1MDAzMlxcdTAwMzhcXHU2NUU1XCI7XG4gdFtcIlxcdTMzRkNcIl0gPSBcIlxcdTAwMzJcXHUwMDM5XFx1NjVFNVwiO1xuIHRbXCJcXHUzM0ZEXCJdID0gXCJcXHUwMDMzXFx1MDAzMFxcdTY1RTVcIjtcbiB0W1wiXFx1MzNGRVwiXSA9IFwiXFx1MDAzM1xcdTAwMzFcXHU2NUU1XCI7XG4gdFtcIlxcdUZCMDBcIl0gPSBcIlxcdTAwNjZcXHUwMDY2XCI7XG4gdFtcIlxcdUZCMDFcIl0gPSBcIlxcdTAwNjZcXHUwMDY5XCI7XG4gdFtcIlxcdUZCMDJcIl0gPSBcIlxcdTAwNjZcXHUwMDZDXCI7XG4gdFtcIlxcdUZCMDNcIl0gPSBcIlxcdTAwNjZcXHUwMDY2XFx1MDA2OVwiO1xuIHRbXCJcXHVGQjA0XCJdID0gXCJcXHUwMDY2XFx1MDA2NlxcdTAwNkNcIjtcbiB0W1wiXFx1RkIwNVwiXSA9IFwiXFx1MDE3RlxcdTAwNzRcIjtcbiB0W1wiXFx1RkIwNlwiXSA9IFwiXFx1MDA3M1xcdTAwNzRcIjtcbiB0W1wiXFx1RkIxM1wiXSA9IFwiXFx1MDU3NFxcdTA1NzZcIjtcbiB0W1wiXFx1RkIxNFwiXSA9IFwiXFx1MDU3NFxcdTA1NjVcIjtcbiB0W1wiXFx1RkIxNVwiXSA9IFwiXFx1MDU3NFxcdTA1NkJcIjtcbiB0W1wiXFx1RkIxNlwiXSA9IFwiXFx1MDU3RVxcdTA1NzZcIjtcbiB0W1wiXFx1RkIxN1wiXSA9IFwiXFx1MDU3NFxcdTA1NkRcIjtcbiB0W1wiXFx1RkI0RlwiXSA9IFwiXFx1MDVEMFxcdTA1RENcIjtcbiB0W1wiXFx1RkI1MFwiXSA9IFwiXFx1MDY3MVwiO1xuIHRbXCJcXHVGQjUxXCJdID0gXCJcXHUwNjcxXCI7XG4gdFtcIlxcdUZCNTJcIl0gPSBcIlxcdTA2N0JcIjtcbiB0W1wiXFx1RkI1M1wiXSA9IFwiXFx1MDY3QlwiO1xuIHRbXCJcXHVGQjU0XCJdID0gXCJcXHUwNjdCXCI7XG4gdFtcIlxcdUZCNTVcIl0gPSBcIlxcdTA2N0JcIjtcbiB0W1wiXFx1RkI1NlwiXSA9IFwiXFx1MDY3RVwiO1xuIHRbXCJcXHVGQjU3XCJdID0gXCJcXHUwNjdFXCI7XG4gdFtcIlxcdUZCNThcIl0gPSBcIlxcdTA2N0VcIjtcbiB0W1wiXFx1RkI1OVwiXSA9IFwiXFx1MDY3RVwiO1xuIHRbXCJcXHVGQjVBXCJdID0gXCJcXHUwNjgwXCI7XG4gdFtcIlxcdUZCNUJcIl0gPSBcIlxcdTA2ODBcIjtcbiB0W1wiXFx1RkI1Q1wiXSA9IFwiXFx1MDY4MFwiO1xuIHRbXCJcXHVGQjVEXCJdID0gXCJcXHUwNjgwXCI7XG4gdFtcIlxcdUZCNUVcIl0gPSBcIlxcdTA2N0FcIjtcbiB0W1wiXFx1RkI1RlwiXSA9IFwiXFx1MDY3QVwiO1xuIHRbXCJcXHVGQjYwXCJdID0gXCJcXHUwNjdBXCI7XG4gdFtcIlxcdUZCNjFcIl0gPSBcIlxcdTA2N0FcIjtcbiB0W1wiXFx1RkI2MlwiXSA9IFwiXFx1MDY3RlwiO1xuIHRbXCJcXHVGQjYzXCJdID0gXCJcXHUwNjdGXCI7XG4gdFtcIlxcdUZCNjRcIl0gPSBcIlxcdTA2N0ZcIjtcbiB0W1wiXFx1RkI2NVwiXSA9IFwiXFx1MDY3RlwiO1xuIHRbXCJcXHVGQjY2XCJdID0gXCJcXHUwNjc5XCI7XG4gdFtcIlxcdUZCNjdcIl0gPSBcIlxcdTA2NzlcIjtcbiB0W1wiXFx1RkI2OFwiXSA9IFwiXFx1MDY3OVwiO1xuIHRbXCJcXHVGQjY5XCJdID0gXCJcXHUwNjc5XCI7XG4gdFtcIlxcdUZCNkFcIl0gPSBcIlxcdTA2QTRcIjtcbiB0W1wiXFx1RkI2QlwiXSA9IFwiXFx1MDZBNFwiO1xuIHRbXCJcXHVGQjZDXCJdID0gXCJcXHUwNkE0XCI7XG4gdFtcIlxcdUZCNkRcIl0gPSBcIlxcdTA2QTRcIjtcbiB0W1wiXFx1RkI2RVwiXSA9IFwiXFx1MDZBNlwiO1xuIHRbXCJcXHVGQjZGXCJdID0gXCJcXHUwNkE2XCI7XG4gdFtcIlxcdUZCNzBcIl0gPSBcIlxcdTA2QTZcIjtcbiB0W1wiXFx1RkI3MVwiXSA9IFwiXFx1MDZBNlwiO1xuIHRbXCJcXHVGQjcyXCJdID0gXCJcXHUwNjg0XCI7XG4gdFtcIlxcdUZCNzNcIl0gPSBcIlxcdTA2ODRcIjtcbiB0W1wiXFx1RkI3NFwiXSA9IFwiXFx1MDY4NFwiO1xuIHRbXCJcXHVGQjc1XCJdID0gXCJcXHUwNjg0XCI7XG4gdFtcIlxcdUZCNzZcIl0gPSBcIlxcdTA2ODNcIjtcbiB0W1wiXFx1RkI3N1wiXSA9IFwiXFx1MDY4M1wiO1xuIHRbXCJcXHVGQjc4XCJdID0gXCJcXHUwNjgzXCI7XG4gdFtcIlxcdUZCNzlcIl0gPSBcIlxcdTA2ODNcIjtcbiB0W1wiXFx1RkI3QVwiXSA9IFwiXFx1MDY4NlwiO1xuIHRbXCJcXHVGQjdCXCJdID0gXCJcXHUwNjg2XCI7XG4gdFtcIlxcdUZCN0NcIl0gPSBcIlxcdTA2ODZcIjtcbiB0W1wiXFx1RkI3RFwiXSA9IFwiXFx1MDY4NlwiO1xuIHRbXCJcXHVGQjdFXCJdID0gXCJcXHUwNjg3XCI7XG4gdFtcIlxcdUZCN0ZcIl0gPSBcIlxcdTA2ODdcIjtcbiB0W1wiXFx1RkI4MFwiXSA9IFwiXFx1MDY4N1wiO1xuIHRbXCJcXHVGQjgxXCJdID0gXCJcXHUwNjg3XCI7XG4gdFtcIlxcdUZCODJcIl0gPSBcIlxcdTA2OERcIjtcbiB0W1wiXFx1RkI4M1wiXSA9IFwiXFx1MDY4RFwiO1xuIHRbXCJcXHVGQjg0XCJdID0gXCJcXHUwNjhDXCI7XG4gdFtcIlxcdUZCODVcIl0gPSBcIlxcdTA2OENcIjtcbiB0W1wiXFx1RkI4NlwiXSA9IFwiXFx1MDY4RVwiO1xuIHRbXCJcXHVGQjg3XCJdID0gXCJcXHUwNjhFXCI7XG4gdFtcIlxcdUZCODhcIl0gPSBcIlxcdTA2ODhcIjtcbiB0W1wiXFx1RkI4OVwiXSA9IFwiXFx1MDY4OFwiO1xuIHRbXCJcXHVGQjhBXCJdID0gXCJcXHUwNjk4XCI7XG4gdFtcIlxcdUZCOEJcIl0gPSBcIlxcdTA2OThcIjtcbiB0W1wiXFx1RkI4Q1wiXSA9IFwiXFx1MDY5MVwiO1xuIHRbXCJcXHVGQjhEXCJdID0gXCJcXHUwNjkxXCI7XG4gdFtcIlxcdUZCOEVcIl0gPSBcIlxcdTA2QTlcIjtcbiB0W1wiXFx1RkI4RlwiXSA9IFwiXFx1MDZBOVwiO1xuIHRbXCJcXHVGQjkwXCJdID0gXCJcXHUwNkE5XCI7XG4gdFtcIlxcdUZCOTFcIl0gPSBcIlxcdTA2QTlcIjtcbiB0W1wiXFx1RkI5MlwiXSA9IFwiXFx1MDZBRlwiO1xuIHRbXCJcXHVGQjkzXCJdID0gXCJcXHUwNkFGXCI7XG4gdFtcIlxcdUZCOTRcIl0gPSBcIlxcdTA2QUZcIjtcbiB0W1wiXFx1RkI5NVwiXSA9IFwiXFx1MDZBRlwiO1xuIHRbXCJcXHVGQjk2XCJdID0gXCJcXHUwNkIzXCI7XG4gdFtcIlxcdUZCOTdcIl0gPSBcIlxcdTA2QjNcIjtcbiB0W1wiXFx1RkI5OFwiXSA9IFwiXFx1MDZCM1wiO1xuIHRbXCJcXHVGQjk5XCJdID0gXCJcXHUwNkIzXCI7XG4gdFtcIlxcdUZCOUFcIl0gPSBcIlxcdTA2QjFcIjtcbiB0W1wiXFx1RkI5QlwiXSA9IFwiXFx1MDZCMVwiO1xuIHRbXCJcXHVGQjlDXCJdID0gXCJcXHUwNkIxXCI7XG4gdFtcIlxcdUZCOURcIl0gPSBcIlxcdTA2QjFcIjtcbiB0W1wiXFx1RkI5RVwiXSA9IFwiXFx1MDZCQVwiO1xuIHRbXCJcXHVGQjlGXCJdID0gXCJcXHUwNkJBXCI7XG4gdFtcIlxcdUZCQTBcIl0gPSBcIlxcdTA2QkJcIjtcbiB0W1wiXFx1RkJBMVwiXSA9IFwiXFx1MDZCQlwiO1xuIHRbXCJcXHVGQkEyXCJdID0gXCJcXHUwNkJCXCI7XG4gdFtcIlxcdUZCQTNcIl0gPSBcIlxcdTA2QkJcIjtcbiB0W1wiXFx1RkJBNFwiXSA9IFwiXFx1MDZDMFwiO1xuIHRbXCJcXHVGQkE1XCJdID0gXCJcXHUwNkMwXCI7XG4gdFtcIlxcdUZCQTZcIl0gPSBcIlxcdTA2QzFcIjtcbiB0W1wiXFx1RkJBN1wiXSA9IFwiXFx1MDZDMVwiO1xuIHRbXCJcXHVGQkE4XCJdID0gXCJcXHUwNkMxXCI7XG4gdFtcIlxcdUZCQTlcIl0gPSBcIlxcdTA2QzFcIjtcbiB0W1wiXFx1RkJBQVwiXSA9IFwiXFx1MDZCRVwiO1xuIHRbXCJcXHVGQkFCXCJdID0gXCJcXHUwNkJFXCI7XG4gdFtcIlxcdUZCQUNcIl0gPSBcIlxcdTA2QkVcIjtcbiB0W1wiXFx1RkJBRFwiXSA9IFwiXFx1MDZCRVwiO1xuIHRbXCJcXHVGQkFFXCJdID0gXCJcXHUwNkQyXCI7XG4gdFtcIlxcdUZCQUZcIl0gPSBcIlxcdTA2RDJcIjtcbiB0W1wiXFx1RkJCMFwiXSA9IFwiXFx1MDZEM1wiO1xuIHRbXCJcXHVGQkIxXCJdID0gXCJcXHUwNkQzXCI7XG4gdFtcIlxcdUZCRDNcIl0gPSBcIlxcdTA2QURcIjtcbiB0W1wiXFx1RkJENFwiXSA9IFwiXFx1MDZBRFwiO1xuIHRbXCJcXHVGQkQ1XCJdID0gXCJcXHUwNkFEXCI7XG4gdFtcIlxcdUZCRDZcIl0gPSBcIlxcdTA2QURcIjtcbiB0W1wiXFx1RkJEN1wiXSA9IFwiXFx1MDZDN1wiO1xuIHRbXCJcXHVGQkQ4XCJdID0gXCJcXHUwNkM3XCI7XG4gdFtcIlxcdUZCRDlcIl0gPSBcIlxcdTA2QzZcIjtcbiB0W1wiXFx1RkJEQVwiXSA9IFwiXFx1MDZDNlwiO1xuIHRbXCJcXHVGQkRCXCJdID0gXCJcXHUwNkM4XCI7XG4gdFtcIlxcdUZCRENcIl0gPSBcIlxcdTA2QzhcIjtcbiB0W1wiXFx1RkJERFwiXSA9IFwiXFx1MDY3N1wiO1xuIHRbXCJcXHVGQkRFXCJdID0gXCJcXHUwNkNCXCI7XG4gdFtcIlxcdUZCREZcIl0gPSBcIlxcdTA2Q0JcIjtcbiB0W1wiXFx1RkJFMFwiXSA9IFwiXFx1MDZDNVwiO1xuIHRbXCJcXHVGQkUxXCJdID0gXCJcXHUwNkM1XCI7XG4gdFtcIlxcdUZCRTJcIl0gPSBcIlxcdTA2QzlcIjtcbiB0W1wiXFx1RkJFM1wiXSA9IFwiXFx1MDZDOVwiO1xuIHRbXCJcXHVGQkU0XCJdID0gXCJcXHUwNkQwXCI7XG4gdFtcIlxcdUZCRTVcIl0gPSBcIlxcdTA2RDBcIjtcbiB0W1wiXFx1RkJFNlwiXSA9IFwiXFx1MDZEMFwiO1xuIHRbXCJcXHVGQkU3XCJdID0gXCJcXHUwNkQwXCI7XG4gdFtcIlxcdUZCRThcIl0gPSBcIlxcdTA2NDlcIjtcbiB0W1wiXFx1RkJFOVwiXSA9IFwiXFx1MDY0OVwiO1xuIHRbXCJcXHVGQkVBXCJdID0gXCJcXHUwNjI2XFx1MDYyN1wiO1xuIHRbXCJcXHVGQkVCXCJdID0gXCJcXHUwNjI2XFx1MDYyN1wiO1xuIHRbXCJcXHVGQkVDXCJdID0gXCJcXHUwNjI2XFx1MDZENVwiO1xuIHRbXCJcXHVGQkVEXCJdID0gXCJcXHUwNjI2XFx1MDZENVwiO1xuIHRbXCJcXHVGQkVFXCJdID0gXCJcXHUwNjI2XFx1MDY0OFwiO1xuIHRbXCJcXHVGQkVGXCJdID0gXCJcXHUwNjI2XFx1MDY0OFwiO1xuIHRbXCJcXHVGQkYwXCJdID0gXCJcXHUwNjI2XFx1MDZDN1wiO1xuIHRbXCJcXHVGQkYxXCJdID0gXCJcXHUwNjI2XFx1MDZDN1wiO1xuIHRbXCJcXHVGQkYyXCJdID0gXCJcXHUwNjI2XFx1MDZDNlwiO1xuIHRbXCJcXHVGQkYzXCJdID0gXCJcXHUwNjI2XFx1MDZDNlwiO1xuIHRbXCJcXHVGQkY0XCJdID0gXCJcXHUwNjI2XFx1MDZDOFwiO1xuIHRbXCJcXHVGQkY1XCJdID0gXCJcXHUwNjI2XFx1MDZDOFwiO1xuIHRbXCJcXHVGQkY2XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY3XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY4XCJdID0gXCJcXHUwNjI2XFx1MDZEMFwiO1xuIHRbXCJcXHVGQkY5XCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZBXCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZCXCJdID0gXCJcXHUwNjI2XFx1MDY0OVwiO1xuIHRbXCJcXHVGQkZDXCJdID0gXCJcXHUwNkNDXCI7XG4gdFtcIlxcdUZCRkRcIl0gPSBcIlxcdTA2Q0NcIjtcbiB0W1wiXFx1RkJGRVwiXSA9IFwiXFx1MDZDQ1wiO1xuIHRbXCJcXHVGQkZGXCJdID0gXCJcXHUwNkNDXCI7XG4gdFtcIlxcdUZDMDBcIl0gPSBcIlxcdTA2MjZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMDFcIl0gPSBcIlxcdTA2MjZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMDJcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMDNcIl0gPSBcIlxcdTA2MjZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMDRcIl0gPSBcIlxcdTA2MjZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMDVcIl0gPSBcIlxcdTA2MjhcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMDZcIl0gPSBcIlxcdTA2MjhcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMDdcIl0gPSBcIlxcdTA2MjhcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMDhcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMDlcIl0gPSBcIlxcdTA2MjhcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMEFcIl0gPSBcIlxcdTA2MjhcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMEJcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMENcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMERcIl0gPSBcIlxcdTA2MkFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMEVcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMEZcIl0gPSBcIlxcdTA2MkFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMTBcIl0gPSBcIlxcdTA2MkFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMTFcIl0gPSBcIlxcdTA2MkJcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMTJcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTNcIl0gPSBcIlxcdTA2MkJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMTRcIl0gPSBcIlxcdTA2MkJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMTVcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMTZcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTdcIl0gPSBcIlxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMThcIl0gPSBcIlxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMTlcIl0gPSBcIlxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMUFcIl0gPSBcIlxcdTA2MkVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMUJcIl0gPSBcIlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMUNcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMURcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMUVcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMUZcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjBcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjFcIl0gPSBcIlxcdTA2MzVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjJcIl0gPSBcIlxcdTA2MzZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMjNcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjRcIl0gPSBcIlxcdTA2MzZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMjVcIl0gPSBcIlxcdTA2MzZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjZcIl0gPSBcIlxcdTA2MzdcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMjdcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjhcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMjlcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkFcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMkJcIl0gPSBcIlxcdTA2M0FcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkNcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMkRcIl0gPSBcIlxcdTA2NDFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMkVcIl0gPSBcIlxcdTA2NDFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMkZcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDMzBcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMzJcIl0gPSBcIlxcdTA2NDFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMzNcIl0gPSBcIlxcdTA2NDJcXHUwNjJEXCI7XG4gdFtcIlxcdUZDMzRcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDMzVcIl0gPSBcIlxcdTA2NDJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDMzZcIl0gPSBcIlxcdTA2NDJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDMzdcIl0gPSBcIlxcdTA2NDNcXHUwNjI3XCI7XG4gdFtcIlxcdUZDMzhcIl0gPSBcIlxcdTA2NDNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDMzlcIl0gPSBcIlxcdTA2NDNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDM0FcIl0gPSBcIlxcdTA2NDNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDM0JcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDM0NcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDM0RcIl0gPSBcIlxcdTA2NDNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDM0VcIl0gPSBcIlxcdTA2NDNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDM0ZcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNDBcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNDFcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNDJcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNDNcIl0gPSBcIlxcdTA2NDRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNDRcIl0gPSBcIlxcdTA2NDRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNDVcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNDZcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNDdcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNDhcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNDlcIl0gPSBcIlxcdTA2NDVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNEFcIl0gPSBcIlxcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNEJcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNENcIl0gPSBcIlxcdTA2NDZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNERcIl0gPSBcIlxcdTA2NDZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNEVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNEZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNTBcIl0gPSBcIlxcdTA2NDZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNTFcIl0gPSBcIlxcdTA2NDdcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNTJcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNTNcIl0gPSBcIlxcdTA2NDdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNTRcIl0gPSBcIlxcdTA2NDdcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNTVcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDNTZcIl0gPSBcIlxcdTA2NEFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDNTdcIl0gPSBcIlxcdTA2NEFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDNThcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNTlcIl0gPSBcIlxcdTA2NEFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNUFcIl0gPSBcIlxcdTA2NEFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNUJcIl0gPSBcIlxcdTA2MzBcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNUNcIl0gPSBcIlxcdTA2MzFcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNURcIl0gPSBcIlxcdTA2NDlcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNUVcIl0gPSBcIlxcdTAwMjBcXHUwNjRDXFx1MDY1MVwiO1xuIHRbXCJcXHVGQzVGXCJdID0gXCJcXHUwMDIwXFx1MDY0RFxcdTA2NTFcIjtcbiB0W1wiXFx1RkM2MFwiXSA9IFwiXFx1MDAyMFxcdTA2NEVcXHUwNjUxXCI7XG4gdFtcIlxcdUZDNjFcIl0gPSBcIlxcdTAwMjBcXHUwNjRGXFx1MDY1MVwiO1xuIHRbXCJcXHVGQzYyXCJdID0gXCJcXHUwMDIwXFx1MDY1MFxcdTA2NTFcIjtcbiB0W1wiXFx1RkM2M1wiXSA9IFwiXFx1MDAyMFxcdTA2NTFcXHUwNjcwXCI7XG4gdFtcIlxcdUZDNjRcIl0gPSBcIlxcdTA2MjZcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNjVcIl0gPSBcIlxcdTA2MjZcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNjZcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNjdcIl0gPSBcIlxcdTA2MjZcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNjhcIl0gPSBcIlxcdTA2MjZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNjlcIl0gPSBcIlxcdTA2MjZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNkFcIl0gPSBcIlxcdTA2MjhcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNkJcIl0gPSBcIlxcdTA2MjhcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNkNcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNkRcIl0gPSBcIlxcdTA2MjhcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNkVcIl0gPSBcIlxcdTA2MjhcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNkZcIl0gPSBcIlxcdTA2MjhcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNzBcIl0gPSBcIlxcdTA2MkFcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNzFcIl0gPSBcIlxcdTA2MkFcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNzJcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNzNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDNzRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDNzVcIl0gPSBcIlxcdTA2MkFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDNzZcIl0gPSBcIlxcdTA2MkJcXHUwNjMxXCI7XG4gdFtcIlxcdUZDNzdcIl0gPSBcIlxcdTA2MkJcXHUwNjMyXCI7XG4gdFtcIlxcdUZDNzhcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDNzlcIl0gPSBcIlxcdTA2MkJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDN0FcIl0gPSBcIlxcdTA2MkJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0JcIl0gPSBcIlxcdTA2MkJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDN0NcIl0gPSBcIlxcdTA2NDFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0RcIl0gPSBcIlxcdTA2NDFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDN0VcIl0gPSBcIlxcdTA2NDJcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDN0ZcIl0gPSBcIlxcdTA2NDJcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODBcIl0gPSBcIlxcdTA2NDNcXHUwNjI3XCI7XG4gdFtcIlxcdUZDODFcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDODJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDODNcIl0gPSBcIlxcdTA2NDNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDODRcIl0gPSBcIlxcdTA2NDNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODVcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDODZcIl0gPSBcIlxcdTA2NDRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDODdcIl0gPSBcIlxcdTA2NDRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDODhcIl0gPSBcIlxcdTA2NDVcXHUwNjI3XCI7XG4gdFtcIlxcdUZDODlcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOEFcIl0gPSBcIlxcdTA2NDZcXHUwNjMxXCI7XG4gdFtcIlxcdUZDOEJcIl0gPSBcIlxcdTA2NDZcXHUwNjMyXCI7XG4gdFtcIlxcdUZDOENcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOERcIl0gPSBcIlxcdTA2NDZcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDOEVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDOEZcIl0gPSBcIlxcdTA2NDZcXHUwNjRBXCI7XG4gdFtcIlxcdUZDOTBcIl0gPSBcIlxcdTA2NDlcXHUwNjcwXCI7XG4gdFtcIlxcdUZDOTFcIl0gPSBcIlxcdTA2NEFcXHUwNjMxXCI7XG4gdFtcIlxcdUZDOTJcIl0gPSBcIlxcdTA2NEFcXHUwNjMyXCI7XG4gdFtcIlxcdUZDOTNcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOTRcIl0gPSBcIlxcdTA2NEFcXHUwNjQ2XCI7XG4gdFtcIlxcdUZDOTVcIl0gPSBcIlxcdTA2NEFcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDOTZcIl0gPSBcIlxcdTA2NEFcXHUwNjRBXCI7XG4gdFtcIlxcdUZDOTdcIl0gPSBcIlxcdTA2MjZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDOThcIl0gPSBcIlxcdTA2MjZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDOTlcIl0gPSBcIlxcdTA2MjZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDOUFcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDOUJcIl0gPSBcIlxcdTA2MjZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDOUNcIl0gPSBcIlxcdTA2MjhcXHUwNjJDXCI7XG4gdFtcIlxcdUZDOURcIl0gPSBcIlxcdTA2MjhcXHUwNjJEXCI7XG4gdFtcIlxcdUZDOUVcIl0gPSBcIlxcdTA2MjhcXHUwNjJFXCI7XG4gdFtcIlxcdUZDOUZcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTBcIl0gPSBcIlxcdTA2MjhcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQTFcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQTJcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQTNcIl0gPSBcIlxcdTA2MkFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQTRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTVcIl0gPSBcIlxcdTA2MkFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQTZcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTdcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQThcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQTlcIl0gPSBcIlxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUFcIl0gPSBcIlxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQUJcIl0gPSBcIlxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUNcIl0gPSBcIlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQURcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQUVcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQUZcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjBcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjFcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjJcIl0gPSBcIlxcdTA2MzVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjNcIl0gPSBcIlxcdTA2MzVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjRcIl0gPSBcIlxcdTA2MzZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQjVcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjZcIl0gPSBcIlxcdTA2MzZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQjdcIl0gPSBcIlxcdTA2MzZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQjhcIl0gPSBcIlxcdTA2MzdcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQjlcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkFcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkJcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkNcIl0gPSBcIlxcdTA2M0FcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkRcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQkVcIl0gPSBcIlxcdTA2NDFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQkZcIl0gPSBcIlxcdTA2NDFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzBcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzJcIl0gPSBcIlxcdTA2NDJcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzNcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzRcIl0gPSBcIlxcdTA2NDNcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQzVcIl0gPSBcIlxcdTA2NDNcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQzZcIl0gPSBcIlxcdTA2NDNcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQzdcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDQzhcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQzlcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQ0FcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXCI7XG4gdFtcIlxcdUZDQ0JcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXCI7XG4gdFtcIlxcdUZDQ0NcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDQ0RcIl0gPSBcIlxcdTA2NDRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDQ0VcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZDQ0ZcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRDBcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRDFcIl0gPSBcIlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDJcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXCI7XG4gdFtcIlxcdUZDRDNcIl0gPSBcIlxcdTA2NDZcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRDRcIl0gPSBcIlxcdTA2NDZcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRDVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRDdcIl0gPSBcIlxcdTA2NDdcXHUwNjJDXCI7XG4gdFtcIlxcdUZDRDhcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRDlcIl0gPSBcIlxcdTA2NDdcXHUwNjcwXCI7XG4gdFtcIlxcdUZDREFcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXCI7XG4gdFtcIlxcdUZDREJcIl0gPSBcIlxcdTA2NEFcXHUwNjJEXCI7XG4gdFtcIlxcdUZDRENcIl0gPSBcIlxcdTA2NEFcXHUwNjJFXCI7XG4gdFtcIlxcdUZDRERcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDREVcIl0gPSBcIlxcdTA2NEFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDREZcIl0gPSBcIlxcdTA2MjZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTBcIl0gPSBcIlxcdTA2MjZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTFcIl0gPSBcIlxcdTA2MjhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTJcIl0gPSBcIlxcdTA2MjhcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTRcIl0gPSBcIlxcdTA2MkFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTVcIl0gPSBcIlxcdTA2MkJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRTZcIl0gPSBcIlxcdTA2MkJcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTdcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRThcIl0gPSBcIlxcdTA2MzNcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRTlcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUFcIl0gPSBcIlxcdTA2MzRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRUJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ0XCI7XG4gdFtcIlxcdUZDRUNcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRURcIl0gPSBcIlxcdTA2NDRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUVcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRUZcIl0gPSBcIlxcdTA2NDZcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRjBcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XCI7XG4gdFtcIlxcdUZDRjFcIl0gPSBcIlxcdTA2NEFcXHUwNjQ3XCI7XG4gdFtcIlxcdUZDRjJcIl0gPSBcIlxcdTA2NDBcXHUwNjRFXFx1MDY1MVwiO1xuIHRbXCJcXHVGQ0YzXCJdID0gXCJcXHUwNjQwXFx1MDY0RlxcdTA2NTFcIjtcbiB0W1wiXFx1RkNGNFwiXSA9IFwiXFx1MDY0MFxcdTA2NTBcXHUwNjUxXCI7XG4gdFtcIlxcdUZDRjVcIl0gPSBcIlxcdTA2MzdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRjZcIl0gPSBcIlxcdTA2MzdcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRjdcIl0gPSBcIlxcdTA2MzlcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRjhcIl0gPSBcIlxcdTA2MzlcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRjlcIl0gPSBcIlxcdTA2M0FcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkFcIl0gPSBcIlxcdTA2M0FcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkJcIl0gPSBcIlxcdTA2MzNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkNcIl0gPSBcIlxcdTA2MzNcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkRcIl0gPSBcIlxcdTA2MzRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZDRkVcIl0gPSBcIlxcdTA2MzRcXHUwNjRBXCI7XG4gdFtcIlxcdUZDRkZcIl0gPSBcIlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDBcIl0gPSBcIlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDFcIl0gPSBcIlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDJcIl0gPSBcIlxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDNcIl0gPSBcIlxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDRcIl0gPSBcIlxcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDVcIl0gPSBcIlxcdTA2MzVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDZcIl0gPSBcIlxcdTA2MzVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDdcIl0gPSBcIlxcdTA2MzZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMDhcIl0gPSBcIlxcdTA2MzZcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMDlcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMEFcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMEJcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMENcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMERcIl0gPSBcIlxcdTA2MzRcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMEVcIl0gPSBcIlxcdTA2MzNcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMEZcIl0gPSBcIlxcdTA2MzVcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMTBcIl0gPSBcIlxcdTA2MzZcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMTFcIl0gPSBcIlxcdTA2MzdcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTJcIl0gPSBcIlxcdTA2MzdcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTNcIl0gPSBcIlxcdTA2MzlcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTRcIl0gPSBcIlxcdTA2MzlcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTVcIl0gPSBcIlxcdTA2M0FcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMTZcIl0gPSBcIlxcdTA2M0FcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTdcIl0gPSBcIlxcdTA2MzNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMThcIl0gPSBcIlxcdTA2MzNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMTlcIl0gPSBcIlxcdTA2MzRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUFcIl0gPSBcIlxcdTA2MzRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMUJcIl0gPSBcIlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUNcIl0gPSBcIlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMURcIl0gPSBcIlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMUVcIl0gPSBcIlxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMUZcIl0gPSBcIlxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjBcIl0gPSBcIlxcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjFcIl0gPSBcIlxcdTA2MzVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjJcIl0gPSBcIlxcdTA2MzVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjNcIl0gPSBcIlxcdTA2MzZcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEMjRcIl0gPSBcIlxcdTA2MzZcXHUwNjRBXCI7XG4gdFtcIlxcdUZEMjVcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMjZcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMjdcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMjhcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMjlcIl0gPSBcIlxcdTA2MzRcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkFcIl0gPSBcIlxcdTA2MzNcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkJcIl0gPSBcIlxcdTA2MzVcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkNcIl0gPSBcIlxcdTA2MzZcXHUwNjMxXCI7XG4gdFtcIlxcdUZEMkRcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMkVcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMkZcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMzBcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMzFcIl0gPSBcIlxcdTA2MzNcXHUwNjQ3XCI7XG4gdFtcIlxcdUZEMzJcIl0gPSBcIlxcdTA2MzRcXHUwNjQ3XCI7XG4gdFtcIlxcdUZEMzNcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEMzRcIl0gPSBcIlxcdTA2MzNcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMzVcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMzZcIl0gPSBcIlxcdTA2MzNcXHUwNjJFXCI7XG4gdFtcIlxcdUZEMzdcIl0gPSBcIlxcdTA2MzRcXHUwNjJDXCI7XG4gdFtcIlxcdUZEMzhcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXCI7XG4gdFtcIlxcdUZEMzlcIl0gPSBcIlxcdTA2MzRcXHUwNjJFXCI7XG4gdFtcIlxcdUZEM0FcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEM0JcIl0gPSBcIlxcdTA2MzhcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEM0NcIl0gPSBcIlxcdTA2MjdcXHUwNjRCXCI7XG4gdFtcIlxcdUZEM0RcIl0gPSBcIlxcdTA2MjdcXHUwNjRCXCI7XG4gdFtcIlxcdUZENTBcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDUxXCJdID0gXCJcXHUwNjJBXFx1MDYyRFxcdTA2MkNcIjtcbiB0W1wiXFx1RkQ1MlwiXSA9IFwiXFx1MDYyQVxcdTA2MkRcXHUwNjJDXCI7XG4gdFtcIlxcdUZENTNcIl0gPSBcIlxcdTA2MkFcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDU0XCJdID0gXCJcXHUwNjJBXFx1MDYyRVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ1NVwiXSA9IFwiXFx1MDYyQVxcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZENTZcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDU3XCJdID0gXCJcXHUwNjJBXFx1MDY0NVxcdTA2MkVcIjtcbiB0W1wiXFx1RkQ1OFwiXSA9IFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZENTlcIl0gPSBcIlxcdTA2MkNcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDVBXCJdID0gXCJcXHUwNjJEXFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ1QlwiXSA9IFwiXFx1MDYyRFxcdTA2NDVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZENUNcIl0gPSBcIlxcdTA2MzNcXHUwNjJEXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDVEXCJdID0gXCJcXHUwNjMzXFx1MDYyQ1xcdTA2MkRcIjtcbiB0W1wiXFx1RkQ1RVwiXSA9IFwiXFx1MDYzM1xcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZENUZcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDYwXCJdID0gXCJcXHUwNjMzXFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ2MVwiXSA9IFwiXFx1MDYzM1xcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZENjJcIl0gPSBcIlxcdTA2MzNcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDYzXCJdID0gXCJcXHUwNjMzXFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2NFwiXSA9IFwiXFx1MDYzNVxcdTA2MkRcXHUwNjJEXCI7XG4gdFtcIlxcdUZENjVcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXFx1MDYyRFwiO1xuIHRbXCJcXHVGRDY2XCJdID0gXCJcXHUwNjM1XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2N1wiXSA9IFwiXFx1MDYzNFxcdTA2MkRcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENjhcIl0gPSBcIlxcdTA2MzRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDY5XCJdID0gXCJcXHUwNjM0XFx1MDYyQ1xcdTA2NEFcIjtcbiB0W1wiXFx1RkQ2QVwiXSA9IFwiXFx1MDYzNFxcdTA2NDVcXHUwNjJFXCI7XG4gdFtcIlxcdUZENkJcIl0gPSBcIlxcdTA2MzRcXHUwNjQ1XFx1MDYyRVwiO1xuIHRbXCJcXHVGRDZDXCJdID0gXCJcXHUwNjM0XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ2RFwiXSA9IFwiXFx1MDYzNFxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENkVcIl0gPSBcIlxcdTA2MzZcXHUwNjJEXFx1MDY0OVwiO1xuIHRbXCJcXHVGRDZGXCJdID0gXCJcXHUwNjM2XFx1MDYyRVxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ3MFwiXSA9IFwiXFx1MDYzNlxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzFcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XFx1MDYyRFwiO1xuIHRbXCJcXHVGRDcyXCJdID0gXCJcXHUwNjM3XFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ3M1wiXSA9IFwiXFx1MDYzN1xcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzRcIl0gPSBcIlxcdTA2MzdcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDc1XCJdID0gXCJcXHUwNjM5XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ3NlwiXSA9IFwiXFx1MDYzOVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZENzdcIl0gPSBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDc4XCJdID0gXCJcXHUwNjM5XFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ3OVwiXSA9IFwiXFx1MDYzQVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEN0FcIl0gPSBcIlxcdTA2M0FcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDdCXCJdID0gXCJcXHUwNjNBXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ3Q1wiXSA9IFwiXFx1MDY0MVxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEN0RcIl0gPSBcIlxcdTA2NDFcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDdFXCJdID0gXCJcXHUwNjQyXFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ3RlwiXSA9IFwiXFx1MDY0MlxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEODBcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDgxXCJdID0gXCJcXHUwNjQ0XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ4MlwiXSA9IFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEODNcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDg0XCJdID0gXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2MkNcIjtcbiB0W1wiXFx1RkQ4NVwiXSA9IFwiXFx1MDY0NFxcdTA2MkVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEODZcIl0gPSBcIlxcdTA2NDRcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDg3XCJdID0gXCJcXHUwNjQ0XFx1MDY0NVxcdTA2MkRcIjtcbiB0W1wiXFx1RkQ4OFwiXSA9IFwiXFx1MDY0NFxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZEODlcIl0gPSBcIlxcdTA2NDVcXHUwNjJEXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRDhBXCJdID0gXCJcXHUwNjQ1XFx1MDYyRFxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ4QlwiXSA9IFwiXFx1MDY0NVxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEOENcIl0gPSBcIlxcdTA2NDVcXHUwNjJDXFx1MDYyRFwiO1xuIHRbXCJcXHVGRDhEXCJdID0gXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ4RVwiXSA9IFwiXFx1MDY0NVxcdTA2MkVcXHUwNjJDXCI7XG4gdFtcIlxcdUZEOEZcIl0gPSBcIlxcdTA2NDVcXHUwNjJFXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDkyXCJdID0gXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2MkVcIjtcbiB0W1wiXFx1RkQ5M1wiXSA9IFwiXFx1MDY0N1xcdTA2NDVcXHUwNjJDXCI7XG4gdFtcIlxcdUZEOTRcIl0gPSBcIlxcdTA2NDdcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDk1XCJdID0gXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NDVcIjtcbiB0W1wiXFx1RkQ5NlwiXSA9IFwiXFx1MDY0NlxcdTA2MkRcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEOTdcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGRDk4XCJdID0gXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkQ5OVwiXSA9IFwiXFx1MDY0NlxcdTA2MkNcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEOUFcIl0gPSBcIlxcdTA2NDZcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGRDlCXCJdID0gXCJcXHUwNjQ2XFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkQ5Q1wiXSA9IFwiXFx1MDY0QVxcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEOURcIl0gPSBcIlxcdTA2NEFcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGRDlFXCJdID0gXCJcXHUwNjI4XFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkQ5RlwiXSA9IFwiXFx1MDYyQVxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQTBcIl0gPSBcIlxcdTA2MkFcXHUwNjJDXFx1MDY0OVwiO1xuIHRbXCJcXHVGREExXCJdID0gXCJcXHUwNjJBXFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBMlwiXSA9IFwiXFx1MDYyQVxcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEQTNcIl0gPSBcIlxcdTA2MkFcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREE0XCJdID0gXCJcXHUwNjJBXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkRBNVwiXSA9IFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQTZcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXFx1MDY0OVwiO1xuIHRbXCJcXHVGREE3XCJdID0gXCJcXHUwNjJDXFx1MDY0NVxcdTA2NDlcIjtcbiB0W1wiXFx1RkRBOFwiXSA9IFwiXFx1MDYzM1xcdTA2MkVcXHUwNjQ5XCI7XG4gdFtcIlxcdUZEQTlcIl0gPSBcIlxcdTA2MzVcXHUwNjJEXFx1MDY0QVwiO1xuIHRbXCJcXHVGREFBXCJdID0gXCJcXHUwNjM0XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBQlwiXSA9IFwiXFx1MDYzNlxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQUNcIl0gPSBcIlxcdTA2NDRcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGREFEXCJdID0gXCJcXHUwNjQ0XFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRBRVwiXSA9IFwiXFx1MDY0QVxcdTA2MkRcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQUZcIl0gPSBcIlxcdTA2NEFcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGREIwXCJdID0gXCJcXHUwNjRBXFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCMVwiXSA9IFwiXFx1MDY0NVxcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQjJcIl0gPSBcIlxcdTA2NDJcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREIzXCJdID0gXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCNFwiXSA9IFwiXFx1MDY0MlxcdTA2NDVcXHUwNjJEXCI7XG4gdFtcIlxcdUZEQjVcIl0gPSBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0NVwiO1xuIHRbXCJcXHVGREI2XCJdID0gXCJcXHUwNjM5XFx1MDY0NVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCN1wiXSA9IFwiXFx1MDY0M1xcdTA2NDVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQjhcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDYyRFwiO1xuIHRbXCJcXHVGREI5XCJdID0gXCJcXHUwNjQ1XFx1MDYyRVxcdTA2NEFcIjtcbiB0W1wiXFx1RkRCQVwiXSA9IFwiXFx1MDY0NFxcdTA2MkNcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEQkJcIl0gPSBcIlxcdTA2NDNcXHUwNjQ1XFx1MDY0NVwiO1xuIHRbXCJcXHVGREJDXCJdID0gXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2NDVcIjtcbiB0W1wiXFx1RkRCRFwiXSA9IFwiXFx1MDY0NlxcdTA2MkNcXHUwNjJEXCI7XG4gdFtcIlxcdUZEQkVcIl0gPSBcIlxcdTA2MkNcXHUwNjJEXFx1MDY0QVwiO1xuIHRbXCJcXHVGREJGXCJdID0gXCJcXHUwNjJEXFx1MDYyQ1xcdTA2NEFcIjtcbiB0W1wiXFx1RkRDMFwiXSA9IFwiXFx1MDY0NVxcdTA2MkNcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQzFcIl0gPSBcIlxcdTA2NDFcXHUwNjQ1XFx1MDY0QVwiO1xuIHRbXCJcXHVGREMyXCJdID0gXCJcXHUwNjI4XFx1MDYyRFxcdTA2NEFcIjtcbiB0W1wiXFx1RkRDM1wiXSA9IFwiXFx1MDY0M1xcdTA2NDVcXHUwNjQ1XCI7XG4gdFtcIlxcdUZEQzRcIl0gPSBcIlxcdTA2MzlcXHUwNjJDXFx1MDY0NVwiO1xuIHRbXCJcXHVGREM1XCJdID0gXCJcXHUwNjM1XFx1MDY0NVxcdTA2NDVcIjtcbiB0W1wiXFx1RkRDNlwiXSA9IFwiXFx1MDYzM1xcdTA2MkVcXHUwNjRBXCI7XG4gdFtcIlxcdUZEQzdcIl0gPSBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0QVwiO1xuIHRbXCJcXHVGRTQ5XCJdID0gXCJcXHUyMDNFXCI7XG4gdFtcIlxcdUZFNEFcIl0gPSBcIlxcdTIwM0VcIjtcbiB0W1wiXFx1RkU0QlwiXSA9IFwiXFx1MjAzRVwiO1xuIHRbXCJcXHVGRTRDXCJdID0gXCJcXHUyMDNFXCI7XG4gdFtcIlxcdUZFNERcIl0gPSBcIlxcdTAwNUZcIjtcbiB0W1wiXFx1RkU0RVwiXSA9IFwiXFx1MDA1RlwiO1xuIHRbXCJcXHVGRTRGXCJdID0gXCJcXHUwMDVGXCI7XG4gdFtcIlxcdUZFODBcIl0gPSBcIlxcdTA2MjFcIjtcbiB0W1wiXFx1RkU4MVwiXSA9IFwiXFx1MDYyMlwiO1xuIHRbXCJcXHVGRTgyXCJdID0gXCJcXHUwNjIyXCI7XG4gdFtcIlxcdUZFODNcIl0gPSBcIlxcdTA2MjNcIjtcbiB0W1wiXFx1RkU4NFwiXSA9IFwiXFx1MDYyM1wiO1xuIHRbXCJcXHVGRTg1XCJdID0gXCJcXHUwNjI0XCI7XG4gdFtcIlxcdUZFODZcIl0gPSBcIlxcdTA2MjRcIjtcbiB0W1wiXFx1RkU4N1wiXSA9IFwiXFx1MDYyNVwiO1xuIHRbXCJcXHVGRTg4XCJdID0gXCJcXHUwNjI1XCI7XG4gdFtcIlxcdUZFODlcIl0gPSBcIlxcdTA2MjZcIjtcbiB0W1wiXFx1RkU4QVwiXSA9IFwiXFx1MDYyNlwiO1xuIHRbXCJcXHVGRThCXCJdID0gXCJcXHUwNjI2XCI7XG4gdFtcIlxcdUZFOENcIl0gPSBcIlxcdTA2MjZcIjtcbiB0W1wiXFx1RkU4RFwiXSA9IFwiXFx1MDYyN1wiO1xuIHRbXCJcXHVGRThFXCJdID0gXCJcXHUwNjI3XCI7XG4gdFtcIlxcdUZFOEZcIl0gPSBcIlxcdTA2MjhcIjtcbiB0W1wiXFx1RkU5MFwiXSA9IFwiXFx1MDYyOFwiO1xuIHRbXCJcXHVGRTkxXCJdID0gXCJcXHUwNjI4XCI7XG4gdFtcIlxcdUZFOTJcIl0gPSBcIlxcdTA2MjhcIjtcbiB0W1wiXFx1RkU5M1wiXSA9IFwiXFx1MDYyOVwiO1xuIHRbXCJcXHVGRTk0XCJdID0gXCJcXHUwNjI5XCI7XG4gdFtcIlxcdUZFOTVcIl0gPSBcIlxcdTA2MkFcIjtcbiB0W1wiXFx1RkU5NlwiXSA9IFwiXFx1MDYyQVwiO1xuIHRbXCJcXHVGRTk3XCJdID0gXCJcXHUwNjJBXCI7XG4gdFtcIlxcdUZFOThcIl0gPSBcIlxcdTA2MkFcIjtcbiB0W1wiXFx1RkU5OVwiXSA9IFwiXFx1MDYyQlwiO1xuIHRbXCJcXHVGRTlBXCJdID0gXCJcXHUwNjJCXCI7XG4gdFtcIlxcdUZFOUJcIl0gPSBcIlxcdTA2MkJcIjtcbiB0W1wiXFx1RkU5Q1wiXSA9IFwiXFx1MDYyQlwiO1xuIHRbXCJcXHVGRTlEXCJdID0gXCJcXHUwNjJDXCI7XG4gdFtcIlxcdUZFOUVcIl0gPSBcIlxcdTA2MkNcIjtcbiB0W1wiXFx1RkU5RlwiXSA9IFwiXFx1MDYyQ1wiO1xuIHRbXCJcXHVGRUEwXCJdID0gXCJcXHUwNjJDXCI7XG4gdFtcIlxcdUZFQTFcIl0gPSBcIlxcdTA2MkRcIjtcbiB0W1wiXFx1RkVBMlwiXSA9IFwiXFx1MDYyRFwiO1xuIHRbXCJcXHVGRUEzXCJdID0gXCJcXHUwNjJEXCI7XG4gdFtcIlxcdUZFQTRcIl0gPSBcIlxcdTA2MkRcIjtcbiB0W1wiXFx1RkVBNVwiXSA9IFwiXFx1MDYyRVwiO1xuIHRbXCJcXHVGRUE2XCJdID0gXCJcXHUwNjJFXCI7XG4gdFtcIlxcdUZFQTdcIl0gPSBcIlxcdTA2MkVcIjtcbiB0W1wiXFx1RkVBOFwiXSA9IFwiXFx1MDYyRVwiO1xuIHRbXCJcXHVGRUE5XCJdID0gXCJcXHUwNjJGXCI7XG4gdFtcIlxcdUZFQUFcIl0gPSBcIlxcdTA2MkZcIjtcbiB0W1wiXFx1RkVBQlwiXSA9IFwiXFx1MDYzMFwiO1xuIHRbXCJcXHVGRUFDXCJdID0gXCJcXHUwNjMwXCI7XG4gdFtcIlxcdUZFQURcIl0gPSBcIlxcdTA2MzFcIjtcbiB0W1wiXFx1RkVBRVwiXSA9IFwiXFx1MDYzMVwiO1xuIHRbXCJcXHVGRUFGXCJdID0gXCJcXHUwNjMyXCI7XG4gdFtcIlxcdUZFQjBcIl0gPSBcIlxcdTA2MzJcIjtcbiB0W1wiXFx1RkVCMVwiXSA9IFwiXFx1MDYzM1wiO1xuIHRbXCJcXHVGRUIyXCJdID0gXCJcXHUwNjMzXCI7XG4gdFtcIlxcdUZFQjNcIl0gPSBcIlxcdTA2MzNcIjtcbiB0W1wiXFx1RkVCNFwiXSA9IFwiXFx1MDYzM1wiO1xuIHRbXCJcXHVGRUI1XCJdID0gXCJcXHUwNjM0XCI7XG4gdFtcIlxcdUZFQjZcIl0gPSBcIlxcdTA2MzRcIjtcbiB0W1wiXFx1RkVCN1wiXSA9IFwiXFx1MDYzNFwiO1xuIHRbXCJcXHVGRUI4XCJdID0gXCJcXHUwNjM0XCI7XG4gdFtcIlxcdUZFQjlcIl0gPSBcIlxcdTA2MzVcIjtcbiB0W1wiXFx1RkVCQVwiXSA9IFwiXFx1MDYzNVwiO1xuIHRbXCJcXHVGRUJCXCJdID0gXCJcXHUwNjM1XCI7XG4gdFtcIlxcdUZFQkNcIl0gPSBcIlxcdTA2MzVcIjtcbiB0W1wiXFx1RkVCRFwiXSA9IFwiXFx1MDYzNlwiO1xuIHRbXCJcXHVGRUJFXCJdID0gXCJcXHUwNjM2XCI7XG4gdFtcIlxcdUZFQkZcIl0gPSBcIlxcdTA2MzZcIjtcbiB0W1wiXFx1RkVDMFwiXSA9IFwiXFx1MDYzNlwiO1xuIHRbXCJcXHVGRUMxXCJdID0gXCJcXHUwNjM3XCI7XG4gdFtcIlxcdUZFQzJcIl0gPSBcIlxcdTA2MzdcIjtcbiB0W1wiXFx1RkVDM1wiXSA9IFwiXFx1MDYzN1wiO1xuIHRbXCJcXHVGRUM0XCJdID0gXCJcXHUwNjM3XCI7XG4gdFtcIlxcdUZFQzVcIl0gPSBcIlxcdTA2MzhcIjtcbiB0W1wiXFx1RkVDNlwiXSA9IFwiXFx1MDYzOFwiO1xuIHRbXCJcXHVGRUM3XCJdID0gXCJcXHUwNjM4XCI7XG4gdFtcIlxcdUZFQzhcIl0gPSBcIlxcdTA2MzhcIjtcbiB0W1wiXFx1RkVDOVwiXSA9IFwiXFx1MDYzOVwiO1xuIHRbXCJcXHVGRUNBXCJdID0gXCJcXHUwNjM5XCI7XG4gdFtcIlxcdUZFQ0JcIl0gPSBcIlxcdTA2MzlcIjtcbiB0W1wiXFx1RkVDQ1wiXSA9IFwiXFx1MDYzOVwiO1xuIHRbXCJcXHVGRUNEXCJdID0gXCJcXHUwNjNBXCI7XG4gdFtcIlxcdUZFQ0VcIl0gPSBcIlxcdTA2M0FcIjtcbiB0W1wiXFx1RkVDRlwiXSA9IFwiXFx1MDYzQVwiO1xuIHRbXCJcXHVGRUQwXCJdID0gXCJcXHUwNjNBXCI7XG4gdFtcIlxcdUZFRDFcIl0gPSBcIlxcdTA2NDFcIjtcbiB0W1wiXFx1RkVEMlwiXSA9IFwiXFx1MDY0MVwiO1xuIHRbXCJcXHVGRUQzXCJdID0gXCJcXHUwNjQxXCI7XG4gdFtcIlxcdUZFRDRcIl0gPSBcIlxcdTA2NDFcIjtcbiB0W1wiXFx1RkVENVwiXSA9IFwiXFx1MDY0MlwiO1xuIHRbXCJcXHVGRUQ2XCJdID0gXCJcXHUwNjQyXCI7XG4gdFtcIlxcdUZFRDdcIl0gPSBcIlxcdTA2NDJcIjtcbiB0W1wiXFx1RkVEOFwiXSA9IFwiXFx1MDY0MlwiO1xuIHRbXCJcXHVGRUQ5XCJdID0gXCJcXHUwNjQzXCI7XG4gdFtcIlxcdUZFREFcIl0gPSBcIlxcdTA2NDNcIjtcbiB0W1wiXFx1RkVEQlwiXSA9IFwiXFx1MDY0M1wiO1xuIHRbXCJcXHVGRURDXCJdID0gXCJcXHUwNjQzXCI7XG4gdFtcIlxcdUZFRERcIl0gPSBcIlxcdTA2NDRcIjtcbiB0W1wiXFx1RkVERVwiXSA9IFwiXFx1MDY0NFwiO1xuIHRbXCJcXHVGRURGXCJdID0gXCJcXHUwNjQ0XCI7XG4gdFtcIlxcdUZFRTBcIl0gPSBcIlxcdTA2NDRcIjtcbiB0W1wiXFx1RkVFMVwiXSA9IFwiXFx1MDY0NVwiO1xuIHRbXCJcXHVGRUUyXCJdID0gXCJcXHUwNjQ1XCI7XG4gdFtcIlxcdUZFRTNcIl0gPSBcIlxcdTA2NDVcIjtcbiB0W1wiXFx1RkVFNFwiXSA9IFwiXFx1MDY0NVwiO1xuIHRbXCJcXHVGRUU1XCJdID0gXCJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZFRTZcIl0gPSBcIlxcdTA2NDZcIjtcbiB0W1wiXFx1RkVFN1wiXSA9IFwiXFx1MDY0NlwiO1xuIHRbXCJcXHVGRUU4XCJdID0gXCJcXHUwNjQ2XCI7XG4gdFtcIlxcdUZFRTlcIl0gPSBcIlxcdTA2NDdcIjtcbiB0W1wiXFx1RkVFQVwiXSA9IFwiXFx1MDY0N1wiO1xuIHRbXCJcXHVGRUVCXCJdID0gXCJcXHUwNjQ3XCI7XG4gdFtcIlxcdUZFRUNcIl0gPSBcIlxcdTA2NDdcIjtcbiB0W1wiXFx1RkVFRFwiXSA9IFwiXFx1MDY0OFwiO1xuIHRbXCJcXHVGRUVFXCJdID0gXCJcXHUwNjQ4XCI7XG4gdFtcIlxcdUZFRUZcIl0gPSBcIlxcdTA2NDlcIjtcbiB0W1wiXFx1RkVGMFwiXSA9IFwiXFx1MDY0OVwiO1xuIHRbXCJcXHVGRUYxXCJdID0gXCJcXHUwNjRBXCI7XG4gdFtcIlxcdUZFRjJcIl0gPSBcIlxcdTA2NEFcIjtcbiB0W1wiXFx1RkVGM1wiXSA9IFwiXFx1MDY0QVwiO1xuIHRbXCJcXHVGRUY0XCJdID0gXCJcXHUwNjRBXCI7XG4gdFtcIlxcdUZFRjVcIl0gPSBcIlxcdTA2NDRcXHUwNjIyXCI7XG4gdFtcIlxcdUZFRjZcIl0gPSBcIlxcdTA2NDRcXHUwNjIyXCI7XG4gdFtcIlxcdUZFRjdcIl0gPSBcIlxcdTA2NDRcXHUwNjIzXCI7XG4gdFtcIlxcdUZFRjhcIl0gPSBcIlxcdTA2NDRcXHUwNjIzXCI7XG4gdFtcIlxcdUZFRjlcIl0gPSBcIlxcdTA2NDRcXHUwNjI1XCI7XG4gdFtcIlxcdUZFRkFcIl0gPSBcIlxcdTA2NDRcXHUwNjI1XCI7XG4gdFtcIlxcdUZFRkJcIl0gPSBcIlxcdTA2NDRcXHUwNjI3XCI7XG4gdFtcIlxcdUZFRkNcIl0gPSBcIlxcdTA2NDRcXHUwNjI3XCI7XG59KTtcbmZ1bmN0aW9uIHJldmVyc2VJZlJ0bChjaGFycykge1xuIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiBpZiAoY2hhcnNMZW5ndGggPD0gMSB8fCAhaXNSVExSYW5nZUZvcihjaGFycy5jaGFyQ29kZUF0KDApKSkge1xuICByZXR1cm4gY2hhcnM7XG4gfVxuIHZhciBzID0gXCJcIjtcbiBmb3IgKHZhciBpaSA9IGNoYXJzTGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xuICBzICs9IGNoYXJzW2lpXTtcbiB9XG4gcmV0dXJuIHM7XG59XG5leHBvcnRzLm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzID0gbWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXM7XG5leHBvcnRzLnJldmVyc2VJZlJ0bCA9IHJldmVyc2VJZlJ0bDtcbmV4cG9ydHMuZ2V0VW5pY29kZVJhbmdlRm9yID0gZ2V0VW5pY29kZVJhbmdlRm9yO1xuZXhwb3J0cy5nZXROb3JtYWxpemVkVW5pY29kZXMgPSBnZXROb3JtYWxpemVkVW5pY29kZXM7XG5leHBvcnRzLmdldFVuaWNvZGVGb3JHbHlwaCA9IGdldFVuaWNvZGVGb3JHbHlwaDtcblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NmZl9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMxKTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM0KTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIEZvbnRSZW5kZXJlckZhY3RvcnkgPSBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gZ2V0TG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKHN1YnJzKSB7XG4gICAgY29uc3QgbnVtU3VicnMgPSBzdWJycy5sZW5ndGg7XG4gICAgbGV0IGJpYXMgPSAzMjc2ODtcblxuICAgIGlmIChudW1TdWJycyA8IDEyNDApIHtcbiAgICAgIGJpYXMgPSAxMDc7XG4gICAgfSBlbHNlIGlmIChudW1TdWJycyA8IDMzOTAwKSB7XG4gICAgICBiaWFzID0gMTEzMTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmlhcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ21hcChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIG9mZnNldCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIDIpID09PSAxID8gZ2V0TG9uZyhkYXRhLCBzdGFydCArIDgpIDogZ2V0TG9uZyhkYXRhLCBzdGFydCArIDE2KTtcbiAgICB2YXIgZm9ybWF0ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0KTtcbiAgICB2YXIgcmFuZ2VzLCBwLCBpO1xuXG4gICAgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgICAgZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMik7XG4gICAgICB2YXIgc2VnQ291bnQgPSBnZXRVc2hvcnQoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA2KSA+PiAxO1xuICAgICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTQ7XG4gICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICByYW5nZXNbaV0gPSB7XG4gICAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcCArPSAyO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgIHJhbmdlc1tpXS5zdGFydCA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICByYW5nZXNbaV0uaWREZWx0YSA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgICB2YXIgaWRPZmZzZXQgPSBnZXRVc2hvcnQoZGF0YSwgcCk7XG5cbiAgICAgICAgaWYgKGlkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDE7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgcmFuZ2VzW2ldLmlkc1tqXSA9IGdldFVzaG9ydChkYXRhLCBwICsgaWRPZmZzZXQpO1xuICAgICAgICAgIGlkT2Zmc2V0ICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gMTIpIHtcbiAgICAgIGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA0KTtcbiAgICAgIHZhciBncm91cHMgPSBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMTIpO1xuICAgICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTY7XG4gICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3VwczsgaSsrKSB7XG4gICAgICAgIHJhbmdlcy5wdXNoKHtcbiAgICAgICAgICBzdGFydDogZ2V0TG9uZyhkYXRhLCBwKSxcbiAgICAgICAgICBlbmQ6IGdldExvbmcoZGF0YSwgcCArIDQpLFxuICAgICAgICAgIGlkRGVsdGE6IGdldExvbmcoZGF0YSwgcCArIDgpIC0gZ2V0TG9uZyhkYXRhLCBwKVxuICAgICAgICB9KTtcbiAgICAgICAgcCArPSAxMjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVuc3VwcG9ydGVkIGNtYXA6ICR7Zm9ybWF0fWApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDZmYoZGF0YSwgc3RhcnQsIGVuZCwgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG4gICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIobmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEsIHN0YXJ0LCBlbmQgLSBzdGFydCksIHByb3BlcnRpZXMsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgIHZhciBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2x5cGhzOiBjZmYuY2hhclN0cmluZ3Mub2JqZWN0cyxcbiAgICAgIHN1YnJzOiBjZmYudG9wRGljdC5wcml2YXRlRGljdCAmJiBjZmYudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4ICYmIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyxcbiAgICAgIGdzdWJyczogY2ZmLmdsb2JhbFN1YnJJbmRleCAmJiBjZmYuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsXG4gICAgICBpc0NGRkNJREZvbnQ6IGNmZi5pc0NJREZvbnQsXG4gICAgICBmZFNlbGVjdDogY2ZmLmZkU2VsZWN0LFxuICAgICAgZmRBcnJheTogY2ZmLmZkQXJyYXlcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICB2YXIgaXRlbVNpemUsIGl0ZW1EZWNvZGU7XG5cbiAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGdseXBocyA9IFtdO1xuICAgIHZhciBzdGFydE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgMCk7XG5cbiAgICBmb3IgKHZhciBqID0gaXRlbVNpemU7IGogPCBsb2NhLmxlbmd0aDsgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgdmFyIGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYSwgaik7XG4gICAgICBnbHlwaHMucHVzaChnbHlmLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTtcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaHM7XG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBDbWFwKHJhbmdlcywgdW5pY29kZSkge1xuICAgIHZhciBjb2RlID0gdW5pY29kZS5jb2RlUG9pbnRBdCgwKSxcbiAgICAgICAgZ2lkID0gMDtcbiAgICB2YXIgbCA9IDAsXG4gICAgICAgIHIgPSByYW5nZXMubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChsIDwgcikge1xuICAgICAgdmFyIGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgICAgaWYgKGNvZGUgPCByYW5nZXNbY10uc3RhcnQpIHtcbiAgICAgICAgciA9IGMgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbCA9IGM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJhbmdlc1tsXS5zdGFydCA8PSBjb2RlICYmIGNvZGUgPD0gcmFuZ2VzW2xdLmVuZCkge1xuICAgICAgZ2lkID0gcmFuZ2VzW2xdLmlkRGVsdGEgKyAocmFuZ2VzW2xdLmlkcyA/IHJhbmdlc1tsXS5pZHNbY29kZSAtIHJhbmdlc1tsXS5zdGFydF0gOiBjb2RlKSAmIDB4ZmZmZjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2hhckNvZGU6IGNvZGUsXG4gICAgICBnbHlwaElkOiBnaWRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZUdseWYoY29kZSwgY21kcywgZm9udCkge1xuICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgICAgYXJnczogW3gsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBxdWFkcmF0aWNDdXJ2ZVRvKHhhLCB5YSwgeCwgeSkge1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInF1YWRyYXRpY0N1cnZlVG9cIixcbiAgICAgICAgYXJnczogW3hhLCB5YSwgeCwgeV1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgbnVtYmVyT2ZDb250b3VycyA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgIHZhciBmbGFncztcbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwO1xuICAgIGkgKz0gMTA7XG5cbiAgICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICAgIGRvIHtcbiAgICAgICAgZmxhZ3MgPSBjb2RlW2ldIDw8IDggfCBjb2RlW2kgKyAxXTtcbiAgICAgICAgdmFyIGdseXBoSW5kZXggPSBjb2RlW2kgKyAyXSA8PCA4IHwgY29kZVtpICsgM107XG4gICAgICAgIGkgKz0gNDtcbiAgICAgICAgdmFyIGFyZzEsIGFyZzI7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgMHgwMSkge1xuICAgICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBhcmcyID0gKGNvZGVbaSArIDJdIDw8IDI0IHwgY29kZVtpICsgM10gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcmcxID0gY29kZVtpKytdO1xuICAgICAgICAgIGFyZzIgPSBjb2RlW2krK107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxhZ3MgJiAweDAyKSB7XG4gICAgICAgICAgeCA9IGFyZzE7XG4gICAgICAgICAgeSA9IGFyZzI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgeSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2NhbGVYID0gMSxcbiAgICAgICAgICAgIHNjYWxlWSA9IDEsXG4gICAgICAgICAgICBzY2FsZTAxID0gMCxcbiAgICAgICAgICAgIHNjYWxlMTAgPSAwO1xuXG4gICAgICAgIGlmIChmbGFncyAmIDB4MDgpIHtcbiAgICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg0MCkge1xuICAgICAgICAgIHNjYWxlWCA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIDB4ODApIHtcbiAgICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGUxMCA9IChjb2RlW2kgKyA0XSA8PCAyNCB8IGNvZGVbaSArIDVdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgc2NhbGVZID0gKGNvZGVbaSArIDZdIDw8IDI0IHwgY29kZVtpICsgN10gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICBpICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3ViZ2x5cGggPSBmb250LmdseXBoc1tnbHlwaEluZGV4XTtcblxuICAgICAgICBpZiAoc3ViZ2x5cGgpIHtcbiAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgY21kOiBcInNhdmVcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6IFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBhcmdzOiBbc2NhbGVYLCBzY2FsZTAxLCBzY2FsZTEwLCBzY2FsZVksIHgsIHldXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29tcGlsZUdseWYoc3ViZ2x5cGgsIGNtZHMsIGZvbnQpO1xuICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKGZsYWdzICYgMHgyMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbmRQdHNPZkNvbnRvdXJzID0gW107XG4gICAgICB2YXIgaiwgamo7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZkNvbnRvdXJzOyBqKyspIHtcbiAgICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdKTtcbiAgICAgICAgaSArPSAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdHJ1Y3Rpb25MZW5ndGggPSBjb2RlW2ldIDw8IDggfCBjb2RlW2kgKyAxXTtcbiAgICAgIGkgKz0gMiArIGluc3RydWN0aW9uTGVuZ3RoO1xuICAgICAgdmFyIG51bWJlck9mUG9pbnRzID0gZW5kUHRzT2ZDb250b3Vyc1tlbmRQdHNPZkNvbnRvdXJzLmxlbmd0aCAtIDFdICsgMTtcbiAgICAgIHZhciBwb2ludHMgPSBbXTtcblxuICAgICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgICBmbGFncyA9IGNvZGVbaSsrXTtcbiAgICAgICAgdmFyIHJlcGVhdCA9IDE7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICAgIHJlcGVhdCArPSBjb2RlW2krK107XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAocmVwZWF0LS0gPiAwKSB7XG4gICAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZQb2ludHM7IGorKykge1xuICAgICAgICBzd2l0Y2ggKHBvaW50c1tqXS5mbGFncyAmIDB4MTIpIHtcbiAgICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgICB4ICs9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4MDI6XG4gICAgICAgICAgICB4IC09IGNvZGVbaSsrXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgICAgeCArPSBjb2RlW2krK107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50c1tqXS54ID0geDtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDI0KSB7XG4gICAgICAgICAgY2FzZSAweDAwOlxuICAgICAgICAgICAgeSArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweDA0OlxuICAgICAgICAgICAgeSAtPSBjb2RlW2krK107XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICAgIHkgKz0gY29kZVtpKytdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludHNbal0ueSA9IHk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydFBvaW50ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mQ29udG91cnM7IGkrKykge1xuICAgICAgICB2YXIgZW5kUG9pbnQgPSBlbmRQdHNPZkNvbnRvdXJzW2ldO1xuICAgICAgICB2YXIgY29udG91ciA9IHBvaW50cy5zbGljZShzdGFydFBvaW50LCBlbmRQb2ludCArIDEpO1xuXG4gICAgICAgIGlmIChjb250b3VyWzBdLmZsYWdzICYgMSkge1xuICAgICAgICAgIGNvbnRvdXIucHVzaChjb250b3VyWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250b3VyW2NvbnRvdXIubGVuZ3RoIC0gMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgY29udG91ci51bnNoaWZ0KGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHAgPSB7XG4gICAgICAgICAgICBmbGFnczogMSxcbiAgICAgICAgICAgIHg6IChjb250b3VyWzBdLnggKyBjb250b3VyW2NvbnRvdXIubGVuZ3RoIC0gMV0ueCkgLyAyLFxuICAgICAgICAgICAgeTogKGNvbnRvdXJbMF0ueSArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS55KSAvIDJcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnRvdXIudW5zaGlmdChwKTtcbiAgICAgICAgICBjb250b3VyLnB1c2gocCk7XG4gICAgICAgIH1cblxuICAgICAgICBtb3ZlVG8oY29udG91clswXS54LCBjb250b3VyWzBdLnkpO1xuXG4gICAgICAgIGZvciAoaiA9IDEsIGpqID0gY29udG91ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbnRvdXJbal0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICBsaW5lVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29udG91cltqICsgMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICBxdWFkcmF0aWNDdXJ2ZVRvKGNvbnRvdXJbal0ueCwgY29udG91cltqXS55LCBjb250b3VyW2ogKyAxXS54LCBjb250b3VyW2ogKyAxXS55KTtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgKGNvbnRvdXJbal0ueCArIGNvbnRvdXJbaiArIDFdLngpIC8gMiwgKGNvbnRvdXJbal0ueSArIGNvbnRvdXJbaiArIDFdLnkpIC8gMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRQb2ludCA9IGVuZFBvaW50ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb21waWxlQ2hhclN0cmluZyhjaGFyU3RyaW5nQ29kZSwgY21kcywgZm9udCwgZ2x5cGhJZCkge1xuICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgICAgYXJnczogW3gsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwiYmV6aWVyQ3VydmVUb1wiLFxuICAgICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwO1xuICAgIHZhciBzdGVtcyA9IDA7XG5cbiAgICBmdW5jdGlvbiBwYXJzZShjb2RlKSB7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgY29kZS5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHN0YWNrQ2xlYW4gPSBmYWxzZTtcbiAgICAgICAgdmFyIHYgPSBjb2RlW2krK107XG4gICAgICAgIHZhciB4YSwgeGIsIHlhLCB5YiwgeTEsIHkyLCB5Mywgbiwgc3VickNvZGU7XG5cbiAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN1YnJDb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGZvbnQuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZkSW5kZXggPSBmb250LmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgICAgICAgICAgaWYgKGZkSW5kZXggPj0gMCAmJiBmZEluZGV4IDwgZm9udC5mZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnREaWN0ID0gZm9udC5mZEFycmF5W2ZkSW5kZXhdO1xuICAgICAgICAgICAgICAgIGxldCBzdWJycztcblxuICAgICAgICAgICAgICAgIGlmIChmb250RGljdC5wcml2YXRlRGljdCAmJiBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICBzdWJycyA9IGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VicnMpIHtcbiAgICAgICAgICAgICAgICAgIG4gKz0gZ2V0U3Vicm91dGluZUJpYXMoc3VicnMpO1xuICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBzdWJyc1tuXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuc3VicnNbbiArIGZvbnQuc3VicnNCaWFzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICAgIHBhcnNlKHN1YnJDb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgIHYgPSBjb2RlW2krK107XG5cbiAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHksIHhiLCB5MSwgeCwgeTEpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHksIHgsIHkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHkyID0geTEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTEsIHhiLCB5MiwgeCwgeTIpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeTMgPSB5MiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MiwgeGIsIHkzLCB4LCB5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgIHZhciB4MCA9IHgsXG4gICAgICAgICAgICAgICAgICAgIHkwID0geTtcbiAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB4ID0geGI7XG4gICAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHggLSB4MCkgPiBNYXRoLmFicyh5IC0geTApKSB7XG4gICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt2fWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgdmFyIGFjaGFyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHZhciBiY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwic2F2ZVwiXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogXCJ0cmFuc2xhdGVcIixcbiAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHZhciBjbWFwID0gbG9va3VwQ21hcChmb250LmNtYXAsIFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nbHlwaE5hbWVNYXBbX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW2FjaGFyXV0pKTtcbiAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjbWFwID0gbG9va3VwQ21hcChmb250LmNtYXAsIFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nbHlwaE5hbWVNYXBbX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW2JjaGFyXV0pKTtcbiAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMztcbiAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gNikge1xuICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgc3RhY2sucHVzaCgoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNik7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICBuID0gc3RhY2sucG9wKCkgKyBmb250LmdzdWJyc0JpYXM7XG4gICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuZ3N1YnJzW25dO1xuXG4gICAgICAgICAgICBpZiAoc3VickNvZGUpIHtcbiAgICAgICAgICAgICAgcGFyc2Uoc3VickNvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHt2fWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodiA8IDI0Nykge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHYgLSAxMzkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IDwgMjUxKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goKHYgLSAyNDcpICogMjU2ICsgY29kZVtpKytdICsgMTA4KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiA8IDI1NSkge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKC0odiAtIDI1MSkgKiAyNTYgLSBjb2RlW2krK10gLSAxMDgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCgoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2IHwgY29kZVtpICsgMl0gPDwgOCB8IGNvZGVbaSArIDNdKSAvIDY1NTM2KTtcbiAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgICAgc3RhY2subGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlKGNoYXJTdHJpbmdDb2RlKTtcbiAgfVxuXG4gIGNvbnN0IE5PT1AgPSBbXTtcblxuICBjbGFzcyBDb21waWxlZEZvbnQge1xuICAgIGNvbnN0cnVjdG9yKGZvbnRNYXRyaXgpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBDb21waWxlZEZvbnQpIHtcbiAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC5cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9udE1hdHJpeCA9IGZvbnRNYXRyaXg7XG4gICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgZ2V0UGF0aEpzKHVuaWNvZGUpIHtcbiAgICAgIGNvbnN0IGNtYXAgPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgICBsZXQgZm4gPSB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF07XG5cbiAgICAgIGlmICghZm4pIHtcbiAgICAgICAgZm4gPSB0aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWFwLmdseXBoSWQpO1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF0gPSBmbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSA9IGNtYXAuZ2x5cGhJZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIGNvbXBpbGVHbHlwaChjb2RlLCBnbHlwaElkKSB7XG4gICAgICBpZiAoIWNvZGUgfHwgY29kZS5sZW5ndGggPT09IDAgfHwgY29kZVswXSA9PT0gMTQpIHtcbiAgICAgICAgcmV0dXJuIE5PT1A7XG4gICAgICB9XG5cbiAgICAgIGxldCBmb250TWF0cml4ID0gdGhpcy5mb250TWF0cml4O1xuXG4gICAgICBpZiAodGhpcy5pc0NGRkNJREZvbnQpIHtcbiAgICAgICAgY29uc3QgZmRJbmRleCA9IHRoaXMuZmRTZWxlY3QuZ2V0RkRJbmRleChnbHlwaElkKTtcblxuICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCB0aGlzLmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmZkQXJyYXlbZmRJbmRleF07XG4gICAgICAgICAgZm9udE1hdHJpeCA9IGZvbnREaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIikgfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNtZHMgPSBbXTtcbiAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgIH0pO1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICBhcmdzOiBmb250TWF0cml4LnNsaWNlKClcbiAgICAgIH0pO1xuICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgY21kOiBcInNjYWxlXCIsXG4gICAgICAgIGFyZ3M6IFtcInNpemVcIiwgXCItc2l6ZVwiXVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcywgZ2x5cGhJZCk7XG4gICAgICBjbWRzLnB1c2goe1xuICAgICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbWRzO1xuICAgIH1cblxuICAgIGNvbXBpbGVHbHlwaEltcGwoKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuXCIpO1xuICAgIH1cblxuICAgIGhhc0J1aWx0UGF0aCh1bmljb2RlKSB7XG4gICAgICBjb25zdCBjbWFwID0gbG9va3VwQ21hcCh0aGlzLmNtYXAsIHVuaWNvZGUpO1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY21hcC5nbHlwaElkXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFtjbWFwLmNoYXJDb2RlXSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gICAgY29uc3RydWN0b3IoZ2x5cGhzLCBjbWFwLCBmb250TWF0cml4KSB7XG4gICAgICBzdXBlcihmb250TWF0cml4IHx8IFswLjAwMDQ4OCwgMCwgMCwgMC4wMDA0ODgsIDAsIDBdKTtcbiAgICAgIHRoaXMuZ2x5cGhzID0gZ2x5cGhzO1xuICAgICAgdGhpcy5jbWFwID0gY21hcDtcbiAgICB9XG5cbiAgICBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMpIHtcbiAgICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gICAgY29uc3RydWN0b3IoY2ZmSW5mbywgY21hcCwgZm9udE1hdHJpeCwgZ2x5cGhOYW1lTWFwKSB7XG4gICAgICBzdXBlcihmb250TWF0cml4IHx8IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdKTtcbiAgICAgIHRoaXMuZ2x5cGhzID0gY2ZmSW5mby5nbHlwaHM7XG4gICAgICB0aGlzLmdzdWJycyA9IGNmZkluZm8uZ3N1YnJzIHx8IFtdO1xuICAgICAgdGhpcy5zdWJycyA9IGNmZkluZm8uc3VicnMgfHwgW107XG4gICAgICB0aGlzLmNtYXAgPSBjbWFwO1xuICAgICAgdGhpcy5nbHlwaE5hbWVNYXAgPSBnbHlwaE5hbWVNYXAgfHwgKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgIHRoaXMuZ3N1YnJzQmlhcyA9IGdldFN1YnJvdXRpbmVCaWFzKHRoaXMuZ3N1YnJzKTtcbiAgICAgIHRoaXMuc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5zdWJycyk7XG4gICAgICB0aGlzLmlzQ0ZGQ0lERm9udCA9IGNmZkluZm8uaXNDRkZDSURGb250O1xuICAgICAgdGhpcy5mZFNlbGVjdCA9IGNmZkluZm8uZmRTZWxlY3Q7XG4gICAgICB0aGlzLmZkQXJyYXkgPSBjZmZJbmZvLmZkQXJyYXk7XG4gICAgfVxuXG4gICAgY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKSB7XG4gICAgICBjb21waWxlQ2hhclN0cmluZyhjb2RlLCBjbWRzLCB0aGlzLCBnbHlwaElkKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5X2NyZWF0ZShmb250LCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGZvbnQuZGF0YSk7XG4gICAgICB2YXIgY21hcCwgZ2x5ZiwgbG9jYSwgY2ZmLCBpbmRleFRvTG9jRm9ybWF0LCB1bml0c1BlckVtO1xuICAgICAgdmFyIG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSAxMjsgaSA8IG51bVRhYmxlczsgaSsrLCBwICs9IDE2KSB7XG4gICAgICAgIHZhciB0YWcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZGF0YS5zdWJhcnJheShwLCBwICsgNCkpO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0TG9uZyhkYXRhLCBwICsgOCk7XG4gICAgICAgIHZhciBsZW5ndGggPSBnZXRMb25nKGRhdGEsIHAgKyAxMik7XG5cbiAgICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgICBjYXNlIFwiY21hcFwiOlxuICAgICAgICAgICAgY21hcCA9IHBhcnNlQ21hcChkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJnbHlmXCI6XG4gICAgICAgICAgICBnbHlmID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsb2NhXCI6XG4gICAgICAgICAgICBsb2NhID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgICB1bml0c1BlckVtID0gZ2V0VXNob3J0KGRhdGEsIG9mZnNldCArIDE4KTtcbiAgICAgICAgICAgIGluZGV4VG9Mb2NGb3JtYXQgPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgNTApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ0ZGIFwiOlxuICAgICAgICAgICAgY2ZmID0gcGFyc2VDZmYoZGF0YSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdseWYpIHtcbiAgICAgICAgdmFyIGZvbnRNYXRyaXggPSAhdW5pdHNQZXJFbSA/IGZvbnQuZm9udE1hdHJpeCA6IFsxIC8gdW5pdHNQZXJFbSwgMCwgMCwgMSAvIHVuaXRzUGVyRW0sIDAsIDBdO1xuICAgICAgICByZXR1cm4gbmV3IFRydWVUeXBlQ29tcGlsZWQocGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaW5kZXhUb0xvY0Zvcm1hdCksIGNtYXAsIGZvbnRNYXRyaXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQoY2ZmLCBjbWFwLCBmb250LmZvbnRNYXRyaXgsIGZvbnQuZ2x5cGhOYW1lTWFwKTtcbiAgICB9XG4gIH07XG59KCk7XG5cbmV4cG9ydHMuRm9udFJlbmRlcmVyRmFjdG9yeSA9IEZvbnRSZW5kZXJlckZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogMzggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVHlwZTFQYXJzZXIgPSB2b2lkIDA7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygzMyk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBISU5USU5HX0VOQUJMRUQgPSBmYWxzZTtcblxudmFyIFR5cGUxQ2hhclN0cmluZyA9IGZ1bmN0aW9uIFR5cGUxQ2hhclN0cmluZ0Nsb3N1cmUoKSB7XG4gIHZhciBDT01NQU5EX01BUCA9IHtcbiAgICBoc3RlbTogWzFdLFxuICAgIHZzdGVtOiBbM10sXG4gICAgdm1vdmV0bzogWzRdLFxuICAgIHJsaW5ldG86IFs1XSxcbiAgICBobGluZXRvOiBbNl0sXG4gICAgdmxpbmV0bzogWzddLFxuICAgIHJyY3VydmV0bzogWzhdLFxuICAgIGNhbGxzdWJyOiBbMTBdLFxuICAgIGZsZXg6IFsxMiwgMzVdLFxuICAgIGRyb3A6IFsxMiwgMThdLFxuICAgIGVuZGNoYXI6IFsxNF0sXG4gICAgcm1vdmV0bzogWzIxXSxcbiAgICBobW92ZXRvOiBbMjJdLFxuICAgIHZoY3VydmV0bzogWzMwXSxcbiAgICBodmN1cnZldG86IFszMV1cbiAgfTtcblxuICBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmcoKSB7XG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5sc2IgPSAwO1xuICAgIHRoaXMuZmxleGluZyA9IGZhbHNlO1xuICAgIHRoaXMub3V0cHV0ID0gW107XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICB9XG5cbiAgVHlwZTFDaGFyU3RyaW5nLnByb3RvdHlwZSA9IHtcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdfY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgdmFyIGNvdW50ID0gZW5jb2RlZC5sZW5ndGg7XG4gICAgICB2YXIgZXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciB3eCwgc2J4LCBzdWJyTnVtYmVyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZW5jb2RlZFtpXTtcblxuICAgICAgICBpZiAodmFsdWUgPCAzMikge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDgpICsgZW5jb2RlZFsrK2ldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAuaHN0ZW0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZHkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCgwLCBkeSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAudm1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5ybGluZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhsaW5ldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAudmxpbmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg2LCBDT01NQU5EX01BUC5ycmN1cnZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJyc1tzdWJyTnVtYmVyXSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5jb252ZXJ0KHN1YnJzW3N1YnJOdW1iZXJdLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG5cbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMubHNiID0gc2J4O1xuICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4KTtcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXQucHVzaChDT01NQU5EX01BUC5lbmRjaGFyWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5ybW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZsZXhpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAuaG1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAudmhjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCg0LCBDT01NQU5EX01BUC5odmN1cnZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAwOlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnZzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMjpcbiAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAuaHN0ZW0pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyA2OlxuICAgICAgICAgICAgICBpZiAoc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzYiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSA1XTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYWMgPSB0aGlzLnN0YWNrLnNwbGljZSgtNCwgNCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFjWzBdICs9IHRoaXMubHNiIC0gYXNiO1xuICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgwLCBDT01NQU5EX01BUC5lbmRjaGFyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyA3OlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgd3ggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB2YXIgc2J5ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc2J4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdGhpcy5sc2IgPSBzYng7XG4gICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3eDtcbiAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHd4LCBzYngsIHNieSk7XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgzLCBDT01NQU5EX01BUC5ybW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTI6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgbnVtMiA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHZhciBudW0xID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKG51bTEgLyBudW0yKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTY6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdmFyIG51bUFyZ3MgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmxleEFyZ3MgPSB0aGlzLnN0YWNrLnNwbGljZSh0aGlzLnN0YWNrLmxlbmd0aCAtIDE3LCAxNyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZsZXhBcmdzWzJdICsgZmxleEFyZ3NbMF0sIGZsZXhBcmdzWzNdICsgZmxleEFyZ3NbMV0sIGZsZXhBcmdzWzRdLCBmbGV4QXJnc1s1XSwgZmxleEFyZ3NbNl0sIGZsZXhBcmdzWzddLCBmbGV4QXJnc1s4XSwgZmxleEFyZ3NbOV0sIGZsZXhBcmdzWzEwXSwgZmxleEFyZ3NbMTFdLCBmbGV4QXJnc1sxMl0sIGZsZXhBcmdzWzEzXSwgZmxleEFyZ3NbMTRdKTtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsIENPTU1BTkRfTUFQLmZsZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmxleGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmbGV4QXJnc1sxNV0sIGZsZXhBcmdzWzE2XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Vick51bWJlciA9PT0gMSAmJiBudW1BcmdzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE3OlxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAzMzpcbiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgXCInICsgdmFsdWUgKyAnXCInKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gMTM5O1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDI1MCkge1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIC0gMjQ3KSAqIDI1NiArIGVuY29kZWRbKytpXSArIDEwODtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICB2YWx1ZSA9IC0oKHZhbHVlIC0gMjUxKSAqIDI1NikgLSBlbmNvZGVkWysraV0gLSAxMDg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgMjQgfCAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgMTYgfCAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgOCB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG5cbiAgICBleGVjdXRlQ29tbWFuZChob3dNYW55QXJncywgY29tbWFuZCwga2VlcFN0YWNrKSB7XG4gICAgICB2YXIgc3RhY2tMZW5ndGggPSB0aGlzLnN0YWNrLmxlbmd0aDtcblxuICAgICAgaWYgKGhvd01hbnlBcmdzID4gc3RhY2tMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydCA9IHN0YWNrTGVuZ3RoIC0gaG93TWFueUFyZ3M7XG5cbiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0YWNrTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zdGFja1tpXTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoKDI4LCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IDY1NTM2ICogdmFsdWUgfCAwO1xuICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjU1LCB2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5vdXRwdXQucHVzaC5hcHBseSh0aGlzLm91dHB1dCwgY29tbWFuZCk7XG5cbiAgICAgIGlmIChrZWVwU3RhY2spIHtcbiAgICAgICAgdGhpcy5zdGFjay5zcGxpY2Uoc3RhcnQsIGhvd01hbnlBcmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhY2subGVuZ3RoID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICB9O1xuICByZXR1cm4gVHlwZTFDaGFyU3RyaW5nO1xufSgpO1xuXG52YXIgVHlwZTFQYXJzZXIgPSBmdW5jdGlvbiBUeXBlMVBhcnNlckNsb3N1cmUoKSB7XG4gIHZhciBFRVhFQ19FTkNSWVBUX0tFWSA9IDU1NjY1O1xuICB2YXIgQ0hBUl9TVFJTX0VOQ1JZUFRfS0VZID0gNDMzMDtcblxuICBmdW5jdGlvbiBpc0hleERpZ2l0KGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3IHx8IGNvZGUgPj0gNjUgJiYgY29kZSA8PSA3MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTAyO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjcnlwdChkYXRhLCBrZXksIGRpc2NhcmROdW1iZXIpIHtcbiAgICBpZiAoZGlzY2FyZE51bWJlciA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgIH1cblxuICAgIHZhciByID0ga2V5IHwgMCxcbiAgICAgICAgYzEgPSA1Mjg0NSxcbiAgICAgICAgYzIgPSAyMjcxOSxcbiAgICAgICAgaSxcbiAgICAgICAgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjYXJkTnVtYmVyOyBpKyspIHtcbiAgICAgIHIgPSAoZGF0YVtpXSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgdmFyIGNvdW50ID0gZGF0YS5sZW5ndGggLSBkaXNjYXJkTnVtYmVyO1xuICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShjb3VudCk7XG5cbiAgICBmb3IgKGkgPSBkaXNjYXJkTnVtYmVyLCBqID0gMDsgaiA8IGNvdW50OyBpKyssIGorKykge1xuICAgICAgdmFyIHZhbHVlID0gZGF0YVtpXTtcbiAgICAgIGRlY3J5cHRlZFtqXSA9IHZhbHVlIF4gciA+PiA4O1xuICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY3J5cHRBc2NpaShkYXRhLCBrZXksIGRpc2NhcmROdW1iZXIpIHtcbiAgICB2YXIgciA9IGtleSB8IDAsXG4gICAgICAgIGMxID0gNTI4NDUsXG4gICAgICAgIGMyID0gMjI3MTk7XG4gICAgdmFyIGNvdW50ID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIG1heWJlTGVuZ3RoID0gY291bnQgPj4+IDE7XG4gICAgdmFyIGRlY3J5cHRlZCA9IG5ldyBVaW50OEFycmF5KG1heWJlTGVuZ3RoKTtcbiAgICB2YXIgaSwgajtcblxuICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgdmFyIGRpZ2l0MSA9IGRhdGFbaV07XG5cbiAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdDEpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgICB2YXIgZGlnaXQyO1xuXG4gICAgICB3aGlsZSAoaSA8IGNvdW50ICYmICFpc0hleERpZ2l0KGRpZ2l0MiA9IGRhdGFbaV0pKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBjb3VudCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKGRpZ2l0MSwgZGlnaXQyKSwgMTYpO1xuICAgICAgICBkZWNyeXB0ZWRbaisrXSA9IHZhbHVlIF4gciA+PiA4O1xuICAgICAgICByID0gKHZhbHVlICsgcikgKiBjMSArIGMyICYgKDEgPDwgMTYpIC0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVjcnlwdGVkLnNsaWNlKGRpc2NhcmROdW1iZXIsIGopO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTcGVjaWFsKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gMHgyZiB8fCBjID09PSAweDViIHx8IGMgPT09IDB4NWQgfHwgYyA9PT0gMHg3YiB8fCBjID09PSAweDdkIHx8IGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFR5cGUxUGFyc2VyKHN0cmVhbSwgZW5jcnlwdGVkLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgaWYgKGVuY3J5cHRlZCkge1xuICAgICAgdmFyIGRhdGEgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgIHZhciBpc0JpbmFyeSA9ICEoKGlzSGV4RGlnaXQoZGF0YVswXSkgfHwgKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoZGF0YVswXSkpICYmIGlzSGV4RGlnaXQoZGF0YVsxXSkgJiYgaXNIZXhEaWdpdChkYXRhWzJdKSAmJiBpc0hleERpZ2l0KGRhdGFbM10pICYmIGlzSGV4RGlnaXQoZGF0YVs0XSkgJiYgaXNIZXhEaWdpdChkYXRhWzVdKSAmJiBpc0hleERpZ2l0KGRhdGFbNl0pICYmIGlzSGV4RGlnaXQoZGF0YVs3XSkpO1xuICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGlzQmluYXJ5ID8gZGVjcnlwdChkYXRhLCBFRVhFQ19FTkNSWVBUX0tFWSwgNCkgOiBkZWNyeXB0QXNjaWkoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQgPSAhIXNlYWNBbmFseXNpc0VuYWJsZWQ7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICB9XG5cbiAgVHlwZTFQYXJzZXIucHJvdG90eXBlID0ge1xuICAgIHJlYWROdW1iZXJBcnJheTogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZE51bWJlckFycmF5KCkge1xuICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICBpZiAodG9rZW4gPT09IG51bGwgfHwgdG9rZW4gPT09IFwiXVwiIHx8IHRva2VuID09PSBcIn1cIikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXkucHVzaChwYXJzZUZsb2F0KHRva2VuIHx8IDApKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH0sXG4gICAgcmVhZE51bWJlcjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZE51bWJlcigpIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRva2VuIHx8IDApO1xuICAgIH0sXG4gICAgcmVhZEludDogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZEludCgpIHtcbiAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbiB8fCAwLCAxMCkgfCAwO1xuICAgIH0sXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWRCb29sZWFuKCkge1xuICAgICAgdmFyIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgcmV0dXJuIHRva2VuID09PSBcInRydWVcIiA/IDEgOiAwO1xuICAgIH0sXG4gICAgbmV4dENoYXI6IGZ1bmN0aW9uIFR5cGUxX25leHRDaGFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgfSxcbiAgICBnZXRUb2tlbjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfZ2V0VG9rZW4oKSB7XG4gICAgICB2YXIgY29tbWVudCA9IGZhbHNlO1xuICAgICAgdmFyIGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICBpZiAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpIHtcbiAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjUpIHtcbiAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3BlY2lhbChjaCkpIHtcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0b2tlbiA9IFwiXCI7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfSB3aGlsZSAoY2ggPj0gMCAmJiAhKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpICYmICFpc1NwZWNpYWwoY2gpKTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0sXG4gICAgcmVhZENoYXJTdHJpbmdzOiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9yZWFkQ2hhclN0cmluZ3MoYnl0ZXMsIGxlbklWKSB7XG4gICAgICBpZiAobGVuSVYgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlY3J5cHQoYnl0ZXMsIENIQVJfU1RSU19FTkNSWVBUX0tFWSwgbGVuSVYpO1xuICAgIH0sXG4gICAgZXh0cmFjdEZvbnRQcm9ncmFtOiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9leHRyYWN0Rm9udFByb2dyYW0ocHJvcGVydGllcykge1xuICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgICAgdmFyIHN1YnJzID0gW10sXG4gICAgICAgICAgY2hhcnN0cmluZ3MgPSBbXTtcbiAgICAgIHZhciBwcml2YXRlRGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBwcml2YXRlRGF0YS5sZW5JViA9IDQ7XG4gICAgICB2YXIgcHJvZ3JhbSA9IHtcbiAgICAgICAgc3VicnM6IFtdLFxuICAgICAgICBjaGFyc3RyaW5nczogW10sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwcml2YXRlRGF0YVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIHRva2VuLCBsZW5ndGgsIGRhdGEsIGxlbklWLCBlbmNvZGVkO1xuXG4gICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgY2FzZSBcIkNoYXJTdHJpbmdzXCI6XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gXCJlbmRcIikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICBkYXRhID0gbGVuZ3RoID4gMCA/IHN0cmVhbS5nZXRCeXRlcyhsZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgIGxlbklWID0gcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO1xuICAgICAgICAgICAgICBlbmNvZGVkID0gdGhpcy5yZWFkQ2hhclN0cmluZ3MoZGF0YSwgbGVuSVYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gXCJub2FjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2hhcnN0cmluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgZ2x5cGgsXG4gICAgICAgICAgICAgICAgZW5jb2RlZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiU3VicnNcIjpcbiAgICAgICAgICAgIHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5nZXRUb2tlbigpID09PSBcImR1cFwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgIGRhdGEgPSBsZW5ndGggPiAwID8gc3RyZWFtLmdldEJ5dGVzKGxlbmd0aCkgOiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgbGVuSVYgPSBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7XG4gICAgICAgICAgICAgIGVuY29kZWQgPSB0aGlzLnJlYWRDaGFyU3RyaW5ncyhkYXRhLCBsZW5JVik7XG4gICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBcIm5vYWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdWJyc1tpbmRleF0gPSBlbmNvZGVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJCbHVlVmFsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIk90aGVyQmx1ZXNcIjpcbiAgICAgICAgICBjYXNlIFwiRmFtaWx5Qmx1ZXNcIjpcbiAgICAgICAgICBjYXNlIFwiRmFtaWx5T3RoZXJCbHVlc1wiOlxuICAgICAgICAgICAgdmFyIGJsdWVBcnJheSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG5cbiAgICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiU3RlbVNuYXBIXCI6XG4gICAgICAgICAgY2FzZSBcIlN0ZW1TbmFwVlwiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJTdGRIV1wiOlxuICAgICAgICAgIGNhc2UgXCJTdGRWV1wiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KClbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJCbHVlU2hpZnRcIjpcbiAgICAgICAgICBjYXNlIFwibGVuSVZcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZUZ1enpcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZVNjYWxlXCI6XG4gICAgICAgICAgY2FzZSBcIkxhbmd1YWdlR3JvdXBcIjpcbiAgICAgICAgICBjYXNlIFwiRXhwYW5zaW9uRmFjdG9yXCI6XG4gICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb3JjZUJvbGRcIjpcbiAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWRCb29sZWFuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdseXBoID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGg7XG4gICAgICAgIGVuY29kZWQgPSBjaGFyc3RyaW5nc1tpXS5lbmNvZGVkO1xuICAgICAgICB2YXIgY2hhclN0cmluZyA9IG5ldyBUeXBlMUNoYXJTdHJpbmcoKTtcbiAgICAgICAgdmFyIGVycm9yID0gY2hhclN0cmluZy5jb252ZXJ0KGVuY29kZWQsIHN1YnJzLCB0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICB2YXIgb3V0cHV0ID0gY2hhclN0cmluZy5vdXRwdXQ7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgb3V0cHV0ID0gWzE0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoYXJTdHJpbmdPYmplY3QgPSB7XG4gICAgICAgICAgZ2x5cGhOYW1lOiBnbHlwaCxcbiAgICAgICAgICBjaGFyc3RyaW5nOiBvdXRwdXQsXG4gICAgICAgICAgd2lkdGg6IGNoYXJTdHJpbmcud2lkdGgsXG4gICAgICAgICAgbHNiOiBjaGFyU3RyaW5nLmxzYixcbiAgICAgICAgICBzZWFjOiBjaGFyU3RyaW5nLnNlYWNcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2x5cGggPT09IFwiLm5vdGRlZlwiKSB7XG4gICAgICAgICAgcHJvZ3JhbS5jaGFyc3RyaW5ncy51bnNoaWZ0KGNoYXJTdHJpbmdPYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2dyYW0uY2hhcnN0cmluZ3MucHVzaChjaGFyU3RyaW5nT2JqZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcuaW5kZXhPZihnbHlwaCk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSAmJiBwcm9wZXJ0aWVzLndpZHRoc1tpbmRleF0gPT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSBwcm9wZXJ0aWVzLmZpcnN0Q2hhciAmJiBpbmRleCA8PSBwcm9wZXJ0aWVzLmxhc3RDaGFyKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLndpZHRoc1tpbmRleF0gPSBjaGFyU3RyaW5nLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZ3JhbTtcbiAgICB9LFxuICAgIGV4dHJhY3RGb250SGVhZGVyOiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9leHRyYWN0Rm9udEhlYWRlcihwcm9wZXJ0aWVzKSB7XG4gICAgICB2YXIgdG9rZW47XG5cbiAgICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmdldFRva2VuKCkpICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gXCIvXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICBjYXNlIFwiRm9udE1hdHJpeFwiOlxuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBtYXRyaXg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJFbmNvZGluZ1wiOlxuICAgICAgICAgICAgdmFyIGVuY29kaW5nQXJnID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICAgICAgICBpZiAoIS9eXFxkKyQvLnRlc3QoZW5jb2RpbmdBcmcpKSB7XG4gICAgICAgICAgICAgIGVuY29kaW5nID0gKDAsIF9lbmNvZGluZ3MuZ2V0RW5jb2RpbmcpKGVuY29kaW5nQXJnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVuY29kaW5nID0gW107XG4gICAgICAgICAgICAgIHZhciBzaXplID0gcGFyc2VJbnQoZW5jb2RpbmdBcmcsIDEwKSB8IDA7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSBcImR1cFwiICYmIHRva2VuICE9PSBcImRlZlwiKSB7XG4gICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFwiZGVmXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb250QkJveFwiOlxuICAgICAgICAgICAgdmFyIGZvbnRCQm94ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuZGVzY2VudCA9IE1hdGgubWluKGZvbnRCQm94WzFdLCBmb250QkJveFszXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIFR5cGUxUGFyc2VyO1xufSgpO1xuXG5leHBvcnRzLlR5cGUxUGFyc2VyID0gVHlwZTFQYXJzZXI7XG5cbi8qKiovIH0pLFxuLyogMzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0VGlsaW5nUGF0dGVybklSID0gZ2V0VGlsaW5nUGF0dGVybklSO1xuZXhwb3J0cy5QYXR0ZXJuID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvbG9yc3BhY2UgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIzKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4KTtcblxudmFyIFNoYWRpbmdUeXBlID0ge1xuICBGVU5DVElPTl9CQVNFRDogMSxcbiAgQVhJQUw6IDIsXG4gIFJBRElBTDogMyxcbiAgRlJFRV9GT1JNX01FU0g6IDQsXG4gIExBVFRJQ0VfRk9STV9NRVNIOiA1LFxuICBDT09OU19QQVRDSF9NRVNIOiA2LFxuICBURU5TT1JfUEFUQ0hfTUVTSDogN1xufTtcblxudmFyIFBhdHRlcm4gPSBmdW5jdGlvbiBQYXR0ZXJuQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gUGF0dGVybigpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBjYWxsIFBhdHRlcm4gY29uc3RydWN0b3JcIik7XG4gIH1cblxuICBQYXR0ZXJuLnByb3RvdHlwZSA9IHtcbiAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBQYXR0ZXJuX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKGBTaG91bGQgbm90IGNhbGwgUGF0dGVybi5nZXRTdHlsZTogJHtjdHh9YCk7XG4gICAgfVxuICB9O1xuXG4gIFBhdHRlcm4ucGFyc2VTaGFkaW5nID0gZnVuY3Rpb24gKHNoYWRpbmcsIG1hdHJpeCwgeHJlZiwgcmVzLCBoYW5kbGVyLCBwZGZGdW5jdGlvbkZhY3RvcnksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgdmFyIGRpY3QgPSAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHNoYWRpbmcpID8gc2hhZGluZy5kaWN0IDogc2hhZGluZztcbiAgICB2YXIgdHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG5cbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQVhJQUw6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuUkFESUFMOlxuICAgICAgICAgIHJldHVybiBuZXcgU2hhZGluZ3MuUmFkaWFsQXhpYWwoZGljdCwgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuRlJFRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuTEFUVElDRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDpcbiAgICAgICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLk1lc2goc2hhZGluZywgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6IFwiICsgdHlwZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJuXG4gICAgICB9KTtcbiAgICAgICgwLCBfdXRpbC53YXJuKShleCk7XG4gICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLkR1bW15KCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQYXR0ZXJuO1xufSgpO1xuXG5leHBvcnRzLlBhdHRlcm4gPSBQYXR0ZXJuO1xudmFyIFNoYWRpbmdzID0ge307XG5TaGFkaW5ncy5TTUFMTF9OVU1CRVIgPSAxZS02O1xuXG5TaGFkaW5ncy5SYWRpYWxBeGlhbCA9IGZ1bmN0aW9uIFJhZGlhbEF4aWFsQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gUmFkaWFsQXhpYWwoZGljdCwgbWF0cml4LCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHtcbiAgICB0aGlzLm1hdHJpeCA9IG1hdHJpeDtcbiAgICB0aGlzLmNvb3Jkc0FyciA9IGRpY3QuZ2V0QXJyYXkoXCJDb29yZHNcIik7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgdGhpcy50eXBlID0gXCJQYXR0ZXJuXCI7XG5cbiAgICBjb25zdCBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgY3M6IGRpY3QuZ2V0UmF3KFwiQ29sb3JTcGFjZVwiKSB8fCBkaWN0LmdldFJhdyhcIkNTXCIpLFxuICAgICAgeHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNzID0gY3M7XG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdDAgPSAwLjAsXG4gICAgICAgIHQxID0gMS4wO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiRG9tYWluXCIpKSB7XG4gICAgICB2YXIgZG9tYWluQXJyID0gZGljdC5nZXRBcnJheShcIkRvbWFpblwiKTtcbiAgICAgIHQwID0gZG9tYWluQXJyWzBdO1xuICAgICAgdDEgPSBkb21haW5BcnJbMV07XG4gICAgfVxuXG4gICAgdmFyIGV4dGVuZFN0YXJ0ID0gZmFsc2UsXG4gICAgICAgIGV4dGVuZEVuZCA9IGZhbHNlO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiRXh0ZW5kXCIpKSB7XG4gICAgICB2YXIgZXh0ZW5kQXJyID0gZGljdC5nZXRBcnJheShcIkV4dGVuZFwiKTtcbiAgICAgIGV4dGVuZFN0YXJ0ID0gZXh0ZW5kQXJyWzBdO1xuICAgICAgZXh0ZW5kRW5kID0gZXh0ZW5kQXJyWzFdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5SQURJQUwgJiYgKCFleHRlbmRTdGFydCB8fCAhZXh0ZW5kRW5kKSkge1xuICAgICAgdmFyIHgxID0gdGhpcy5jb29yZHNBcnJbMF07XG4gICAgICB2YXIgeTEgPSB0aGlzLmNvb3Jkc0FyclsxXTtcbiAgICAgIHZhciByMSA9IHRoaXMuY29vcmRzQXJyWzJdO1xuICAgICAgdmFyIHgyID0gdGhpcy5jb29yZHNBcnJbM107XG4gICAgICB2YXIgeTIgPSB0aGlzLmNvb3Jkc0Fycls0XTtcbiAgICAgIHZhciByMiA9IHRoaXMuY29vcmRzQXJyWzVdO1xuICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KCh4MSAtIHgyKSAqICh4MSAtIHgyKSArICh5MSAtIHkyKSAqICh5MSAtIHkyKSk7XG5cbiAgICAgIGlmIChyMSA8PSByMiArIGRpc3RhbmNlICYmIHIyIDw9IHIxICsgZGlzdGFuY2UpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmV4dGVuZFN0YXJ0ID0gZXh0ZW5kU3RhcnQ7XG4gICAgdGhpcy5leHRlbmRFbmQgPSBleHRlbmRFbmQ7XG4gICAgdmFyIGZuT2JqID0gZGljdC5nZXRSYXcoXCJGdW5jdGlvblwiKTtcbiAgICB2YXIgZm4gPSBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlRnJvbUFycmF5KGZuT2JqKTtcbiAgICBjb25zdCBOVU1CRVJfT0ZfU0FNUExFUyA9IDEwO1xuICAgIGNvbnN0IHN0ZXAgPSAodDEgLSB0MCkgLyBOVU1CRVJfT0ZfU0FNUExFUztcbiAgICB2YXIgY29sb3JTdG9wcyA9IHRoaXMuY29sb3JTdG9wcyA9IFtdO1xuXG4gICAgaWYgKHQwID49IHQxIHx8IHN0ZXAgPD0gMCkge1xuICAgICAgKDAsIF91dGlsLmluZm8pKFwiQmFkIHNoYWRpbmcgZG9tYWluLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KGNzLm51bUNvbXBzKSxcbiAgICAgICAgcmF0aW8gPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICAgIHZhciByZ2JDb2xvcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IE5VTUJFUl9PRl9TQU1QTEVTOyBpKyspIHtcbiAgICAgIHJhdGlvWzBdID0gdDAgKyBpICogc3RlcDtcbiAgICAgIGZuKHJhdGlvLCAwLCBjb2xvciwgMCk7XG4gICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihjb2xvciwgMCk7XG5cbiAgICAgIHZhciBjc3NDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyZ2JDb2xvclswXSwgcmdiQ29sb3JbMV0sIHJnYkNvbG9yWzJdKTtcblxuICAgICAgY29sb3JTdG9wcy5wdXNoKFtpIC8gTlVNQkVSX09GX1NBTVBMRVMsIGNzc0NvbG9yXSk7XG4gICAgfVxuXG4gICAgdmFyIGJhY2tncm91bmQgPSBcInRyYW5zcGFyZW50XCI7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJCYWNrZ3JvdW5kXCIpKSB7XG4gICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihkaWN0LmdldChcIkJhY2tncm91bmRcIiksIDApO1xuICAgICAgYmFja2dyb3VuZCA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihyZ2JDb2xvclswXSwgcmdiQ29sb3JbMV0sIHJnYkNvbG9yWzJdKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4dGVuZFN0YXJ0KSB7XG4gICAgICBjb2xvclN0b3BzLnVuc2hpZnQoWzAsIGJhY2tncm91bmRdKTtcbiAgICAgIGNvbG9yU3RvcHNbMV1bMF0gKz0gU2hhZGluZ3MuU01BTExfTlVNQkVSO1xuICAgIH1cblxuICAgIGlmICghZXh0ZW5kRW5kKSB7XG4gICAgICBjb2xvclN0b3BzW2NvbG9yU3RvcHMubGVuZ3RoIC0gMV1bMF0gLT0gU2hhZGluZ3MuU01BTExfTlVNQkVSO1xuICAgICAgY29sb3JTdG9wcy5wdXNoKFsxLCBiYWNrZ3JvdW5kXSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclN0b3BzID0gY29sb3JTdG9wcztcbiAgfVxuXG4gIFJhZGlhbEF4aWFsLnByb3RvdHlwZSA9IHtcbiAgICBnZXRJUjogZnVuY3Rpb24gUmFkaWFsQXhpYWxfZ2V0SVIoKSB7XG4gICAgICB2YXIgY29vcmRzQXJyID0gdGhpcy5jb29yZHNBcnI7XG4gICAgICB2YXIgc2hhZGluZ1R5cGUgPSB0aGlzLnNoYWRpbmdUeXBlO1xuICAgICAgdmFyIHR5cGUsIHAwLCBwMSwgcjAsIHIxO1xuXG4gICAgICBpZiAoc2hhZGluZ1R5cGUgPT09IFNoYWRpbmdUeXBlLkFYSUFMKSB7XG4gICAgICAgIHAwID0gW2Nvb3Jkc0FyclswXSwgY29vcmRzQXJyWzFdXTtcbiAgICAgICAgcDEgPSBbY29vcmRzQXJyWzJdLCBjb29yZHNBcnJbM11dO1xuICAgICAgICByMCA9IG51bGw7XG4gICAgICAgIHIxID0gbnVsbDtcbiAgICAgICAgdHlwZSA9IFwiYXhpYWxcIjtcbiAgICAgIH0gZWxzZSBpZiAoc2hhZGluZ1R5cGUgPT09IFNoYWRpbmdUeXBlLlJBRElBTCkge1xuICAgICAgICBwMCA9IFtjb29yZHNBcnJbMF0sIGNvb3Jkc0FyclsxXV07XG4gICAgICAgIHAxID0gW2Nvb3Jkc0FyclszXSwgY29vcmRzQXJyWzRdXTtcbiAgICAgICAgcjAgPSBjb29yZHNBcnJbMl07XG4gICAgICAgIHIxID0gY29vcmRzQXJyWzVdO1xuICAgICAgICB0eXBlID0gXCJyYWRpYWxcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3NoYWRpbmdUeXBlfWApO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWF0cml4ID0gdGhpcy5tYXRyaXg7XG5cbiAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgcDAgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKHAwLCBtYXRyaXgpO1xuICAgICAgICBwMSA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0ocDEsIG1hdHJpeCk7XG5cbiAgICAgICAgaWYgKHNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5SQURJQUwpIHtcbiAgICAgICAgICB2YXIgc2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG1hdHJpeCk7XG5cbiAgICAgICAgICByMCAqPSBzY2FsZVswXTtcbiAgICAgICAgICByMSAqPSBzY2FsZVsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1wiUmFkaWFsQXhpYWxcIiwgdHlwZSwgdGhpcy5iYm94LCB0aGlzLmNvbG9yU3RvcHMsIHAwLCBwMSwgcjAsIHIxXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBSYWRpYWxBeGlhbDtcbn0oKTtcblxuU2hhZGluZ3MuTWVzaCA9IGZ1bmN0aW9uIE1lc2hDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyKHN0cmVhbSwgY29udGV4dCkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5idWZmZXIgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB2YXIgbnVtQ29tcHMgPSBjb250ZXh0Lm51bUNvbXBzO1xuICAgIHRoaXMudG1wQ29tcHNCdWYgPSBuZXcgRmxvYXQzMkFycmF5KG51bUNvbXBzKTtcbiAgICB2YXIgY3NOdW1Db21wcyA9IGNvbnRleHQuY29sb3JTcGFjZS5udW1Db21wcztcbiAgICB0aGlzLnRtcENzQ29tcHNCdWYgPSBjb250ZXh0LmNvbG9yRm4gPyBuZXcgRmxvYXQzMkFycmF5KGNzTnVtQ29tcHMpIDogdGhpcy50bXBDb21wc0J1ZjtcbiAgfVxuXG4gIE1lc2hTdHJlYW1SZWFkZXIucHJvdG90eXBlID0ge1xuICAgIGdldCBoYXNEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc3RyZWFtLmVuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0ucG9zIDwgdGhpcy5zdHJlYW0uZW5kO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5idWZmZXJMZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG5cbiAgICAgIGlmIChuZXh0Qnl0ZSA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlO1xuICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSA4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIHJlYWRCaXRzOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRCaXRzKG4pIHtcbiAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcblxuICAgICAgaWYgKG4gPT09IDMyKSB7XG4gICAgICAgIGlmIChidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCAyNCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCAxNiB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKSA+Pj4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCAyNCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCAxNiB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICB2YXIgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gbmV4dEJ5dGUgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICAgICAgcmV0dXJuIChidWZmZXIgPDwgOCAtIGJ1ZmZlckxlbmd0aCB8IChuZXh0Qnl0ZSAmIDB4ZmYpID4+IGJ1ZmZlckxlbmd0aCkgPj4+IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChuID09PSA4ICYmIGJ1ZmZlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoYnVmZmVyTGVuZ3RoIDwgbikge1xuICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgYnVmZmVyTGVuZ3RoICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlckxlbmd0aCAtPSBuO1xuICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlciAmICgxIDw8IGJ1ZmZlckxlbmd0aCkgLSAxO1xuICAgICAgcmV0dXJuIGJ1ZmZlciA+PiBidWZmZXJMZW5ndGg7XG4gICAgfSxcbiAgICBhbGlnbjogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9hbGlnbigpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB9LFxuICAgIHJlYWRGbGFnOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRGbGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZEJpdHModGhpcy5jb250ZXh0LmJpdHNQZXJGbGFnKTtcbiAgICB9LFxuICAgIHJlYWRDb29yZGluYXRlOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRDb29yZGluYXRlKCkge1xuICAgICAgdmFyIGJpdHNQZXJDb29yZGluYXRlID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlO1xuICAgICAgdmFyIHhpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29vcmRpbmF0ZSk7XG4gICAgICB2YXIgeWkgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb29yZGluYXRlKTtcbiAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgdmFyIHNjYWxlID0gYml0c1BlckNvb3JkaW5hdGUgPCAzMiA/IDEgLyAoKDEgPDwgYml0c1BlckNvb3JkaW5hdGUpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgICAgcmV0dXJuIFt4aSAqIHNjYWxlICogKGRlY29kZVsxXSAtIGRlY29kZVswXSkgKyBkZWNvZGVbMF0sIHlpICogc2NhbGUgKiAoZGVjb2RlWzNdIC0gZGVjb2RlWzJdKSArIGRlY29kZVsyXV07XG4gICAgfSxcbiAgICByZWFkQ29tcG9uZW50czogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkQ29tcG9uZW50cygpIHtcbiAgICAgIHZhciBudW1Db21wcyA9IHRoaXMuY29udGV4dC5udW1Db21wcztcbiAgICAgIHZhciBiaXRzUGVyQ29tcG9uZW50ID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQ7XG4gICAgICB2YXIgc2NhbGUgPSBiaXRzUGVyQ29tcG9uZW50IDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgICAgdmFyIGRlY29kZSA9IHRoaXMuY29udGV4dC5kZWNvZGU7XG4gICAgICB2YXIgY29tcG9uZW50cyA9IHRoaXMudG1wQ29tcHNCdWY7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gNDsgaSA8IG51bUNvbXBzOyBpKyssIGogKz0gMikge1xuICAgICAgICB2YXIgY2kgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb21wb25lbnQpO1xuICAgICAgICBjb21wb25lbnRzW2ldID0gY2kgKiBzY2FsZSAqIChkZWNvZGVbaiArIDFdIC0gZGVjb2RlW2pdKSArIGRlY29kZVtqXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbG9yID0gdGhpcy50bXBDc0NvbXBzQnVmO1xuXG4gICAgICBpZiAodGhpcy5jb250ZXh0LmNvbG9yRm4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yRm4oY29tcG9uZW50cywgMCwgY29sb3IsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNvbG9yU3BhY2UuZ2V0UmdiKGNvbG9yLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlVHlwZTRTaGFkaW5nKG1lc2gsIHJlYWRlcikge1xuICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICB2YXIgY29sb3JzID0gbWVzaC5jb2xvcnM7XG4gICAgdmFyIG9wZXJhdG9ycyA9IFtdO1xuICAgIHZhciBwcyA9IFtdO1xuICAgIHZhciB2ZXJ0aWNlc0xlZnQgPSAwO1xuXG4gICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7XG4gICAgICB2YXIgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuICAgICAgdmFyIGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICB2YXIgY29sb3IgPSByZWFkZXIucmVhZENvbXBvbmVudHMoKTtcblxuICAgICAgaWYgKHZlcnRpY2VzTGVmdCA9PT0gMCkge1xuICAgICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gdHlwZTQgZmxhZ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDM7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHBzLnB1c2gocHNbcHMubGVuZ3RoIC0gMl0sIHBzW3BzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHBzLnB1c2gocHNbcHMubGVuZ3RoIC0gM10sIHBzW3BzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZXJhdG9ycy5wdXNoKGYpO1xuICAgICAgfVxuXG4gICAgICBwcy5wdXNoKGNvb3Jkcy5sZW5ndGgpO1xuICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xuICAgICAgY29sb3JzLnB1c2goY29sb3IpO1xuICAgICAgdmVydGljZXNMZWZ0LS07XG4gICAgICByZWFkZXIuYWxpZ24oKTtcbiAgICB9XG5cbiAgICBtZXNoLmZpZ3VyZXMucHVzaCh7XG4gICAgICB0eXBlOiBcInRyaWFuZ2xlc1wiLFxuICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVHlwZTVTaGFkaW5nKG1lc2gsIHJlYWRlciwgdmVydGljZXNQZXJSb3cpIHtcbiAgICB2YXIgY29vcmRzID0gbWVzaC5jb29yZHM7XG4gICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgIHZhciBwcyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7XG4gICAgICB2YXIgY29vcmQgPSByZWFkZXIucmVhZENvb3JkaW5hdGUoKTtcbiAgICAgIHZhciBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpO1xuICAgICAgcHMucHVzaChjb29yZHMubGVuZ3RoKTtcbiAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICB9XG5cbiAgICBtZXNoLmZpZ3VyZXMucHVzaCh7XG4gICAgICB0eXBlOiBcImxhdHRpY2VcIixcbiAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICB2ZXJ0aWNlc1BlclJvd1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMztcbiAgdmFyIE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMjA7XG4gIHZhciBUUklBTkdMRV9ERU5TSVRZID0gMjA7XG5cbiAgdmFyIGdldEIgPSBmdW5jdGlvbiBnZXRCQ2xvc3VyZSgpIHtcbiAgICBmdW5jdGlvbiBidWlsZEIoY291bnQpIHtcbiAgICAgIHZhciBsdXQgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICB2YXIgdCA9IGkgLyBjb3VudCxcbiAgICAgICAgICAgIHRfID0gMSAtIHQ7XG4gICAgICAgIGx1dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW3RfICogdF8gKiB0XywgMyAqIHQgKiB0XyAqIHRfLCAzICogdCAqIHQgKiB0XywgdCAqIHQgKiB0XSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbHV0O1xuICAgIH1cblxuICAgIHZhciBjYWNoZSA9IFtdO1xuICAgIHJldHVybiBmdW5jdGlvbiBnZXRCKGNvdW50KSB7XG4gICAgICBpZiAoIWNhY2hlW2NvdW50XSkge1xuICAgICAgICBjYWNoZVtjb3VudF0gPSBidWlsZEIoY291bnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2FjaGVbY291bnRdO1xuICAgIH07XG4gIH0oKTtcblxuICBmdW5jdGlvbiBidWlsZEZpZ3VyZUZyb21QYXRjaChtZXNoLCBpbmRleCkge1xuICAgIHZhciBmaWd1cmUgPSBtZXNoLmZpZ3VyZXNbaW5kZXhdO1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKGZpZ3VyZS50eXBlID09PSBcInBhdGNoXCIsIFwiVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZVwiKTtcbiAgICB2YXIgY29vcmRzID0gbWVzaC5jb29yZHMsXG4gICAgICAgIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgIHZhciBwaSA9IGZpZ3VyZS5jb29yZHM7XG4gICAgdmFyIGNpID0gZmlndXJlLmNvbG9ycztcbiAgICB2YXIgZmlndXJlTWluWCA9IE1hdGgubWluKGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgdmFyIGZpZ3VyZU1pblkgPSBNYXRoLm1pbihjb29yZHNbcGlbMF1dWzFdLCBjb29yZHNbcGlbM11dWzFdLCBjb29yZHNbcGlbMTJdXVsxXSwgY29vcmRzW3BpWzE1XV1bMV0pO1xuICAgIHZhciBmaWd1cmVNYXhYID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTtcbiAgICB2YXIgZmlndXJlTWF4WSA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMV0sIGNvb3Jkc1twaVszXV1bMV0sIGNvb3Jkc1twaVsxMl1dWzFdLCBjb29yZHNbcGlbMTVdXVsxXSk7XG4gICAgdmFyIHNwbGl0WEJ5ID0gTWF0aC5jZWlsKChmaWd1cmVNYXhYIC0gZmlndXJlTWluWCkgKiBUUklBTkdMRV9ERU5TSVRZIC8gKG1lc2guYm91bmRzWzJdIC0gbWVzaC5ib3VuZHNbMF0pKTtcbiAgICBzcGxpdFhCeSA9IE1hdGgubWF4KE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULCBNYXRoLm1pbihNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgc3BsaXRYQnkpKTtcbiAgICB2YXIgc3BsaXRZQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFkgLSBmaWd1cmVNaW5ZKSAqIFRSSUFOR0xFX0RFTlNJVFkgLyAobWVzaC5ib3VuZHNbM10gLSBtZXNoLmJvdW5kc1sxXSkpO1xuICAgIHNwbGl0WUJ5ID0gTWF0aC5tYXgoTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIE1hdGgubWluKE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULCBzcGxpdFlCeSkpO1xuICAgIHZhciB2ZXJ0aWNlc1BlclJvdyA9IHNwbGl0WEJ5ICsgMTtcbiAgICB2YXIgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgdmFyIGZpZ3VyZUNvbG9ycyA9IG5ldyBJbnQzMkFycmF5KChzcGxpdFlCeSArIDEpICogdmVydGljZXNQZXJSb3cpO1xuICAgIHZhciBrID0gMDtcbiAgICB2YXIgY2wgPSBuZXcgVWludDhBcnJheSgzKSxcbiAgICAgICAgY3IgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICB2YXIgYzAgPSBjb2xvcnNbY2lbMF1dLFxuICAgICAgICBjMSA9IGNvbG9yc1tjaVsxXV0sXG4gICAgICAgIGMyID0gY29sb3JzW2NpWzJdXSxcbiAgICAgICAgYzMgPSBjb2xvcnNbY2lbM11dO1xuICAgIHZhciBiUm93ID0gZ2V0QihzcGxpdFlCeSksXG4gICAgICAgIGJDb2wgPSBnZXRCKHNwbGl0WEJ5KTtcblxuICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8PSBzcGxpdFlCeTsgcm93KyspIHtcbiAgICAgIGNsWzBdID0gKGMwWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzFdID0gKGMwWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzJdID0gKGMwWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzBdID0gKGMxWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzFdID0gKGMxWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzJdID0gKGMxWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcblxuICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDw9IHNwbGl0WEJ5OyBjb2wrKywgaysrKSB7XG4gICAgICAgIGlmICgocm93ID09PSAwIHx8IHJvdyA9PT0gc3BsaXRZQnkpICYmIChjb2wgPT09IDAgfHwgY29sID09PSBzcGxpdFhCeSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4ID0gMCxcbiAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICB2YXIgcSA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMzsgaisrLCBxKyspIHtcbiAgICAgICAgICAgIHZhciBtID0gYlJvd1tyb3ddW2ldICogYkNvbFtjb2xdW2pdO1xuICAgICAgICAgICAgeCArPSBjb29yZHNbcGlbcV1dWzBdICogbTtcbiAgICAgICAgICAgIHkgKz0gY29vcmRzW3BpW3FdXVsxXSAqIG07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmlndXJlQ29vcmRzW2tdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgY29vcmRzLnB1c2goW3gsIHldKTtcbiAgICAgICAgZmlndXJlQ29sb3JzW2tdID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5ld0NvbG9yID0gbmV3IFVpbnQ4QXJyYXkoMyk7XG4gICAgICAgIG5ld0NvbG9yWzBdID0gKGNsWzBdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzBdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgbmV3Q29sb3JbMV0gPSAoY2xbMV0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMV0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICBuZXdDb2xvclsyXSA9IChjbFsyXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclsyXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgIGNvbG9ycy5wdXNoKG5ld0NvbG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWd1cmVDb29yZHNbMF0gPSBwaVswXTtcbiAgICBmaWd1cmVDb2xvcnNbMF0gPSBjaVswXTtcbiAgICBmaWd1cmVDb29yZHNbc3BsaXRYQnldID0gcGlbM107XG4gICAgZmlndXJlQ29sb3JzW3NwbGl0WEJ5XSA9IGNpWzFdO1xuICAgIGZpZ3VyZUNvb3Jkc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5XSA9IHBpWzEyXTtcbiAgICBmaWd1cmVDb2xvcnNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeV0gPSBjaVsyXTtcbiAgICBmaWd1cmVDb29yZHNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeSArIHNwbGl0WEJ5XSA9IHBpWzE1XTtcbiAgICBmaWd1cmVDb2xvcnNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeSArIHNwbGl0WEJ5XSA9IGNpWzNdO1xuICAgIG1lc2guZmlndXJlc1tpbmRleF0gPSB7XG4gICAgICB0eXBlOiBcImxhdHRpY2VcIixcbiAgICAgIGNvb3JkczogZmlndXJlQ29vcmRzLFxuICAgICAgY29sb3JzOiBmaWd1cmVDb2xvcnMsXG4gICAgICB2ZXJ0aWNlc1BlclJvd1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVUeXBlNlNoYWRpbmcobWVzaCwgcmVhZGVyKSB7XG4gICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICB2YXIgcHMgPSBuZXcgSW50MzJBcnJheSgxNik7XG4gICAgdmFyIGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG5cbiAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDMpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gdHlwZTYgZmxhZ1wiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gOCA6IDEyOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaSA9IGNvbG9ycy5sZW5ndGg7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0O1xuXG4gICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBzWzEyXSA9IHBpICsgMztcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgNjtcbiAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDg7XG4gICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDEwO1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgIGNzWzJdID0gY2kgKyAxO1xuICAgICAgICAgIGNzWzNdID0gY2kgKyAyO1xuICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgdG1wMiA9IHBzWzEzXTtcbiAgICAgICAgICB0bXAzID0gcHNbMTRdO1xuICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgcHNbMTJdID0gdG1wNDtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHRtcDM7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgIHBzWzRdID0gdG1wMjtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgdG1wMSA9IGNzWzJdO1xuICAgICAgICAgIHRtcDIgPSBjc1szXTtcbiAgICAgICAgICBjc1syXSA9IHRtcDI7XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRtcDEgPSBwc1sxNV07XG4gICAgICAgICAgdG1wMiA9IHBzWzExXTtcbiAgICAgICAgICBwc1sxMl0gPSBwc1szXTtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHBzWzddO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIHRtcDEgPSBjc1szXTtcbiAgICAgICAgICBjc1syXSA9IGNzWzFdO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBwc1sxMl0gPSBwc1swXTtcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s4XSA9IHBzWzFdO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHBzWzJdO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgY3NbMl0gPSBjc1swXTtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHBzWzVdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMF1dWzBdIC0gY29vcmRzW3BzWzE1XV1bMF0gKyA2ICogKGNvb3Jkc1twc1s0XV1bMF0gKyBjb29yZHNbcHNbMV1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzEzXV1bMF0gKyBjb29yZHNbcHNbN11dWzBdKSkgLyA5LCAoLTQgKiBjb29yZHNbcHNbMF1dWzFdIC0gY29vcmRzW3BzWzE1XV1bMV0gKyA2ICogKGNvb3Jkc1twc1s0XV1bMV0gKyBjb29yZHNbcHNbMV1dWzFdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMV0gKyBjb29yZHNbcHNbM11dWzFdKSArIDMgKiAoY29vcmRzW3BzWzEzXV1bMV0gKyBjb29yZHNbcHNbN11dWzFdKSkgLyA5XSk7XG4gICAgICBwc1s2XSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzNdXVswXSAtIGNvb3Jkc1twc1sxMl1dWzBdICsgNiAqIChjb29yZHNbcHNbMl1dWzBdICsgY29vcmRzW3BzWzddXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMF0gKyBjb29yZHNbcHNbMTRdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzNdXVsxXSAtIGNvb3Jkc1twc1sxMl1dWzFdICsgNiAqIChjb29yZHNbcHNbMl1dWzFdICsgY29vcmRzW3BzWzddXVsxXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMV0gKyBjb29yZHNbcHNbMTVdXVsxXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkpIC8gOV0pO1xuICAgICAgcHNbOV0gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1sxMl1dWzBdIC0gY29vcmRzW3BzWzNdXVswXSArIDYgKiAoY29vcmRzW3BzWzhdXVswXSArIGNvb3Jkc1twc1sxM11dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzBdXVswXSArIGNvb3Jkc1twc1sxNV1dWzBdKSArIDMgKiAoY29vcmRzW3BzWzExXV1bMF0gKyBjb29yZHNbcHNbMV1dWzBdKSkgLyA5LCAoLTQgKiBjb29yZHNbcHNbMTJdXVsxXSAtIGNvb3Jkc1twc1szXV1bMV0gKyA2ICogKGNvb3Jkc1twc1s4XV1bMV0gKyBjb29yZHNbcHNbMTNdXVsxXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMV0gKyBjb29yZHNbcHNbMTVdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxMV1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkpIC8gOV0pO1xuICAgICAgcHNbMTBdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMTVdXVswXSAtIGNvb3Jkc1twc1swXV1bMF0gKyA2ICogKGNvb3Jkc1twc1sxMV1dWzBdICsgY29vcmRzW3BzWzE0XV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMTJdXVswXSArIGNvb3Jkc1twc1szXV1bMF0pICsgMyAqIChjb29yZHNbcHNbMl1dWzBdICsgY29vcmRzW3BzWzhdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzE1XV1bMV0gLSBjb29yZHNbcHNbMF1dWzFdICsgNiAqIChjb29yZHNbcHNbMTFdXVsxXSArIGNvb3Jkc1twc1sxNF1dWzFdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMV0gKyBjb29yZHNbcHNbM11dWzFdKSArIDMgKiAoY29vcmRzW3BzWzJdXVsxXSArIGNvb3Jkc1twc1s4XV1bMV0pKSAvIDldKTtcbiAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogXCJwYXRjaFwiLFxuICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShjcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVR5cGU3U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICB2YXIgY29vcmRzID0gbWVzaC5jb29yZHM7XG4gICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgIHZhciBwcyA9IG5ldyBJbnQzMkFycmF5KDE2KTtcbiAgICB2YXIgY3MgPSBuZXcgSW50MzJBcnJheSg0KTtcblxuICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgdmFyIGYgPSByZWFkZXIucmVhZEZsYWcoKTtcblxuICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMykpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlNyBmbGFnXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaSwgaWk7XG4gICAgICB2YXIgcGkgPSBjb29yZHMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGYgIT09IDAgPyAxMiA6IDE2OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaSA9IGNvbG9ycy5sZW5ndGg7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0O1xuXG4gICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBzWzEyXSA9IHBpICsgMztcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgNjtcbiAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s5XSA9IHBpICsgMTM7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxNDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDEyO1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgODtcbiAgICAgICAgICBwc1swXSA9IHBpO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1syXSA9IHBpICsgMTA7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDk7XG4gICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgY3NbM10gPSBjaSArIDI7XG4gICAgICAgICAgY3NbMF0gPSBjaTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdG1wMSA9IHBzWzEyXTtcbiAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgIHRtcDMgPSBwc1sxNF07XG4gICAgICAgICAgdG1wNCA9IHBzWzE1XTtcbiAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gdG1wMztcbiAgICAgICAgICBwc1s5XSA9IHBpICsgOTtcbiAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgcHNbNl0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbMl07XG4gICAgICAgICAgdG1wMiA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gdG1wMjtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdG1wMSA9IHBzWzE1XTtcbiAgICAgICAgICB0bXAyID0gcHNbMTFdO1xuICAgICAgICAgIHBzWzEyXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbN107XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzVdID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgdG1wMSA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gY3NbMV07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHBzWzEyXSA9IHBzWzBdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbMV07XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s1XSA9IHBpICsgODtcbiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSBwc1szXTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSBjc1sxXTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGNoXCIsXG4gICAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KGNzKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQm91bmRzKG1lc2gpIHtcbiAgICB2YXIgbWluWCA9IG1lc2guY29vcmRzWzBdWzBdLFxuICAgICAgICBtaW5ZID0gbWVzaC5jb29yZHNbMF1bMV0sXG4gICAgICAgIG1heFggPSBtaW5YLFxuICAgICAgICBtYXhZID0gbWluWTtcblxuICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IG1lc2guY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB4ID0gbWVzaC5jb29yZHNbaV1bMF0sXG4gICAgICAgICAgeSA9IG1lc2guY29vcmRzW2ldWzFdO1xuICAgICAgbWluWCA9IG1pblggPiB4ID8geCA6IG1pblg7XG4gICAgICBtaW5ZID0gbWluWSA+IHkgPyB5IDogbWluWTtcbiAgICAgIG1heFggPSBtYXhYIDwgeCA/IHggOiBtYXhYO1xuICAgICAgbWF4WSA9IG1heFkgPCB5ID8geSA6IG1heFk7XG4gICAgfVxuXG4gICAgbWVzaC5ib3VuZHMgPSBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV07XG4gIH1cblxuICBmdW5jdGlvbiBwYWNrRGF0YShtZXNoKSB7XG4gICAgdmFyIGksIGlpLCBqLCBqajtcbiAgICB2YXIgY29vcmRzID0gbWVzaC5jb29yZHM7XG4gICAgdmFyIGNvb3Jkc1BhY2tlZCA9IG5ldyBGbG9hdDMyQXJyYXkoY29vcmRzLmxlbmd0aCAqIDIpO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IDAsIGlpID0gY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB4eSA9IGNvb3Jkc1tpXTtcbiAgICAgIGNvb3Jkc1BhY2tlZFtqKytdID0geHlbMF07XG4gICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzFdO1xuICAgIH1cblxuICAgIG1lc2guY29vcmRzID0gY29vcmRzUGFja2VkO1xuICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICB2YXIgY29sb3JzUGFja2VkID0gbmV3IFVpbnQ4QXJyYXkoY29sb3JzLmxlbmd0aCAqIDMpO1xuXG4gICAgZm9yIChpID0gMCwgaiA9IDAsIGlpID0gY29sb3JzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBjID0gY29sb3JzW2ldO1xuICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzBdO1xuICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzFdO1xuICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzJdO1xuICAgIH1cblxuICAgIG1lc2guY29sb3JzID0gY29sb3JzUGFja2VkO1xuICAgIHZhciBmaWd1cmVzID0gbWVzaC5maWd1cmVzO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBmaWd1cmUgPSBmaWd1cmVzW2ldLFxuICAgICAgICAgIHBzID0gZmlndXJlLmNvb3JkcyxcbiAgICAgICAgICBjcyA9IGZpZ3VyZS5jb2xvcnM7XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gcHMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBwc1tqXSAqPSAyO1xuICAgICAgICBjc1tqXSAqPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE1lc2goc3RyZWFtLCBtYXRyaXgsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtXCIpO1xuICAgIH1cblxuICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXRyaXggPSBtYXRyaXg7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgdGhpcy50eXBlID0gXCJQYXR0ZXJuXCI7XG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgY3M6IGRpY3QuZ2V0UmF3KFwiQ29sb3JTcGFjZVwiKSB8fCBkaWN0LmdldFJhdyhcIkNTXCIpLFxuICAgICAgeHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNzID0gY3M7XG4gICAgdGhpcy5iYWNrZ3JvdW5kID0gZGljdC5oYXMoXCJCYWNrZ3JvdW5kXCIpID8gY3MuZ2V0UmdiKGRpY3QuZ2V0KFwiQmFja2dyb3VuZFwiKSwgMCkgOiBudWxsO1xuICAgIHZhciBmbk9iaiA9IGRpY3QuZ2V0UmF3KFwiRnVuY3Rpb25cIik7XG4gICAgdmFyIGZuID0gZm5PYmogPyBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlRnJvbUFycmF5KGZuT2JqKSA6IG51bGw7XG4gICAgdGhpcy5jb29yZHMgPSBbXTtcbiAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgIHRoaXMuZmlndXJlcyA9IFtdO1xuICAgIHZhciBkZWNvZGVDb250ZXh0ID0ge1xuICAgICAgYml0c1BlckNvb3JkaW5hdGU6IGRpY3QuZ2V0KFwiQml0c1BlckNvb3JkaW5hdGVcIiksXG4gICAgICBiaXRzUGVyQ29tcG9uZW50OiBkaWN0LmdldChcIkJpdHNQZXJDb21wb25lbnRcIiksXG4gICAgICBiaXRzUGVyRmxhZzogZGljdC5nZXQoXCJCaXRzUGVyRmxhZ1wiKSxcbiAgICAgIGRlY29kZTogZGljdC5nZXRBcnJheShcIkRlY29kZVwiKSxcbiAgICAgIGNvbG9yRm46IGZuLFxuICAgICAgY29sb3JTcGFjZTogY3MsXG4gICAgICBudW1Db21wczogZm4gPyAxIDogY3MubnVtQ29tcHNcbiAgICB9O1xuICAgIHZhciByZWFkZXIgPSBuZXcgTWVzaFN0cmVhbVJlYWRlcihzdHJlYW0sIGRlY29kZUNvbnRleHQpO1xuICAgIHZhciBwYXRjaE1lc2ggPSBmYWxzZTtcblxuICAgIHN3aXRjaCAodGhpcy5zaGFkaW5nVHlwZSkge1xuICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDpcbiAgICAgICAgZGVjb2RlVHlwZTRTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICB2YXIgdmVydGljZXNQZXJSb3cgPSBkaWN0LmdldChcIlZlcnRpY2VzUGVyUm93XCIpIHwgMDtcblxuICAgICAgICBpZiAodmVydGljZXNQZXJSb3cgPCAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBWZXJ0aWNlc1BlclJvd1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlY29kZVR5cGU1U2hhZGluZyh0aGlzLCByZWFkZXIsIHZlcnRpY2VzUGVyUm93KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgZGVjb2RlVHlwZTZTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOlxuICAgICAgICBkZWNvZGVUeXBlN1NoYWRpbmcodGhpcywgcmVhZGVyKTtcbiAgICAgICAgcGF0Y2hNZXNoID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGF0Y2hNZXNoKSB7XG4gICAgICB1cGRhdGVCb3VuZHModGhpcyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGJ1aWxkRmlndXJlRnJvbVBhdGNoKHRoaXMsIGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUJvdW5kcyh0aGlzKTtcbiAgICBwYWNrRGF0YSh0aGlzKTtcbiAgfVxuXG4gIE1lc2gucHJvdG90eXBlID0ge1xuICAgIGdldElSOiBmdW5jdGlvbiBNZXNoX2dldElSKCkge1xuICAgICAgcmV0dXJuIFtcIk1lc2hcIiwgdGhpcy5zaGFkaW5nVHlwZSwgdGhpcy5jb29yZHMsIHRoaXMuY29sb3JzLCB0aGlzLmZpZ3VyZXMsIHRoaXMuYm91bmRzLCB0aGlzLm1hdHJpeCwgdGhpcy5iYm94LCB0aGlzLmJhY2tncm91bmRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIE1lc2g7XG59KCk7XG5cblNoYWRpbmdzLkR1bW15ID0gZnVuY3Rpb24gRHVtbXlDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBEdW1teSgpIHtcbiAgICB0aGlzLnR5cGUgPSBcIlBhdHRlcm5cIjtcbiAgfVxuXG4gIER1bW15LnByb3RvdHlwZSA9IHtcbiAgICBnZXRJUjogZnVuY3Rpb24gRHVtbXlfZ2V0SVIoKSB7XG4gICAgICByZXR1cm4gW1wiRHVtbXlcIl07XG4gICAgfVxuICB9O1xuICByZXR1cm4gRHVtbXk7XG59KCk7XG5cbmZ1bmN0aW9uIGdldFRpbGluZ1BhdHRlcm5JUihvcGVyYXRvckxpc3QsIGRpY3QsIGFyZ3MpIHtcbiAgY29uc3QgbWF0cml4ID0gZGljdC5nZXRBcnJheShcIk1hdHJpeFwiKTtcblxuICBjb25zdCBiYm94ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpKTtcblxuICBjb25zdCB4c3RlcCA9IGRpY3QuZ2V0KFwiWFN0ZXBcIik7XG4gIGNvbnN0IHlzdGVwID0gZGljdC5nZXQoXCJZU3RlcFwiKTtcbiAgY29uc3QgcGFpbnRUeXBlID0gZGljdC5nZXQoXCJQYWludFR5cGVcIik7XG4gIGNvbnN0IHRpbGluZ1R5cGUgPSBkaWN0LmdldChcIlRpbGluZ1R5cGVcIik7XG5cbiAgaWYgKGJib3hbMl0gLSBiYm94WzBdID09PSAwIHx8IGJib3hbM10gLSBiYm94WzFdID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyR7YmJveH1dLmApO1xuICB9XG5cbiAgcmV0dXJuIFtcIlRpbGluZ1BhdHRlcm5cIiwgYXJncywgb3BlcmF0b3JMaXN0LCBtYXRyaXgsIGJib3gsIHhzdGVwLCB5c3RlcCwgcGFpbnRUeXBlLCB0aWxpbmdUeXBlXTtcbn1cblxuLyoqKi8gfSksXG4vKiA0MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1BERkZ1bmN0aW9uID0gaXNQREZGdW5jdGlvbjtcbmV4cG9ydHMuUG9zdFNjcmlwdENvbXBpbGVyID0gZXhwb3J0cy5Qb3N0U2NyaXB0RXZhbHVhdG9yID0gZXhwb3J0cy5QREZGdW5jdGlvbkZhY3RvcnkgPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHNfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg0MSk7XG5cbnZhciBfaW1hZ2VfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI0KTtcblxuY2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZVxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9IGlzRXZhbFN1cHBvcnRlZCAhPT0gZmFsc2U7XG4gICAgdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlID0gbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZShmbikge1xuICAgIGNvbnN0IGNhY2hlZEZ1bmN0aW9uID0gdGhpcy5nZXRDYWNoZWQoZm4pO1xuXG4gICAgaWYgKGNhY2hlZEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkRnVuY3Rpb24gPSBQREZGdW5jdGlvbi5wYXJzZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm46IGZuIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmID8gdGhpcy54cmVmLmZldGNoKGZuKSA6IGZuXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jYWNoZShmbiwgcGFyc2VkRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHBhcnNlZEZ1bmN0aW9uO1xuICB9XG5cbiAgY3JlYXRlRnJvbUFycmF5KGZuT2JqKSB7XG4gICAgY29uc3QgY2FjaGVkRnVuY3Rpb24gPSB0aGlzLmdldENhY2hlZChmbk9iaik7XG5cbiAgICBpZiAoY2FjaGVkRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBjYWNoZWRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRGdW5jdGlvbiA9IFBERkZ1bmN0aW9uLnBhcnNlQXJyYXkoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuT2JqOiBmbk9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZiA/IHRoaXMueHJlZi5mZXRjaChmbk9iaikgOiBmbk9ialxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2FjaGUoZm5PYmosIHBhcnNlZEZ1bmN0aW9uKTtcblxuICAgIHJldHVybiBwYXJzZWRGdW5jdGlvbjtcbiAgfVxuXG4gIGdldENhY2hlZChjYWNoZUtleSkge1xuICAgIGxldCBmblJlZjtcblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleTtcbiAgICB9IGVsc2UgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleS5vYmpJZDtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY2FjaGVLZXkpKSB7XG4gICAgICBmblJlZiA9IGNhY2hlS2V5LmRpY3QgJiYgY2FjaGVLZXkuZGljdC5vYmpJZDtcbiAgICB9XG5cbiAgICBpZiAoZm5SZWYpIHtcbiAgICAgIGlmICghdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxGdW5jdGlvbkNhY2hlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsRnVuY3Rpb24gPSB0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYoZm5SZWYpO1xuXG4gICAgICBpZiAobG9jYWxGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gbG9jYWxGdW5jdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9jYWNoZShjYWNoZUtleSwgcGFyc2VkRnVuY3Rpb24pIHtcbiAgICBpZiAoIXBhcnNlZEZ1bmN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCBcInBhcnNlZEZ1bmN0aW9uXCIgYXJndW1lbnQuJyk7XG4gICAgfVxuXG4gICAgbGV0IGZuUmVmO1xuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICBmblJlZiA9IGNhY2hlS2V5O1xuICAgIH0gZWxzZSBpZiAoY2FjaGVLZXkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICBmblJlZiA9IGNhY2hlS2V5Lm9iaklkO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjYWNoZUtleSkpIHtcbiAgICAgIGZuUmVmID0gY2FjaGVLZXkuZGljdCAmJiBjYWNoZUtleS5kaWN0Lm9iaklkO1xuICAgIH1cblxuICAgIGlmIChmblJlZikge1xuICAgICAgaWYgKCF0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUpIHtcbiAgICAgICAgdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEZ1bmN0aW9uQ2FjaGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLnNldChudWxsLCBmblJlZiwgcGFyc2VkRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRnVuY3Rpb25GYWN0b3J5ID0gUERGRnVuY3Rpb25GYWN0b3J5O1xuXG5mdW5jdGlvbiB0b051bWJlckFycmF5KGFycikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHR5cGVvZiBhcnJbaV0gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgIHJlc3VsdFtqXSA9ICthcnJbal07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIFBERkZ1bmN0aW9uID0gZnVuY3Rpb24gUERGRnVuY3Rpb25DbG9zdXJlKCkge1xuICBjb25zdCBDT05TVFJVQ1RfU0FNUExFRCA9IDA7XG4gIGNvbnN0IENPTlNUUlVDVF9JTlRFUlBPTEFURUQgPSAyO1xuICBjb25zdCBDT05TVFJVQ1RfU1RJQ0hFRCA9IDM7XG4gIGNvbnN0IENPTlNUUlVDVF9QT1NUU0NSSVBUID0gNDtcbiAgcmV0dXJuIHtcbiAgICBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgICAgdmFyIGksIGlpO1xuICAgICAgdmFyIGxlbmd0aCA9IDE7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGxlbmd0aCAqPSBzaXplW2ldO1xuICAgICAgfVxuXG4gICAgICBsZW5ndGggKj0gb3V0cHV0U2l6ZTtcbiAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgdmFyIGNvZGVTaXplID0gMDtcbiAgICAgIHZhciBjb2RlQnVmID0gMDtcbiAgICAgIHZhciBzYW1wbGVNdWwgPSAxLjAgLyAoMi4wICoqIGJwcyAtIDEpO1xuICAgICAgdmFyIHN0ckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKChsZW5ndGggKiBicHMgKyA3KSAvIDgpO1xuICAgICAgdmFyIHN0cklkeCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB3aGlsZSAoY29kZVNpemUgPCBicHMpIHtcbiAgICAgICAgICBjb2RlQnVmIDw8PSA4O1xuICAgICAgICAgIGNvZGVCdWYgfD0gc3RyQnl0ZXNbc3RySWR4KytdO1xuICAgICAgICAgIGNvZGVTaXplICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlU2l6ZSAtPSBicHM7XG4gICAgICAgIGFycmF5W2ldID0gKGNvZGVCdWYgPj4gY29kZVNpemUpICogc2FtcGxlTXVsO1xuICAgICAgICBjb2RlQnVmICY9ICgxIDw8IGNvZGVTaXplKSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9LFxuXG4gICAgZ2V0SVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuXG4gICAgfSkge1xuICAgICAgdmFyIGRpY3QgPSBmbi5kaWN0O1xuXG4gICAgICBpZiAoIWRpY3QpIHtcbiAgICAgICAgZGljdCA9IGZuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZXMgPSBbdGhpcy5jb25zdHJ1Y3RTYW1wbGVkLCBudWxsLCB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCwgdGhpcy5jb25zdHJ1Y3RTdGljaGVkLCB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRdO1xuICAgICAgdmFyIHR5cGVOdW0gPSBkaWN0LmdldChcIkZ1bmN0aW9uVHlwZVwiKTtcbiAgICAgIHZhciB0eXBlRm4gPSB0eXBlc1t0eXBlTnVtXTtcblxuICAgICAgaWYgKCF0eXBlRm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZUZuLmNhbGwodGhpcywge1xuICAgICAgICB4cmVmLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgIGZuLFxuICAgICAgICBkaWN0XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIHZhciB0eXBlID0gSVJbMF07XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIENPTlNUUlVDVF9TQU1QTEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWRGcm9tSVIoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIElSXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSBDT05TVFJVQ1RfSU5URVJQT0xBVEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUih7XG4gICAgICAgICAgICB4cmVmLFxuICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgSVJcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlIENPTlNUUlVDVF9TVElDSEVEOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWRGcm9tSVIoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIElSXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0RnJvbUlSKHtcbiAgICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICBJUlxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZSh7XG4gICAgICB4cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm5cbiAgICB9KSB7XG4gICAgICBjb25zdCBJUiA9IHRoaXMuZ2V0SVIoe1xuICAgICAgICB4cmVmLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgIGZuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLmZyb21JUih7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgSVJcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBwYXJzZUFycmF5KHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbk9ialxuICAgIH0pIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmbk9iaikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuOiBmbk9ialxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZuQXJyYXkgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZm5PYmoubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBmbkFycmF5LnB1c2godGhpcy5wYXJzZSh7XG4gICAgICAgICAgeHJlZixcbiAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmbk9ialtqXSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGZuQXJyYXlbaV0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgY29uc3RydWN0U2FtcGxlZCh7XG4gICAgICB4cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgZm4sXG4gICAgICBkaWN0XG4gICAgfSkge1xuICAgICAgZnVuY3Rpb24gdG9NdWx0aUFycmF5KGFycikge1xuICAgICAgICB2YXIgaW5wdXRMZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgb3V0W2luZGV4XSA9IFthcnJbaV0sIGFycltpICsgMV1dO1xuICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuXG4gICAgICB2YXIgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICAgIHZhciByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgICAgaWYgKCFkb21haW4gfHwgIXJhbmdlKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIGRvbWFpbiBvciByYW5nZVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgICAgdmFyIG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggLyAyO1xuICAgICAgZG9tYWluID0gdG9NdWx0aUFycmF5KGRvbWFpbik7XG4gICAgICByYW5nZSA9IHRvTXVsdGlBcnJheShyYW5nZSk7XG4gICAgICB2YXIgc2l6ZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlNpemVcIikpO1xuICAgICAgdmFyIGJwcyA9IGRpY3QuZ2V0KFwiQml0c1BlclNhbXBsZVwiKTtcbiAgICAgIHZhciBvcmRlciA9IGRpY3QuZ2V0KFwiT3JkZXJcIikgfHwgMTtcblxuICAgICAgaWYgKG9yZGVyICE9PSAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiBcIiArIG9yZGVyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG5cbiAgICAgIGlmICghZW5jb2RlKSB7XG4gICAgICAgIGVuY29kZSA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgICBlbmNvZGUucHVzaChbMCwgc2l6ZVtpXSAtIDFdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5jb2RlID0gdG9NdWx0aUFycmF5KGVuY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEZWNvZGVcIikpO1xuXG4gICAgICBpZiAoIWRlY29kZSkge1xuICAgICAgICBkZWNvZGUgPSByYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlY29kZSA9IHRvTXVsdGlBcnJheShkZWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2FtcGxlcyA9IHRoaXMuZ2V0U2FtcGxlQXJyYXkoc2l6ZSwgb3V0cHV0U2l6ZSwgYnBzLCBmbik7XG4gICAgICByZXR1cm4gW0NPTlNUUlVDVF9TQU1QTEVELCBpbnB1dFNpemUsIGRvbWFpbiwgZW5jb2RlLCBkZWNvZGUsIHNhbXBsZXMsIHNpemUsIG91dHB1dFNpemUsIDIgKiogYnBzIC0gMSwgcmFuZ2VdO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIGZ1bmN0aW9uIGludGVycG9sYXRlKHgsIHhtaW4sIHhtYXgsIHltaW4sIHltYXgpIHtcbiAgICAgICAgcmV0dXJuIHltaW4gKyAoeCAtIHhtaW4pICogKCh5bWF4IC0geW1pbikgLyAoeG1heCAtIHhtaW4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIG0gPSBJUlsxXTtcbiAgICAgICAgdmFyIGRvbWFpbiA9IElSWzJdO1xuICAgICAgICB2YXIgZW5jb2RlID0gSVJbM107XG4gICAgICAgIHZhciBkZWNvZGUgPSBJUls0XTtcbiAgICAgICAgdmFyIHNhbXBsZXMgPSBJUls1XTtcbiAgICAgICAgdmFyIHNpemUgPSBJUls2XTtcbiAgICAgICAgdmFyIG4gPSBJUls3XTtcbiAgICAgICAgdmFyIHJhbmdlID0gSVJbOV07XG4gICAgICAgIHZhciBjdWJlVmVydGljZXMgPSAxIDw8IG07XG4gICAgICAgIHZhciBjdWJlTiA9IG5ldyBGbG9hdDY0QXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgdmFyIGN1YmVWZXJ0ZXggPSBuZXcgVWludDMyQXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgY3ViZU5bal0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGsgPSBuLFxuICAgICAgICAgICAgcG9zID0gMTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgKytpKSB7XG4gICAgICAgICAgdmFyIGRvbWFpbl8yaSA9IGRvbWFpbltpXVswXTtcbiAgICAgICAgICB2YXIgZG9tYWluXzJpXzEgPSBkb21haW5baV1bMV07XG4gICAgICAgICAgdmFyIHhpID0gTWF0aC5taW4oTWF0aC5tYXgoc3JjW3NyY09mZnNldCArIGldLCBkb21haW5fMmkpLCBkb21haW5fMmlfMSk7XG4gICAgICAgICAgdmFyIGUgPSBpbnRlcnBvbGF0ZSh4aSwgZG9tYWluXzJpLCBkb21haW5fMmlfMSwgZW5jb2RlW2ldWzBdLCBlbmNvZGVbaV1bMV0pO1xuICAgICAgICAgIHZhciBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICAgIGUgPSBNYXRoLm1pbihNYXRoLm1heChlLCAwKSwgc2l6ZV9pIC0gMSk7XG4gICAgICAgICAgdmFyIGUwID0gZSA8IHNpemVfaSAtIDEgPyBNYXRoLmZsb29yKGUpIDogZSAtIDE7XG4gICAgICAgICAgdmFyIG4wID0gZTAgKyAxIC0gZTtcbiAgICAgICAgICB2YXIgbjEgPSBlIC0gZTA7XG4gICAgICAgICAgdmFyIG9mZnNldDAgPSBlMCAqIGs7XG4gICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgaztcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjdWJlVmVydGljZXM7IGorKykge1xuICAgICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgICAgY3ViZU5bal0gKj0gbjE7XG4gICAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGN1YmVOW2pdICo9IG4wO1xuICAgICAgICAgICAgICBjdWJlVmVydGV4W2pdICs9IG9mZnNldDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayAqPSBzaXplX2k7XG4gICAgICAgICAgcG9zIDw8PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG47ICsraikge1xuICAgICAgICAgIHZhciByaiA9IDA7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ViZVZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgIHJqICs9IHNhbXBsZXNbY3ViZVZlcnRleFtpXSArIGpdICogY3ViZU5baV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmogPSBpbnRlcnBvbGF0ZShyaiwgMCwgMSwgZGVjb2RlW2pdWzBdLCBkZWNvZGVbal1bMV0pO1xuICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIGpdID0gTWF0aC5taW4oTWF0aC5tYXgocmosIHJhbmdlW2pdWzBdKSwgcmFuZ2Vbal1bMV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuLFxuICAgICAgZGljdFxuICAgIH0pIHtcbiAgICAgIHZhciBjMCA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkMwXCIpKSB8fCBbMF07XG4gICAgICB2YXIgYzEgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJDMVwiKSkgfHwgWzFdO1xuICAgICAgdmFyIG4gPSBkaWN0LmdldChcIk5cIik7XG4gICAgICB2YXIgbGVuZ3RoID0gYzAubGVuZ3RoO1xuICAgICAgdmFyIGRpZmYgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBkaWZmLnB1c2goYzFbaV0gLSBjMFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbQ09OU1RSVUNUX0lOVEVSUE9MQVRFRCwgYzAsIGRpZmYsIG5dO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGcm9tSVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIElSXG4gICAgfSkge1xuICAgICAgdmFyIGMwID0gSVJbMV07XG4gICAgICB2YXIgZGlmZiA9IElSWzJdO1xuICAgICAgdmFyIG4gPSBJUlszXTtcbiAgICAgIHZhciBsZW5ndGggPSBkaWZmLmxlbmd0aDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIHggPSBuID09PSAxID8gc3JjW3NyY09mZnNldF0gOiBzcmNbc3JjT2Zmc2V0XSAqKiBuO1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IGMwW2pdICsgeCAqIGRpZmZbal07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNvbnN0cnVjdFN0aWNoZWQoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuLFxuICAgICAgZGljdFxuICAgIH0pIHtcbiAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuXG4gICAgICBpZiAoIWRvbWFpbikge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBkb21haW5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoIC8gMjtcblxuICAgICAgaWYgKGlucHV0U2l6ZSAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgZG9tYWluIGZvciBzdGljaGVkIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZm5SZWZzID0gZGljdC5nZXQoXCJGdW5jdGlvbnNcIik7XG4gICAgICB2YXIgZm5zID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuUmVmcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGZucy5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuOiB4cmVmLmZldGNoSWZSZWYoZm5SZWZzW2ldKVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBib3VuZHMgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJCb3VuZHNcIikpO1xuICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG4gICAgICByZXR1cm4gW0NPTlNUUlVDVF9TVElDSEVELCBkb21haW4sIGJvdW5kcywgZW5jb2RlLCBmbnNdO1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBJUlxuICAgIH0pIHtcbiAgICAgIHZhciBkb21haW4gPSBJUlsxXTtcbiAgICAgIHZhciBib3VuZHMgPSBJUlsyXTtcbiAgICAgIHZhciBlbmNvZGUgPSBJUlszXTtcbiAgICAgIHZhciBmbnMgPSBJUls0XTtcbiAgICAgIHZhciB0bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgdmFyIGNsaXAgPSBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcCh2LCBtaW4sIG1heCkge1xuICAgICAgICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICAgICAgICB2ID0gbWF4O1xuICAgICAgICAgIH0gZWxzZSBpZiAodiA8IG1pbikge1xuICAgICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdiA9IGNsaXAoc3JjW3NyY09mZnNldF0sIGRvbWFpblswXSwgZG9tYWluWzFdKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBib3VuZHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZG1pbiA9IGRvbWFpblswXTtcblxuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBkbWluID0gYm91bmRzW2kgLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkbWF4ID0gZG9tYWluWzFdO1xuXG4gICAgICAgIGlmIChpIDwgYm91bmRzLmxlbmd0aCkge1xuICAgICAgICAgIGRtYXggPSBib3VuZHNbaV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm1pbiA9IGVuY29kZVsyICogaV07XG4gICAgICAgIHZhciBybWF4ID0gZW5jb2RlWzIgKiBpICsgMV07XG4gICAgICAgIHRtcEJ1ZlswXSA9IGRtaW4gPT09IGRtYXggPyBybWluIDogcm1pbiArICh2IC0gZG1pbikgKiAocm1heCAtIHJtaW4pIC8gKGRtYXggLSBkbWluKTtcbiAgICAgICAgZm5zW2ldKHRtcEJ1ZiwgMCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb25zdHJ1Y3RQb3N0U2NyaXB0KHtcbiAgICAgIHhyZWYsXG4gICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbixcbiAgICAgIGRpY3RcbiAgICB9KSB7XG4gICAgICB2YXIgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICAgIHZhciByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgICAgaWYgKCFkb21haW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gZG9tYWluLlwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyByYW5nZS5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgICB2YXIgcGFyc2VyID0gbmV3IF9wc19wYXJzZXIuUG9zdFNjcmlwdFBhcnNlcihsZXhlcik7XG4gICAgICB2YXIgY29kZSA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgcmV0dXJuIFtDT05TVFJVQ1RfUE9TVFNDUklQVCwgZG9tYWluLCByYW5nZSwgY29kZV07XG4gICAgfSxcblxuICAgIGNvbnN0cnVjdFBvc3RTY3JpcHRGcm9tSVIoe1xuICAgICAgeHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIElSXG4gICAgfSkge1xuICAgICAgdmFyIGRvbWFpbiA9IElSWzFdO1xuICAgICAgdmFyIHJhbmdlID0gSVJbMl07XG4gICAgICB2YXIgY29kZSA9IElSWzNdO1xuXG4gICAgICBpZiAoaXNFdmFsU3VwcG9ydGVkICYmIF91dGlsLklzRXZhbFN1cHBvcnRlZENhY2hlZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBjb21waWxlZCA9IG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpO1xuXG4gICAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJzcmNcIiwgXCJzcmNPZmZzZXRcIiwgXCJkZXN0XCIsIFwiZGVzdE9mZnNldFwiLCBjb21waWxlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb25cIik7XG4gICAgICB2YXIgbnVtT3V0cHV0cyA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgdmFyIG51bUlucHV0cyA9IGRvbWFpbi5sZW5ndGggPj4gMTtcbiAgICAgIHZhciBldmFsdWF0b3IgPSBuZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihjb2RlKTtcbiAgICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB2YXIgTUFYX0NBQ0hFX1NJWkUgPSAyMDQ4ICogNDtcbiAgICAgIHZhciBjYWNoZV9hdmFpbGFibGUgPSBNQVhfQ0FDSEVfU0laRTtcbiAgICAgIHZhciB0bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KG51bUlucHV0cyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUlJlc3VsdChzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICB2YXIgaSwgdmFsdWU7XG4gICAgICAgIHZhciBrZXkgPSBcIlwiO1xuICAgICAgICB2YXIgaW5wdXQgPSB0bXBCdWY7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUlucHV0czsgaSsrKSB7XG4gICAgICAgICAgdmFsdWUgPSBzcmNbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgICAgaW5wdXRbaV0gPSB2YWx1ZTtcbiAgICAgICAgICBrZXkgKz0gdmFsdWUgKyBcIl9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjYWNoZWRWYWx1ZSA9IGNhY2hlW2tleV07XG5cbiAgICAgICAgaWYgKGNhY2hlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0LnNldChjYWNoZWRWYWx1ZSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBGbG9hdDMyQXJyYXkobnVtT3V0cHV0cyk7XG4gICAgICAgIHZhciBzdGFjayA9IGV2YWx1YXRvci5leGVjdXRlKGlucHV0KTtcbiAgICAgICAgdmFyIHN0YWNrSW5kZXggPSBzdGFjay5sZW5ndGggLSBudW1PdXRwdXRzO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1PdXRwdXRzOyBpKyspIHtcbiAgICAgICAgICB2YWx1ZSA9IHN0YWNrW3N0YWNrSW5kZXggKyBpXTtcbiAgICAgICAgICB2YXIgYm91bmQgPSByYW5nZVtpICogMl07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPCBib3VuZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYm91bmQgPSByYW5nZVtpICogMiArIDFdO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgPiBib3VuZCkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGJvdW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgICBjYWNoZV9hdmFpbGFibGUtLTtcbiAgICAgICAgICBjYWNoZVtrZXldID0gb3V0cHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdC5zZXQob3V0cHV0LCBkZXN0T2Zmc2V0KTtcbiAgICAgIH07XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGlzUERGRnVuY3Rpb24odikge1xuICB2YXIgZm5EaWN0O1xuXG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgIGZuRGljdCA9IHY7XG4gIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2KSkge1xuICAgIGZuRGljdCA9IHYuZGljdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZm5EaWN0LmhhcyhcIkZ1bmN0aW9uVHlwZVwiKTtcbn1cblxudmFyIFBvc3RTY3JpcHRTdGFjayA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja0Nsb3N1cmUoKSB7XG4gIHZhciBNQVhfU1RBQ0tfU0laRSA9IDEwMDtcblxuICBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKSB7XG4gICAgdGhpcy5zdGFjayA9ICFpbml0aWFsU3RhY2sgPyBbXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluaXRpYWxTdGFjaywgMCk7XG4gIH1cblxuICBQb3N0U2NyaXB0U3RhY2sucHJvdG90eXBlID0ge1xuICAgIHB1c2g6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wdXNoKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPj0gTUFYX1NUQUNLX1NJWkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy5cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgfSxcbiAgICBwb3A6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wb3AoKSB7XG4gICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIH0sXG4gICAgY29weTogZnVuY3Rpb24gUG9zdFNjcmlwdFN0YWNrX2NvcHkobikge1xuICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIG4sIGogPSBuIC0gMTsgaiA+PSAwOyBqLS0sIGkrKykge1xuICAgICAgICBzdGFjay5wdXNoKHN0YWNrW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGluZGV4OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfaW5kZXgobikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSBuIC0gMV0pO1xuICAgIH0sXG4gICAgcm9sbDogZnVuY3Rpb24gUG9zdFNjcmlwdFN0YWNrX3JvbGwobiwgcCkge1xuICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgIHZhciBsID0gc3RhY2subGVuZ3RoIC0gbjtcbiAgICAgIHZhciByID0gc3RhY2subGVuZ3RoIC0gMSxcbiAgICAgICAgICBjID0gbCArIChwIC0gTWF0aC5mbG9vcihwIC8gbikgKiBuKSxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGosXG4gICAgICAgICAgdDtcblxuICAgICAgZm9yIChpID0gbCwgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgICB0ID0gc3RhY2tbaV07XG4gICAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICAgIHN0YWNrW2pdID0gdDtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IGMsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdFN0YWNrO1xufSgpO1xuXG52YXIgUG9zdFNjcmlwdEV2YWx1YXRvciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRFdmFsdWF0b3JDbG9zdXJlKCkge1xuICBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yKG9wZXJhdG9ycykge1xuICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICB9XG5cbiAgUG9zdFNjcmlwdEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgZXhlY3V0ZTogZnVuY3Rpb24gUG9zdFNjcmlwdEV2YWx1YXRvcl9leGVjdXRlKGluaXRpYWxTdGFjaykge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFBvc3RTY3JpcHRTdGFjayhpbml0aWFsU3RhY2spO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIG9wZXJhdG9ycyA9IHRoaXMub3BlcmF0b3JzO1xuICAgICAgdmFyIGxlbmd0aCA9IG9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB2YXIgb3BlcmF0b3IsIGEsIGI7XG5cbiAgICAgIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzW2NvdW50ZXIrK107XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHN0YWNrLnB1c2gob3BlcmF0b3IpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgXCJqelwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoIWEpIHtcbiAgICAgICAgICAgICAgY291bnRlciA9IGI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNvdW50ZXIgPSBhO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiYWJzXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYWJzKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICsgYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhbmRcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAmJiBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAmIGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdGFuXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJiaXRzaGlmdFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoYSA+IDApIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDw8IGIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhID4+IGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjZWlsaW5nXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY2VpbChhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5jb3B5KGEpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY29zXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImN2aVwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpIHwgMDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjdnJcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIC8gYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJkdXBcIjpcbiAgICAgICAgICAgIHN0YWNrLmNvcHkoMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJlcVwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhID09PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICAgIHN0YWNrLnJvbGwoMiwgMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJleHBcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAqKiBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImZhbHNlXCI6XG4gICAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImZsb29yXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguZmxvb3IoYSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiZ2VcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSA+PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPiBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImlkaXZcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAvIGIgfCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5pbmRleChhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImxlXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPD0gYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsblwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLmxvZyhhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkgLyBNYXRoLkxOMTApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSA8IGIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibW9kXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgJSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICogYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm5lZ1wiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaCgtYSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goIWEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh+YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm9yXCI6XG4gICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfHwgYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfCBiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicG9wXCI6XG4gICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInJvbGxcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnJvbGwoYSwgYik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnJvdW5kKGEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInNpblwiOlxuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNpbihhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzcXJ0XCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguc3FydChhKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSAtIGIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwidHJ1ZVwiOlxuICAgICAgICAgICAgc3RhY2sucHVzaCh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInRydW5jYXRlXCI6XG4gICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhID0gYSA8IDAgPyBNYXRoLmNlaWwoYSkgOiBNYXRoLmZsb29yKGEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInhvclwiOlxuICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYSBeIGIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtvcGVyYXRvcn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhY2suc3RhY2s7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdEV2YWx1YXRvcjtcbn0oKTtcblxuZXhwb3J0cy5Qb3N0U2NyaXB0RXZhbHVhdG9yID0gUG9zdFNjcmlwdEV2YWx1YXRvcjtcblxudmFyIFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIEFzdE5vZGUodHlwZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBBc3ROb2RlLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcImFic3RyYWN0IG1ldGhvZFwiKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3RBcmd1bWVudChpbmRleCwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJhcmdzXCIpO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuXG4gIEFzdEFyZ3VtZW50LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gIEFzdEFyZ3VtZW50LnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgdmlzaXRvci52aXNpdEFyZ3VtZW50KHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdExpdGVyYWwobnVtYmVyKSB7XG4gICAgQXN0Tm9kZS5jYWxsKHRoaXMsIFwibGl0ZXJhbFwiKTtcbiAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICB0aGlzLm1pbiA9IG51bWJlcjtcbiAgICB0aGlzLm1heCA9IG51bWJlcjtcbiAgfVxuXG4gIEFzdExpdGVyYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0TGl0ZXJhbC5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdEJpbmFyeU9wZXJhdGlvbihvcCwgYXJnMSwgYXJnMiwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJiaW5hcnlcIik7XG4gICAgdGhpcy5vcCA9IG9wO1xuICAgIHRoaXMuYXJnMSA9IGFyZzE7XG4gICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuXG4gIEFzdEJpbmFyeU9wZXJhdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICBBc3RCaW5hcnlPcGVyYXRpb24ucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzdE1pbihhcmcsIG1heCkge1xuICAgIEFzdE5vZGUuY2FsbCh0aGlzLCBcIm1heFwiKTtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgICB0aGlzLm1pbiA9IGFyZy5taW47XG4gICAgdGhpcy5tYXggPSBtYXg7XG4gIH1cblxuICBBc3RNaW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0TWluLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgdmlzaXRvci52aXNpdE1pbih0aGlzKTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3RWYXJpYWJsZShpbmRleCwgbWluLCBtYXgpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJ2YXJcIik7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgQXN0VmFyaWFibGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgQXN0VmFyaWFibGUucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGUodGhpcyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN0VmFyaWFibGVEZWZpbml0aW9uKHZhcmlhYmxlLCBhcmcpIHtcbiAgICBBc3ROb2RlLmNhbGwodGhpcywgXCJkZWZpbml0aW9uXCIpO1xuICAgIHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgfVxuXG4gIEFzdFZhcmlhYmxlRGVmaW5pdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICBBc3RWYXJpYWJsZURlZmluaXRpb24ucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICB2aXNpdG9yLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcigpIHtcbiAgICB0aGlzLnBhcnRzID0gW107XG4gIH1cblxuICBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgIHZpc2l0QXJndW1lbnQoYXJnKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCJNYXRoLm1heChcIiwgYXJnLm1pbiwgXCIsIE1hdGgubWluKFwiLCBhcmcubWF4LCBcIiwgc3JjW3NyY09mZnNldCArIFwiLCBhcmcuaW5kZXgsIFwiXSkpXCIpO1xuICAgIH0sXG5cbiAgICB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCJ2XCIsIHZhcmlhYmxlLmluZGV4KTtcbiAgICB9LFxuXG4gICAgdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChsaXRlcmFsLm51bWJlcik7XG4gICAgfSxcblxuICAgIHZpc2l0QmluYXJ5T3BlcmF0aW9uKG9wZXJhdGlvbikge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiKFwiKTtcbiAgICAgIG9wZXJhdGlvbi5hcmcxLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiIFwiLCBvcGVyYXRpb24ub3AsIFwiIFwiKTtcbiAgICAgIG9wZXJhdGlvbi5hcmcyLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiKVwiKTtcbiAgICB9LFxuXG4gICAgdmlzaXRWYXJpYWJsZURlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwidmFyIFwiKTtcbiAgICAgIGRlZmluaXRpb24udmFyaWFibGUudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIgPSBcIik7XG4gICAgICBkZWZpbml0aW9uLmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIjtcIik7XG4gICAgfSxcblxuICAgIHZpc2l0TWluKG1heCkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiTWF0aC5taW4oXCIpO1xuICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIiwgXCIsIG1heC5tYXgsIFwiKVwiKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJ0cy5qb2luKFwiXCIpO1xuICAgIH1cblxuICB9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKG51bTEsIG51bTIpIHtcbiAgICBpZiAobnVtMi50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bTE7XG4gICAgfVxuXG4gICAgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMS5udW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBudW0yO1xuICAgIH1cblxuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciArIG51bTIubnVtYmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIitcIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gKyBudW0yLm1pbiwgbnVtMS5tYXggKyBudW0yLm1heCk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bTIubnVtYmVyID09PSAxKSB7XG4gICAgICAgIHJldHVybiBudW0xO1xuICAgICAgfSBlbHNlIGlmIChudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciAqIG51bTIubnVtYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgaWYgKG51bTEubnVtYmVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbCgwKTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG51bTI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbiA9IE1hdGgubWluKG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIHZhciBtYXggPSBNYXRoLm1heChudW0xLm1pbiAqIG51bTIubWluLCBudW0xLm1pbiAqIG51bTIubWF4LCBudW0xLm1heCAqIG51bTIubWluLCBudW0xLm1heCAqIG51bTIubWF4KTtcbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIipcIiwgbnVtMSwgbnVtMiwgbWluLCBtYXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICB9IGVsc2UgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKG51bTEubnVtYmVyIC0gbnVtMi5udW1iZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChudW0yLnR5cGUgPT09IFwiYmluYXJ5XCIgJiYgbnVtMi5vcCA9PT0gXCItXCIgJiYgbnVtMS50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0xLm51bWJlciA9PT0gMSAmJiBudW0yLmFyZzEudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMi5hcmcxLm51bWJlciA9PT0gMSkge1xuICAgICAgcmV0dXJuIG51bTIuYXJnMjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbihcIi1cIiwgbnVtMSwgbnVtMiwgbnVtMS5taW4gLSBudW0yLm1heCwgbnVtMS5tYXggLSBudW0yLm1pbik7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZE1pbk9wZXJhdGlvbihudW0xLCBtYXgpIHtcbiAgICBpZiAobnVtMS5taW4gPj0gbWF4KSB7XG4gICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobWF4KTtcbiAgICB9IGVsc2UgaWYgKG51bTEubWF4IDw9IG1heCkge1xuICAgICAgcmV0dXJuIG51bTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3RNaW4obnVtMSwgbWF4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlcigpIHt9XG5cbiAgUG9zdFNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiBQb3N0U2NyaXB0Q29tcGlsZXJfY29tcGlsZShjb2RlLCBkb21haW4sIHJhbmdlKSB7XG4gICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbXTtcbiAgICAgIHZhciBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoID4+IDEsXG4gICAgICAgICAgb3V0cHV0U2l6ZSA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgdmFyIGxhc3RSZWdpc3RlciA9IDA7XG4gICAgICB2YXIgbiwgajtcbiAgICAgIHZhciBudW0xLCBudW0yLCBhc3QxLCBhc3QyLCB0bXBWYXIsIGl0ZW07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaXplOyBpKyspIHtcbiAgICAgICAgc3RhY2sucHVzaChuZXcgQXN0QXJndW1lbnQoaSwgZG9tYWluW2kgKiAyXSwgZG9tYWluW2kgKiAyICsgMV0pKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY29kZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjb2RlW2ldO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHN0YWNrLnB1c2gobmV3IEFzdExpdGVyYWwoaXRlbSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChpdGVtKSB7XG4gICAgICAgICAgY2FzZSBcImFkZFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY3ZyXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibXVsXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkU3ViT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBhc3QyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEsIGFzdDIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicG9wXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJpbmRleFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKG51bTEudHlwZSAhPT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG4gPSBudW0xLm51bWJlcjtcblxuICAgICAgICAgICAgaWYgKG4gPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzdDEgPSBzdGFja1tzdGFjay5sZW5ndGggLSBuIC0gMV07XG5cbiAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09IFwibGl0ZXJhbFwiIHx8IGFzdDEudHlwZSA9PT0gXCJ2YXJcIikge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoIC0gbiAtIDFdID0gdG1wVmFyO1xuICAgICAgICAgICAgc3RhY2sucHVzaCh0bXBWYXIpO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbih0bXBWYXIsIGFzdDEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImR1cFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZVtpICsgMV0gPT09IFwibnVtYmVyXCIgJiYgY29kZVtpICsgMl0gPT09IFwiZ3RcIiAmJiBjb2RlW2kgKyAzXSA9PT0gaSArIDcgJiYgY29kZVtpICsgNF0gPT09IFwianpcIiAmJiBjb2RlW2kgKyA1XSA9PT0gXCJwb3BcIiAmJiBjb2RlW2kgKyA2XSA9PT0gY29kZVtpICsgMV0pIHtcbiAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIGNvZGVbaSArIDFdKSk7XG4gICAgICAgICAgICAgIGkgKz0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFzdDEgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gXCJsaXRlcmFsXCIgfHwgYXN0MS50eXBlID09PSBcInZhclwiKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0bXBWYXIgPSBuZXcgQXN0VmFyaWFibGUobGFzdFJlZ2lzdGVyKyssIGFzdDEubWluLCBhc3QxLm1heCk7XG4gICAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA9IHRtcFZhcjtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJyb2xsXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAobnVtMi50eXBlICE9PSBcImxpdGVyYWxcIiB8fCBudW0xLnR5cGUgIT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBqID0gbnVtMi5udW1iZXI7XG4gICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgIGlmIChuIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobikgfHwgIU51bWJlci5pc0ludGVnZXIoaikgfHwgc3RhY2subGVuZ3RoIDwgbikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaiA9IChqICUgbiArIG4pICUgbjtcblxuICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrLCBzdGFjay5zcGxpY2Uoc3RhY2subGVuZ3RoIC0gbiwgbiAtIGopKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFjay5sZW5ndGggIT09IG91dHB1dFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGluc3RydWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xuICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHN0YWNrLmZvckVhY2goZnVuY3Rpb24gKGV4cHIsIGkpIHtcbiAgICAgICAgdmFyIHN0YXRlbWVudEJ1aWxkZXIgPSBuZXcgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9yKCk7XG4gICAgICAgIGV4cHIudmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHZhciBtaW4gPSByYW5nZVtpICogMl0sXG4gICAgICAgICAgICBtYXggPSByYW5nZVtpICogMiArIDFdO1xuICAgICAgICB2YXIgb3V0ID0gW3N0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKV07XG5cbiAgICAgICAgaWYgKG1pbiA+IGV4cHIubWluKSB7XG4gICAgICAgICAgb3V0LnVuc2hpZnQoXCJNYXRoLm1heChcIiwgbWluLCBcIiwgXCIpO1xuICAgICAgICAgIG91dC5wdXNoKFwiKVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXggPCBleHByLm1heCkge1xuICAgICAgICAgIG91dC51bnNoaWZ0KFwiTWF0aC5taW4oXCIsIG1heCwgXCIsIFwiKTtcbiAgICAgICAgICBvdXQucHVzaChcIilcIik7XG4gICAgICAgIH1cblxuICAgICAgICBvdXQudW5zaGlmdChcImRlc3RbZGVzdE9mZnNldCArIFwiLCBpLCBcIl0gPSBcIik7XG4gICAgICAgIG91dC5wdXNoKFwiO1wiKTtcbiAgICAgICAgcmVzdWx0LnB1c2gob3V0LmpvaW4oXCJcIikpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gUG9zdFNjcmlwdENvbXBpbGVyO1xufSgpO1xuXG5leHBvcnRzLlBvc3RTY3JpcHRDb21waWxlciA9IFBvc3RTY3JpcHRDb21waWxlcjtcblxuLyoqKi8gfSksXG4vKiA0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbmNsYXNzIFBvc3RTY3JpcHRQYXJzZXIge1xuICBjb25zdHJ1Y3RvcihsZXhlcikge1xuICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gIH1cblxuICBuZXh0VG9rZW4oKSB7XG4gICAgdGhpcy5wcmV2ID0gdGhpcy50b2tlbjtcbiAgICB0aGlzLnRva2VuID0gdGhpcy5sZXhlci5nZXRUb2tlbigpO1xuICB9XG5cbiAgYWNjZXB0KHR5cGUpIHtcbiAgICBpZiAodGhpcy50b2tlbi50eXBlID09PSB0eXBlKSB7XG4gICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZXhwZWN0KHR5cGUpIHtcbiAgICBpZiAodGhpcy5hY2NlcHQodHlwZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICR7dGhpcy50b2tlbi50eXBlfSBleHBlY3RlZCAke3R5cGV9LmApO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpO1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzO1xuICB9XG5cbiAgcGFyc2VCbG9jaygpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk5VTUJFUikpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUikpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpKSB7XG4gICAgICAgIHRoaXMucGFyc2VDb25kaXRpb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbmRpdGlvbigpIHtcbiAgICBjb25zdCBjb25kaXRpb25Mb2NhdGlvbiA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsIG51bGwpO1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG5cbiAgICBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuSUYpKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gXCJqelwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgY29uc3QganVtcExvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICAgIGNvbnN0IGVuZE9mVHJ1ZSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcbiAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSk7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tqdW1wTG9jYXRpb25dID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uICsgMV0gPSBcImpcIjtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uXSA9IGVuZE9mVHJ1ZTtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2NvbmRpdGlvbkxvY2F0aW9uICsgMV0gPSBcImp6XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLlwiKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBvc3RTY3JpcHRQYXJzZXIgPSBQb3N0U2NyaXB0UGFyc2VyO1xuY29uc3QgUG9zdFNjcmlwdFRva2VuVHlwZXMgPSB7XG4gIExCUkFDRTogMCxcbiAgUkJSQUNFOiAxLFxuICBOVU1CRVI6IDIsXG4gIE9QRVJBVE9SOiAzLFxuICBJRjogNCxcbiAgSUZFTFNFOiA1XG59O1xuXG5jb25zdCBQb3N0U2NyaXB0VG9rZW4gPSBmdW5jdGlvbiBQb3N0U2NyaXB0VG9rZW5DbG9zdXJlKCkge1xuICBjb25zdCBvcENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBjbGFzcyBQb3N0U2NyaXB0VG9rZW4ge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRPcGVyYXRvcihvcCkge1xuICAgICAgY29uc3Qgb3BWYWx1ZSA9IG9wQ2FjaGVbb3BdO1xuXG4gICAgICBpZiAob3BWYWx1ZSkge1xuICAgICAgICByZXR1cm4gb3BWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wQ2FjaGVbb3BdID0gbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUiwgb3ApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgTEJSQUNFKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTEJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCBcIntcIikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgUkJSQUNFKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiUkJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFLCBcIn1cIikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgSUYoKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJJRlwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGLCBcIklGXCIpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IElGRUxTRSgpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIklGRUxTRVwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgXCJJRkVMU0VcIikpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbjtcbn0oKTtcblxuY2xhc3MgUG9zdFNjcmlwdExleGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgIHRoaXMuc3RyQnVmID0gW107XG4gIH1cblxuICBuZXh0Q2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIGxldCBjb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgIGNhc2UgMHgzMDpcbiAgICAgIGNhc2UgMHgzMTpcbiAgICAgIGNhc2UgMHgzMjpcbiAgICAgIGNhc2UgMHgzMzpcbiAgICAgIGNhc2UgMHgzNDpcbiAgICAgIGNhc2UgMHgzNTpcbiAgICAgIGNhc2UgMHgzNjpcbiAgICAgIGNhc2UgMHgzNzpcbiAgICAgIGNhc2UgMHgzODpcbiAgICAgIGNhc2UgMHgzOTpcbiAgICAgIGNhc2UgMHgyYjpcbiAgICAgIGNhc2UgMHgyZDpcbiAgICAgIGNhc2UgMHgyZTpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO1xuXG4gICAgICBjYXNlIDB4N2Q6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NWEgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdhKSkge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ciA9IHN0ckJ1Zi5qb2luKFwiXCIpO1xuXG4gICAgc3dpdGNoIChzdHIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7XG5cbiAgICAgIGNhc2UgXCJpZmVsc2VcIjpcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICB9XG4gIH1cblxuICBnZXROdW1iZXIoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBzdHJCdWZbMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkgfHwgY2ggPT09IDB4MmQgfHwgY2ggPT09IDB4MmUpIHtcbiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmlkaSA9IGJpZGk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBiYXNlVHlwZXMgPSBbXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJTXCIsIFwiQlwiLCBcIlNcIiwgXCJXU1wiLCBcIkJcIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQlwiLCBcIkJcIiwgXCJCXCIsIFwiU1wiLCBcIldTXCIsIFwiT05cIiwgXCJPTlwiLCBcIkVUXCIsIFwiRVRcIiwgXCJFVFwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJFU1wiLCBcIkNTXCIsIFwiRVNcIiwgXCJDU1wiLCBcIkNTXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJDU1wiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJcIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQ1NcIiwgXCJPTlwiLCBcIkVUXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJMXCIsIFwiT05cIiwgXCJPTlwiLCBcIkJOXCIsIFwiT05cIiwgXCJPTlwiLCBcIkVUXCIsIFwiRVRcIiwgXCJFTlwiLCBcIkVOXCIsIFwiT05cIiwgXCJMXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiRU5cIiwgXCJMXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiT05cIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiT05cIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiXTtcbnZhciBhcmFiaWNUeXBlcyA9IFtcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJBTFwiLCBcIkVUXCIsIFwiRVRcIiwgXCJBTFwiLCBcIkNTXCIsIFwiQUxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIlwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiRVRcIiwgXCJBTlwiLCBcIkFOXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFOXCIsIFwiT05cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTFwiLCBcIkFMXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiT05cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTFwiLCBcIkFMXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIl07XG5cbmZ1bmN0aW9uIGlzT2RkKGkpIHtcbiAgcmV0dXJuIChpICYgMSkgIT09IDA7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbihpKSB7XG4gIHJldHVybiAoaSAmIDEpID09PSAwO1xufVxuXG5mdW5jdGlvbiBmaW5kVW5lcXVhbChhcnIsIHN0YXJ0LCB2YWx1ZSkge1xuICBmb3IgKHZhciBqID0gc3RhcnQsIGpqID0gYXJyLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICBpZiAoYXJyW2pdICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGo7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGo7XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlcyhhcnIsIHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKSB7XG4gICAgYXJyW2pdID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVZhbHVlcyhhcnIsIHN0YXJ0LCBlbmQpIHtcbiAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gMTsgaSA8IGo7ICsraSwgLS1qKSB7XG4gICAgdmFyIHRlbXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRlbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwgPSBmYWxzZSkge1xuICBsZXQgZGlyID0gXCJsdHJcIjtcblxuICBpZiAodmVydGljYWwpIHtcbiAgICBkaXIgPSBcInR0YlwiO1xuICB9IGVsc2UgaWYgKCFpc0xUUikge1xuICAgIGRpciA9IFwicnRsXCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cixcbiAgICBkaXJcbiAgfTtcbn1cblxudmFyIGNoYXJzID0gW107XG52YXIgdHlwZXMgPSBbXTtcblxuZnVuY3Rpb24gYmlkaShzdHIsIHN0YXJ0TGV2ZWwsIHZlcnRpY2FsKSB7XG4gIHZhciBpc0xUUiA9IHRydWU7XG4gIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuXG4gIGlmIChzdHJMZW5ndGggPT09IDAgfHwgdmVydGljYWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwpO1xuICB9XG5cbiAgY2hhcnMubGVuZ3RoID0gc3RyTGVuZ3RoO1xuICB0eXBlcy5sZW5ndGggPSBzdHJMZW5ndGg7XG4gIHZhciBudW1CaWRpID0gMDtcbiAgdmFyIGksIGlpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGNoYXJzW2ldID0gc3RyLmNoYXJBdChpKTtcbiAgICB2YXIgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB2YXIgY2hhclR5cGUgPSBcIkxcIjtcblxuICAgIGlmIChjaGFyQ29kZSA8PSAweDAwZmYpIHtcbiAgICAgIGNoYXJUeXBlID0gYmFzZVR5cGVzW2NoYXJDb2RlXTtcbiAgICB9IGVsc2UgaWYgKDB4MDU5MCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA1ZjQpIHtcbiAgICAgIGNoYXJUeXBlID0gXCJSXCI7XG4gICAgfSBlbHNlIGlmICgweDA2MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNmZmKSB7XG4gICAgICBjaGFyVHlwZSA9IGFyYWJpY1R5cGVzW2NoYXJDb2RlICYgMHhmZl07XG5cbiAgICAgIGlmICghY2hhclR5cGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciBcIiArIGNoYXJDb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgweDA3MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwOGFjKSB7XG4gICAgICBjaGFyVHlwZSA9IFwiQUxcIjtcbiAgICB9XG5cbiAgICBpZiAoY2hhclR5cGUgPT09IFwiUlwiIHx8IGNoYXJUeXBlID09PSBcIkFMXCIgfHwgY2hhclR5cGUgPT09IFwiQU5cIikge1xuICAgICAgbnVtQmlkaSsrO1xuICAgIH1cblxuICAgIHR5cGVzW2ldID0gY2hhclR5cGU7XG4gIH1cblxuICBpZiAobnVtQmlkaSA9PT0gMCkge1xuICAgIGlzTFRSID0gdHJ1ZTtcbiAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUik7XG4gIH1cblxuICBpZiAoc3RhcnRMZXZlbCA9PT0gLTEpIHtcbiAgICBpZiAobnVtQmlkaSAvIHN0ckxlbmd0aCA8IDAuMykge1xuICAgICAgaXNMVFIgPSB0cnVlO1xuICAgICAgc3RhcnRMZXZlbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTFRSID0gZmFsc2U7XG4gICAgICBzdGFydExldmVsID0gMTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGV2ZWxzID0gW107XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgbGV2ZWxzW2ldID0gc3RhcnRMZXZlbDtcbiAgfVxuXG4gIHZhciBlID0gaXNPZGQoc3RhcnRMZXZlbCkgPyBcIlJcIiA6IFwiTFwiO1xuICB2YXIgc29yID0gZTtcbiAgdmFyIGVvciA9IHNvcjtcbiAgdmFyIGxhc3RUeXBlID0gc29yO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJOU01cIikge1xuICAgICAgdHlwZXNbaV0gPSBsYXN0VHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdFR5cGUgPSB0eXBlc1tpXTtcbiAgICB9XG4gIH1cblxuICBsYXN0VHlwZSA9IHNvcjtcbiAgdmFyIHQ7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgaWYgKHQgPT09IFwiRU5cIikge1xuICAgICAgdHlwZXNbaV0gPSBsYXN0VHlwZSA9PT0gXCJBTFwiID8gXCJBTlwiIDogXCJFTlwiO1xuICAgIH0gZWxzZSBpZiAodCA9PT0gXCJSXCIgfHwgdCA9PT0gXCJMXCIgfHwgdCA9PT0gXCJBTFwiKSB7XG4gICAgICBsYXN0VHlwZSA9IHQ7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgaWYgKHQgPT09IFwiQUxcIikge1xuICAgICAgdHlwZXNbaV0gPSBcIlJcIjtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAxOyBpIDwgc3RyTGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIkVTXCIgJiYgdHlwZXNbaSAtIDFdID09PSBcIkVOXCIgJiYgdHlwZXNbaSArIDFdID09PSBcIkVOXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gXCJFTlwiO1xuICAgIH1cblxuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJDU1wiICYmICh0eXBlc1tpIC0gMV0gPT09IFwiRU5cIiB8fCB0eXBlc1tpIC0gMV0gPT09IFwiQU5cIikgJiYgdHlwZXNbaSArIDFdID09PSB0eXBlc1tpIC0gMV0pIHtcbiAgICAgIHR5cGVzW2ldID0gdHlwZXNbaSAtIDFdO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJFTlwiKSB7XG4gICAgICB2YXIgajtcblxuICAgICAgZm9yIChqID0gaSAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmICh0eXBlc1tqXSAhPT0gXCJFVFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlc1tqXSA9IFwiRU5cIjtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBzdHJMZW5ndGg7ICsraikge1xuICAgICAgICBpZiAodHlwZXNbal0gIT09IFwiRVRcIikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbal0gPSBcIkVOXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgaWYgKHQgPT09IFwiV1NcIiB8fCB0ID09PSBcIkVTXCIgfHwgdCA9PT0gXCJFVFwiIHx8IHQgPT09IFwiQ1NcIikge1xuICAgICAgdHlwZXNbaV0gPSBcIk9OXCI7XG4gICAgfVxuICB9XG5cbiAgbGFzdFR5cGUgPSBzb3I7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgaWYgKHQgPT09IFwiRU5cIikge1xuICAgICAgdHlwZXNbaV0gPSBsYXN0VHlwZSA9PT0gXCJMXCIgPyBcIkxcIiA6IFwiRU5cIjtcbiAgICB9IGVsc2UgaWYgKHQgPT09IFwiUlwiIHx8IHQgPT09IFwiTFwiKSB7XG4gICAgICBsYXN0VHlwZSA9IHQ7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIk9OXCIpIHtcbiAgICAgIHZhciBlbmQgPSBmaW5kVW5lcXVhbCh0eXBlcywgaSArIDEsIFwiT05cIik7XG4gICAgICB2YXIgYmVmb3JlID0gc29yO1xuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgYmVmb3JlID0gdHlwZXNbaSAtIDFdO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWZ0ZXIgPSBlb3I7XG5cbiAgICAgIGlmIChlbmQgKyAxIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgIGFmdGVyID0gdHlwZXNbZW5kICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmUgIT09IFwiTFwiKSB7XG4gICAgICAgIGJlZm9yZSA9IFwiUlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWZ0ZXIgIT09IFwiTFwiKSB7XG4gICAgICAgIGFmdGVyID0gXCJSXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmUgPT09IGFmdGVyKSB7XG4gICAgICAgIHNldFZhbHVlcyh0eXBlcywgaSwgZW5kLCBiZWZvcmUpO1xuICAgICAgfVxuXG4gICAgICBpID0gZW5kIC0gMTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiT05cIikge1xuICAgICAgdHlwZXNbaV0gPSBlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIHQgPSB0eXBlc1tpXTtcblxuICAgIGlmIChpc0V2ZW4obGV2ZWxzW2ldKSkge1xuICAgICAgaWYgKHQgPT09IFwiUlwiKSB7XG4gICAgICAgIGxldmVsc1tpXSArPSAxO1xuICAgICAgfSBlbHNlIGlmICh0ID09PSBcIkFOXCIgfHwgdCA9PT0gXCJFTlwiKSB7XG4gICAgICAgIGxldmVsc1tpXSArPSAyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodCA9PT0gXCJMXCIgfHwgdCA9PT0gXCJBTlwiIHx8IHQgPT09IFwiRU5cIikge1xuICAgICAgICBsZXZlbHNbaV0gKz0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaGlnaGVzdExldmVsID0gLTE7XG4gIHZhciBsb3dlc3RPZGRMZXZlbCA9IDk5O1xuICB2YXIgbGV2ZWw7XG5cbiAgZm9yIChpID0gMCwgaWkgPSBsZXZlbHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIGxldmVsID0gbGV2ZWxzW2ldO1xuXG4gICAgaWYgKGhpZ2hlc3RMZXZlbCA8IGxldmVsKSB7XG4gICAgICBoaWdoZXN0TGV2ZWwgPSBsZXZlbDtcbiAgICB9XG5cbiAgICBpZiAobG93ZXN0T2RkTGV2ZWwgPiBsZXZlbCAmJiBpc09kZChsZXZlbCkpIHtcbiAgICAgIGxvd2VzdE9kZExldmVsID0gbGV2ZWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXZlbCA9IGhpZ2hlc3RMZXZlbDsgbGV2ZWwgPj0gbG93ZXN0T2RkTGV2ZWw7IC0tbGV2ZWwpIHtcbiAgICB2YXIgc3RhcnQgPSAtMTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGlmIChsZXZlbHNbaV0gPCBsZXZlbCkge1xuICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgIHJldmVyc2VWYWx1ZXMoY2hhcnMsIHN0YXJ0LCBpKTtcbiAgICAgICAgICBzdGFydCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgIHJldmVyc2VWYWx1ZXMoY2hhcnMsIHN0YXJ0LCBsZXZlbHMubGVuZ3RoKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICB2YXIgY2ggPSBjaGFyc1tpXTtcblxuICAgIGlmIChjaCA9PT0gXCI8XCIgfHwgY2ggPT09IFwiPlwiKSB7XG4gICAgICBjaGFyc1tpXSA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KGNoYXJzLmpvaW4oXCJcIiksIGlzTFRSKTtcbn1cblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gdm9pZCAwO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgZ2V0TWV0cmljcyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQ291cmllciA9IDYwMDtcbiAgdFtcIkNvdXJpZXItQm9sZFwiXSA9IDYwMDtcbiAgdFtcIkNvdXJpZXItQm9sZE9ibGlxdWVcIl0gPSA2MDA7XG4gIHRbXCJDb3VyaWVyLU9ibGlxdWVcIl0gPSA2MDA7XG4gIHQuSGVsdmV0aWNhID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuZXhjbGFtID0gMjc4O1xuICAgIHQucXVvdGVkYmwgPSAzNTU7XG4gICAgdC5udW1iZXJzaWduID0gNTU2O1xuICAgIHQuZG9sbGFyID0gNTU2O1xuICAgIHQucGVyY2VudCA9IDg4OTtcbiAgICB0LmFtcGVyc2FuZCA9IDY2NztcbiAgICB0LnF1b3RlcmlnaHQgPSAyMjI7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSAzODk7XG4gICAgdC5wbHVzID0gNTg0O1xuICAgIHQuY29tbWEgPSAyNzg7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNzg7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1NTY7XG4gICAgdC5vbmUgPSA1NTY7XG4gICAgdC50d28gPSA1NTY7XG4gICAgdC50aHJlZSA9IDU1NjtcbiAgICB0LmZvdXIgPSA1NTY7XG4gICAgdC5maXZlID0gNTU2O1xuICAgIHQuc2l4ID0gNTU2O1xuICAgIHQuc2V2ZW4gPSA1NTY7XG4gICAgdC5laWdodCA9IDU1NjtcbiAgICB0Lm5pbmUgPSA1NTY7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1ODQ7XG4gICAgdC5lcXVhbCA9IDU4NDtcbiAgICB0LmdyZWF0ZXIgPSA1ODQ7XG4gICAgdC5xdWVzdGlvbiA9IDU1NjtcbiAgICB0LmF0ID0gMTAxNTtcbiAgICB0LkEgPSA2Njc7XG4gICAgdC5CID0gNjY3O1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDI3ODtcbiAgICB0LkogPSA1MDA7XG4gICAgdC5LID0gNjY3O1xuICAgIHQuTCA9IDU1NjtcbiAgICB0Lk0gPSA4MzM7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2Njc7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA2Njc7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA2Njc7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDY2NztcbiAgICB0LlkgPSA2Njc7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAyNzg7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAyNzg7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDQ2OTtcbiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7XG4gICAgdC5xdW90ZWxlZnQgPSAyMjI7XG4gICAgdC5hID0gNTU2O1xuICAgIHQuYiA9IDU1NjtcbiAgICB0LmMgPSA1MDA7XG4gICAgdC5kID0gNTU2O1xuICAgIHQuZSA9IDU1NjtcbiAgICB0LmYgPSAyNzg7XG4gICAgdC5nID0gNTU2O1xuICAgIHQuaCA9IDU1NjtcbiAgICB0LmkgPSAyMjI7XG4gICAgdC5qID0gMjIyO1xuICAgIHQuayA9IDUwMDtcbiAgICB0LmwgPSAyMjI7XG4gICAgdC5tID0gODMzO1xuICAgIHQubiA9IDU1NjtcbiAgICB0Lm8gPSA1NTY7XG4gICAgdC5wID0gNTU2O1xuICAgIHQucSA9IDU1NjtcbiAgICB0LnIgPSAzMzM7XG4gICAgdC5zID0gNTAwO1xuICAgIHQudCA9IDI3ODtcbiAgICB0LnUgPSA1NTY7XG4gICAgdC52ID0gNTAwO1xuICAgIHQudyA9IDcyMjtcbiAgICB0LnggPSA1MDA7XG4gICAgdC55ID0gNTAwO1xuICAgIHQueiA9IDUwMDtcbiAgICB0LmJyYWNlbGVmdCA9IDMzNDtcbiAgICB0LmJhciA9IDI2MDtcbiAgICB0LmJyYWNlcmlnaHQgPSAzMzQ7XG4gICAgdC5hc2NpaXRpbGRlID0gNTg0O1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1NTY7XG4gICAgdC5zdGVybGluZyA9IDU1NjtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTU2O1xuICAgIHQuZmxvcmluID0gNTU2O1xuICAgIHQuc2VjdGlvbiA9IDU1NjtcbiAgICB0LmN1cnJlbmN5ID0gNTU2O1xuICAgIHQucXVvdGVzaW5nbGUgPSAxOTE7XG4gICAgdC5xdW90ZWRibGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA1MDA7XG4gICAgdC5mbCA9IDUwMDtcbiAgICB0LmVuZGFzaCA9IDU1NjtcbiAgICB0LmRhZ2dlciA9IDU1NjtcbiAgICB0LmRhZ2dlcmRibCA9IDU1NjtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4O1xuICAgIHQucGFyYWdyYXBoID0gNTM3O1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyMjI7XG4gICAgdC5xdW90ZWRibGJhc2UgPSAzMzM7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gMzMzO1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSAxMDAwO1xuICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7XG4gICAgdC5Mc2xhc2ggPSA1NTY7XG4gICAgdC5Pc2xhc2ggPSA3Nzg7XG4gICAgdC5PRSA9IDEwMDA7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7XG4gICAgdC5hZSA9IDg4OTtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjIyO1xuICAgIHQub3NsYXNoID0gNjExO1xuICAgIHQub2UgPSA5NDQ7XG4gICAgdC5nZXJtYW5kYmxzID0gNjExO1xuICAgIHQuSWRpZXJlc2lzID0gMjc4O1xuICAgIHQuZWFjdXRlID0gNTU2O1xuICAgIHQuYWJyZXZlID0gNTU2O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDU1NjtcbiAgICB0LmVjYXJvbiA9IDU1NjtcbiAgICB0LllkaWVyZXNpcyA9IDY2NztcbiAgICB0LmRpdmlkZSA9IDU4NDtcbiAgICB0LllhY3V0ZSA9IDY2NztcbiAgICB0LkFjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWFjdXRlID0gNTU2O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1MDA7XG4gICAgdC5zY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5lY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDU1NjtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1NTY7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDczNztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA1MDA7XG4gICAgdC5hcmluZyA9IDU1NjtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDIyMjtcbiAgICB0LmFncmF2ZSA9IDU1NjtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDcyMjtcbiAgICB0LmF0aWxkZSA9IDU1NjtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSA1MDA7XG4gICAgdC5zY2VkaWxsYSA9IDUwMDtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA3MjI7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7XG4gICAgdC51Y2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuQW1hY3JvbiA9IDY2NztcbiAgICB0LnJjYXJvbiA9IDMzMztcbiAgICB0LmNjZWRpbGxhID0gNTAwO1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjY3O1xuICAgIHQuT21hY3JvbiA9IDc3ODtcbiAgICB0LlJhY3V0ZSA9IDcyMjtcbiAgICB0LlNhY3V0ZSA9IDY2NztcbiAgICB0LmRjYXJvbiA9IDY0MztcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDU1NjtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZ3JhdmUgPSA3Nzg7XG4gICAgdC5BZ3JhdmUgPSA2Njc7XG4gICAgdC5BYnJldmUgPSA2Njc7XG4gICAgdC5tdWx0aXBseSA9IDU4NDtcbiAgICB0LnVhY3V0ZSA9IDU1NjtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNTAwO1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmVkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmNhY3V0ZSA9IDUwMDtcbiAgICB0Lm5hY3V0ZSA9IDU1NjtcbiAgICB0LnVtYWNyb24gPSA1NTY7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAyNzg7XG4gICAgdC5wbHVzbWludXMgPSA1ODQ7XG4gICAgdC5icm9rZW5iYXIgPSAyNjA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzM3O1xuICAgIHQuR2JyZXZlID0gNzc4O1xuICAgIHQuSWRvdGFjY2VudCA9IDI3ODtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDMzMztcbiAgICB0Lm9tYWNyb24gPSA1NTY7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDcyMjtcbiAgICB0Lmxjb21tYWFjY2VudCA9IDIyMjtcbiAgICB0LnRjYXJvbiA9IDMxNztcbiAgICB0LmVvZ29uZWsgPSA1NTY7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNjY3O1xuICAgIHQuQWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZWdyYXZlID0gNTU2O1xuICAgIHQuemFjdXRlID0gNTAwO1xuICAgIHQuaW9nb25layA9IDIyMjtcbiAgICB0Lk9hY3V0ZSA9IDc3ODtcbiAgICB0Lm9hY3V0ZSA9IDU1NjtcbiAgICB0LmFtYWNyb24gPSA1NTY7XG4gICAgdC5zYWN1dGUgPSA1MDA7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDc3ODtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1NTY7XG4gICAgdC50d29zdXBlcmlvciA9IDMzMztcbiAgICB0Lk9kaWVyZXNpcyA9IDc3ODtcbiAgICB0Lm11ID0gNTU2O1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDU1NjtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA1NTY7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0O1xuICAgIHQuU2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY2Fyb24gPSAyOTk7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5MYWN1dGUgPSA1NTY7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDU1NjtcbiAgICB0LklncmF2ZSA9IDI3ODtcbiAgICB0LkltYWNyb24gPSAyNzg7XG4gICAgdC5MY2Fyb24gPSA1NTY7XG4gICAgdC5vbmVoYWxmID0gODM0O1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5udGlsZGUgPSA1NTY7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDU1NjtcbiAgICB0LmdicmV2ZSA9IDU1NjtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7XG4gICAgdC5TY2Fyb24gPSA2Njc7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4O1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNTU2O1xuICAgIHQuQ2Nhcm9uID0gNzIyO1xuICAgIHQudWdyYXZlID0gNTU2O1xuICAgIHQucmFkaWNhbCA9IDQ1MztcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDMzMztcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDU1NjtcbiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LkF0aWxkZSA9IDY2NztcbiAgICB0LkFvZ29uZWsgPSA2Njc7XG4gICAgdC5BcmluZyA9IDY2NztcbiAgICB0Lk90aWxkZSA9IDc3ODtcbiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMjc4O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQubWludXMgPSA1ODQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0Lm5jYXJvbiA9IDU1NjtcbiAgICB0LnRjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7XG4gICAgdC5vZGllcmVzaXMgPSA1NTY7XG4gICAgdC51ZGllcmVzaXMgPSA1NTY7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LmV0aCA9IDU1NjtcbiAgICB0LnpjYXJvbiA9IDUwMDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1NTY7XG4gIH0pO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNzg7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC5xdW90ZWRibCA9IDQ3NDtcbiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7XG4gICAgdC5kb2xsYXIgPSA1NTY7XG4gICAgdC5wZXJjZW50ID0gODg5O1xuICAgIHQuYW1wZXJzYW5kID0gNzIyO1xuICAgIHQucXVvdGVyaWdodCA9IDI3ODtcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDM4OTtcbiAgICB0LnBsdXMgPSA1ODQ7XG4gICAgdC5jb21tYSA9IDI3ODtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI3ODtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDU1NjtcbiAgICB0Lm9uZSA9IDU1NjtcbiAgICB0LnR3byA9IDU1NjtcbiAgICB0LnRocmVlID0gNTU2O1xuICAgIHQuZm91ciA9IDU1NjtcbiAgICB0LmZpdmUgPSA1NTY7XG4gICAgdC5zaXggPSA1NTY7XG4gICAgdC5zZXZlbiA9IDU1NjtcbiAgICB0LmVpZ2h0ID0gNTU2O1xuICAgIHQubmluZSA9IDU1NjtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDU4NDtcbiAgICB0LmVxdWFsID0gNTg0O1xuICAgIHQuZ3JlYXRlciA9IDU4NDtcbiAgICB0LnF1ZXN0aW9uID0gNjExO1xuICAgIHQuYXQgPSA5NzU7XG4gICAgdC5BID0gNzIyO1xuICAgIHQuQiA9IDcyMjtcbiAgICB0LkMgPSA3MjI7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzc4O1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAyNzg7XG4gICAgdC5KID0gNTU2O1xuICAgIHQuSyA9IDcyMjtcbiAgICB0LkwgPSA2MTE7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3Nzg7XG4gICAgdC5QID0gNjY3O1xuICAgIHQuUSA9IDc3ODtcbiAgICB0LlIgPSA3MjI7XG4gICAgdC5TID0gNjY3O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDk0NDtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjY3O1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1ODQ7XG4gICAgdC51bmRlcnNjb3JlID0gNTU2O1xuICAgIHQucXVvdGVsZWZ0ID0gMjc4O1xuICAgIHQuYSA9IDU1NjtcbiAgICB0LmIgPSA2MTE7XG4gICAgdC5jID0gNTU2O1xuICAgIHQuZCA9IDYxMTtcbiAgICB0LmUgPSA1NTY7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDYxMTtcbiAgICB0LmggPSA2MTE7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA1NTY7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDg4OTtcbiAgICB0Lm4gPSA2MTE7XG4gICAgdC5vID0gNjExO1xuICAgIHQucCA9IDYxMTtcbiAgICB0LnEgPSA2MTE7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDU1NjtcbiAgICB0LnQgPSAzMzM7XG4gICAgdC51ID0gNjExO1xuICAgIHQudiA9IDU1NjtcbiAgICB0LncgPSA3Nzg7XG4gICAgdC54ID0gNTU2O1xuICAgIHQueSA9IDU1NjtcbiAgICB0LnogPSA1MDA7XG4gICAgdC5icmFjZWxlZnQgPSAzODk7XG4gICAgdC5iYXIgPSAyODA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzg5O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU4NDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTU2O1xuICAgIHQuc3RlcmxpbmcgPSA1NTY7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDU1NjtcbiAgICB0LmZsb3JpbiA9IDU1NjtcbiAgICB0LnNlY3Rpb24gPSA1NTY7XG4gICAgdC5jdXJyZW5jeSA9IDU1NjtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjM4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNjExO1xuICAgIHQuZmwgPSA2MTE7XG4gICAgdC5lbmRhc2ggPSA1NTY7XG4gICAgdC5kYWdnZXIgPSA1NTY7XG4gICAgdC5kYWdnZXJkYmwgPSA1NTY7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI3ODtcbiAgICB0LnBhcmFncmFwaCA9IDU1NjtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMjc4O1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTU2O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNjExO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzcwO1xuICAgIHQuTHNsYXNoID0gNjExO1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzY1O1xuICAgIHQuYWUgPSA4ODk7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDYxMTtcbiAgICB0Lm9lID0gOTQ0O1xuICAgIHQuZ2VybWFuZGJscyA9IDYxMTtcbiAgICB0LklkaWVyZXNpcyA9IDI3ODtcbiAgICB0LmVhY3V0ZSA9IDU1NjtcbiAgICB0LmFicmV2ZSA9IDU1NjtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA2MTE7XG4gICAgdC5lY2Fyb24gPSA1NTY7XG4gICAgdC5ZZGllcmVzaXMgPSA2Njc7XG4gICAgdC5kaXZpZGUgPSA1ODQ7XG4gICAgdC5ZYWN1dGUgPSA2Njc7XG4gICAgdC5BY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LmFhY3V0ZSA9IDU1NjtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTU2O1xuICAgIHQuc2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1NTY7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNjExO1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3Mzc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNTU2O1xuICAgIHQuYXJpbmcgPSA1NTY7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA1NTY7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1NTY7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gNTU2O1xuICAgIHQuc2NlZGlsbGEgPSA1NTY7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDk0O1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5hY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LkFtYWNyb24gPSA3MjI7XG4gICAgdC5yY2Fyb24gPSAzODk7XG4gICAgdC5jY2VkaWxsYSA9IDU1NjtcbiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5UaG9ybiA9IDY2NztcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA2Njc7XG4gICAgdC5kY2Fyb24gPSA3NDM7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA2MTE7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNzIyO1xuICAgIHQuQWJyZXZlID0gNzIyO1xuICAgIHQubXVsdGlwbHkgPSA1ODQ7XG4gICAgdC51YWN1dGUgPSA2MTE7XG4gICAgdC5UY2Fyb24gPSA2MTE7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDtcbiAgICB0LnlkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1NTY7XG4gICAgdC5lZGllcmVzaXMgPSA1NTY7XG4gICAgdC5jYWN1dGUgPSA1NTY7XG4gICAgdC5uYWN1dGUgPSA2MTE7XG4gICAgdC51bWFjcm9uID0gNjExO1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMjc4O1xuICAgIHQucGx1c21pbnVzID0gNTg0O1xuICAgIHQuYnJva2VuYmFyID0gMjgwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDczNztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAyNzg7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSAzODk7XG4gICAgdC5vbWFjcm9uID0gNjExO1xuICAgIHQuWmFjdXRlID0gNjExO1xuICAgIHQuWmNhcm9uID0gNjExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSAzODk7XG4gICAgdC5lb2dvbmVrID0gNTU2O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDcyMjtcbiAgICB0LkFkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmVncmF2ZSA9IDU1NjtcbiAgICB0LnphY3V0ZSA9IDUwMDtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA2MTE7XG4gICAgdC5hbWFjcm9uID0gNTU2O1xuICAgIHQuc2FjdXRlID0gNTU2O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNjExO1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDYxMTtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA2MTE7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNjExO1xuICAgIHQudGhyZWVxdWFydGVycyA9IDgzNDtcbiAgICB0LlNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNhcm9uID0gNDAwO1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGFjdXRlID0gNjExO1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA1NTY7XG4gICAgdC5JZ3JhdmUgPSAyNzg7XG4gICAgdC5JbWFjcm9uID0gMjc4O1xuICAgIHQuTGNhcm9uID0gNjExO1xuICAgIHQub25laGFsZiA9IDgzNDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNjExO1xuICAgIHQubnRpbGRlID0gNjExO1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA1NTY7XG4gICAgdC5nYnJldmUgPSA2MTE7XG4gICAgdC5vbmVxdWFydGVyID0gODM0O1xuICAgIHQuU2Nhcm9uID0gNjY3O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDYxMTtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDYxMTtcbiAgICB0LnJhZGljYWwgPSA1NDk7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA2MTE7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5BdGlsZGUgPSA3MjI7XG4gICAgdC5Bb2dvbmVrID0gNzIyO1xuICAgIHQuQXJpbmcgPSA3MjI7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNTAwO1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDI3ODtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm1pbnVzID0gNTg0O1xuICAgIHQuSWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5uY2Fyb24gPSA2MTE7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTg0O1xuICAgIHQub2RpZXJlc2lzID0gNjExO1xuICAgIHQudWRpZXJlc2lzID0gNjExO1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5ldGggPSA2MTE7XG4gICAgdC56Y2Fyb24gPSA1MDA7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMzMztcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTU2O1xuICB9KTtcbiAgdFtcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNDc0O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA3MjI7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjc4O1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA2MTE7XG4gICAgdC5hdCA9IDk3NTtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNzIyO1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDI3ODtcbiAgICB0LkogPSA1NTY7XG4gICAgdC5LID0gNzIyO1xuICAgIHQuTCA9IDYxMTtcbiAgICB0Lk0gPSA4MzM7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2Njc7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA2Njc7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA2Njc7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDY2NztcbiAgICB0LlkgPSA2Njc7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDU4NDtcbiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7XG4gICAgdC5xdW90ZWxlZnQgPSAyNzg7XG4gICAgdC5hID0gNTU2O1xuICAgIHQuYiA9IDYxMTtcbiAgICB0LmMgPSA1NTY7XG4gICAgdC5kID0gNjExO1xuICAgIHQuZSA9IDU1NjtcbiAgICB0LmYgPSAzMzM7XG4gICAgdC5nID0gNjExO1xuICAgIHQuaCA9IDYxMTtcbiAgICB0LmkgPSAyNzg7XG4gICAgdC5qID0gMjc4O1xuICAgIHQuayA9IDU1NjtcbiAgICB0LmwgPSAyNzg7XG4gICAgdC5tID0gODg5O1xuICAgIHQubiA9IDYxMTtcbiAgICB0Lm8gPSA2MTE7XG4gICAgdC5wID0gNjExO1xuICAgIHQucSA9IDYxMTtcbiAgICB0LnIgPSAzODk7XG4gICAgdC5zID0gNTU2O1xuICAgIHQudCA9IDMzMztcbiAgICB0LnUgPSA2MTE7XG4gICAgdC52ID0gNTU2O1xuICAgIHQudyA9IDc3ODtcbiAgICB0LnggPSA1NTY7XG4gICAgdC55ID0gNTU2O1xuICAgIHQueiA9IDUwMDtcbiAgICB0LmJyYWNlbGVmdCA9IDM4OTtcbiAgICB0LmJhciA9IDI4MDtcbiAgICB0LmJyYWNlcmlnaHQgPSAzODk7XG4gICAgdC5hc2NpaXRpbGRlID0gNTg0O1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1NTY7XG4gICAgdC5zdGVybGluZyA9IDU1NjtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTU2O1xuICAgIHQuZmxvcmluID0gNTU2O1xuICAgIHQuc2VjdGlvbiA9IDU1NjtcbiAgICB0LmN1cnJlbmN5ID0gNTU2O1xuICAgIHQucXVvdGVzaW5nbGUgPSAyMzg7XG4gICAgdC5xdW90ZWRibGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA2MTE7XG4gICAgdC5mbCA9IDYxMTtcbiAgICB0LmVuZGFzaCA9IDU1NjtcbiAgICB0LmRhZ2dlciA9IDU1NjtcbiAgICB0LmRhZ2dlcmRibCA9IDU1NjtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4O1xuICAgIHQucGFyYWdyYXBoID0gNTU2O1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyNzg7XG4gICAgdC5xdW90ZWRibGJhc2UgPSA1MDA7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSAxMDAwO1xuICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3Nzg7XG4gICAgdC5PRSA9IDEwMDA7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7XG4gICAgdC5hZSA9IDg4OTtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNjExO1xuICAgIHQub2UgPSA5NDQ7XG4gICAgdC5nZXJtYW5kYmxzID0gNjExO1xuICAgIHQuSWRpZXJlc2lzID0gMjc4O1xuICAgIHQuZWFjdXRlID0gNTU2O1xuICAgIHQuYWJyZXZlID0gNTU2O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LmVjYXJvbiA9IDU1NjtcbiAgICB0LllkaWVyZXNpcyA9IDY2NztcbiAgICB0LmRpdmlkZSA9IDU4NDtcbiAgICB0LllhY3V0ZSA9IDY2NztcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNTU2O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1NTY7XG4gICAgdC5zY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5lY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDU1NjtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA2MTE7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDczNztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA1NTY7XG4gICAgdC5hcmluZyA9IDU1NjtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDU1NjtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDcyMjtcbiAgICB0LmF0aWxkZSA9IDU1NjtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSA1NTY7XG4gICAgdC5zY2VkaWxsYSA9IDU1NjtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5SY2Fyb24gPSA3MjI7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7XG4gICAgdC51Y2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNTU2O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjY3O1xuICAgIHQuT21hY3JvbiA9IDc3ODtcbiAgICB0LlJhY3V0ZSA9IDcyMjtcbiAgICB0LlNhY3V0ZSA9IDY2NztcbiAgICB0LmRjYXJvbiA9IDc0MztcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDYxMTtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZ3JhdmUgPSA3Nzg7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU4NDtcbiAgICB0LnVhY3V0ZSA9IDYxMTtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQueWRpZXJlc2lzID0gNTU2O1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmVkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmNhY3V0ZSA9IDU1NjtcbiAgICB0Lm5hY3V0ZSA9IDYxMTtcbiAgICB0LnVtYWNyb24gPSA2MTE7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAyNzg7XG4gICAgdC5wbHVzbWludXMgPSA1ODQ7XG4gICAgdC5icm9rZW5iYXIgPSAyODA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzM3O1xuICAgIHQuR2JyZXZlID0gNzc4O1xuICAgIHQuSWRvdGFjY2VudCA9IDI3ODtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA2MTE7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDcyMjtcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDM4OTtcbiAgICB0LmVvZ29uZWsgPSA1NTY7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNTU2O1xuICAgIHQuemFjdXRlID0gNTAwO1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDc3ODtcbiAgICB0Lm9hY3V0ZSA9IDYxMTtcbiAgICB0LmFtYWNyb24gPSA1NTY7XG4gICAgdC5zYWN1dGUgPSA1NTY7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDc3ODtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA2MTE7XG4gICAgdC50d29zdXBlcmlvciA9IDMzMztcbiAgICB0Lk9kaWVyZXNpcyA9IDc3ODtcbiAgICB0Lm11ID0gNjExO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA2MTE7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0O1xuICAgIHQuU2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY2Fyb24gPSA0MDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDU1NjtcbiAgICB0LklncmF2ZSA9IDI3ODtcbiAgICB0LkltYWNyb24gPSAyNzg7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gODM0O1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5udGlsZGUgPSA2MTE7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDU1NjtcbiAgICB0LmdicmV2ZSA9IDYxMTtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7XG4gICAgdC5TY2Fyb24gPSA2Njc7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4O1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNjExO1xuICAgIHQuQ2Nhcm9uID0gNzIyO1xuICAgIHQudWdyYXZlID0gNjExO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDYxMTtcbiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDcyMjtcbiAgICB0LkFvZ29uZWsgPSA3MjI7XG4gICAgdC5BcmluZyA9IDcyMjtcbiAgICB0Lk90aWxkZSA9IDc3ODtcbiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMjc4O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQubWludXMgPSA1ODQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0Lm5jYXJvbiA9IDYxMTtcbiAgICB0LnRjb21tYWFjY2VudCA9IDMzMztcbiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7XG4gICAgdC5vZGllcmVzaXMgPSA2MTE7XG4gICAgdC51ZGllcmVzaXMgPSA2MTE7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LmV0aCA9IDYxMTtcbiAgICB0LnpjYXJvbiA9IDUwMDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDYxMTtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1NTY7XG4gIH0pO1xuICB0W1wiSGVsdmV0aWNhLU9ibGlxdWVcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNzg7XG4gICAgdC5leGNsYW0gPSAyNzg7XG4gICAgdC5xdW90ZWRibCA9IDM1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7XG4gICAgdC5kb2xsYXIgPSA1NTY7XG4gICAgdC5wZXJjZW50ID0gODg5O1xuICAgIHQuYW1wZXJzYW5kID0gNjY3O1xuICAgIHQucXVvdGVyaWdodCA9IDIyMjtcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDM4OTtcbiAgICB0LnBsdXMgPSA1ODQ7XG4gICAgdC5jb21tYSA9IDI3ODtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI3ODtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDU1NjtcbiAgICB0Lm9uZSA9IDU1NjtcbiAgICB0LnR3byA9IDU1NjtcbiAgICB0LnRocmVlID0gNTU2O1xuICAgIHQuZm91ciA9IDU1NjtcbiAgICB0LmZpdmUgPSA1NTY7XG4gICAgdC5zaXggPSA1NTY7XG4gICAgdC5zZXZlbiA9IDU1NjtcbiAgICB0LmVpZ2h0ID0gNTU2O1xuICAgIHQubmluZSA9IDU1NjtcbiAgICB0LmNvbG9uID0gMjc4O1xuICAgIHQuc2VtaWNvbG9uID0gMjc4O1xuICAgIHQubGVzcyA9IDU4NDtcbiAgICB0LmVxdWFsID0gNTg0O1xuICAgIHQuZ3JlYXRlciA9IDU4NDtcbiAgICB0LnF1ZXN0aW9uID0gNTU2O1xuICAgIHQuYXQgPSAxMDE1O1xuICAgIHQuQSA9IDY2NztcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDUwMDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNTU2O1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDI3ODtcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDI3ODtcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDIyMjtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNTU2O1xuICAgIHQuYyA9IDUwMDtcbiAgICB0LmQgPSA1NTY7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDI3ODtcbiAgICB0LmcgPSA1NTY7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDIyMjtcbiAgICB0LmogPSAyMjI7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDIyMjtcbiAgICB0Lm0gPSA4MzM7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDU1NjtcbiAgICB0LnAgPSA1NTY7XG4gICAgdC5xID0gNTU2O1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSA1MDA7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzM0O1xuICAgIHQuYmFyID0gMjYwO1xuICAgIHQuYnJhY2VyaWdodCA9IDMzNDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE5MTtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDUwMDtcbiAgICB0LmZsID0gNTAwO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1Mzc7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDIyMjtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJscmlnaHQgPSAzMzM7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDU1NjtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyMjI7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDUwMDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDUwMDtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjIyO1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDUwMDtcbiAgICB0LnNjZWRpbGxhID0gNTAwO1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ3MTtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzMzO1xuICAgIHQuY2NlZGlsbGEgPSA1MDA7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNjQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0NzY7XG4gICAgdC55ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTAwO1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI2MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzMzO1xuICAgIHQub21hY3JvbiA9IDU1NjtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjIyO1xuICAgIHQudGNhcm9uID0gMzE3O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjIyO1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNTU2O1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDUwMDtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDU1NjtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA1NTY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDU1NjtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDI5OTtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDU1NjtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDU1NjtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNTU2O1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1NTY7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTU2O1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDU1NjtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuZXRoID0gNTU2O1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHQuU3ltYm9sID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQudW5pdmVyc2FsID0gNzEzO1xuICAgIHQubnVtYmVyc2lnbiA9IDUwMDtcbiAgICB0LmV4aXN0ZW50aWFsID0gNTQ5O1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnN1Y2h0aGF0ID0gNDM5O1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrbWF0aCA9IDUwMDtcbiAgICB0LnBsdXMgPSA1NDk7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lm1pbnVzID0gNTQ5O1xuICAgIHQucGVyaW9kID0gMjUwO1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTAwO1xuICAgIHQub25lID0gNTAwO1xuICAgIHQudHdvID0gNTAwO1xuICAgIHQudGhyZWUgPSA1MDA7XG4gICAgdC5mb3VyID0gNTAwO1xuICAgIHQuZml2ZSA9IDUwMDtcbiAgICB0LnNpeCA9IDUwMDtcbiAgICB0LnNldmVuID0gNTAwO1xuICAgIHQuZWlnaHQgPSA1MDA7XG4gICAgdC5uaW5lID0gNTAwO1xuICAgIHQuY29sb24gPSAyNzg7XG4gICAgdC5zZW1pY29sb24gPSAyNzg7XG4gICAgdC5sZXNzID0gNTQ5O1xuICAgIHQuZXF1YWwgPSA1NDk7XG4gICAgdC5ncmVhdGVyID0gNTQ5O1xuICAgIHQucXVlc3Rpb24gPSA0NDQ7XG4gICAgdC5jb25ncnVlbnQgPSA1NDk7XG4gICAgdC5BbHBoYSA9IDcyMjtcbiAgICB0LkJldGEgPSA2Njc7XG4gICAgdC5DaGkgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LkVwc2lsb24gPSA2MTE7XG4gICAgdC5QaGkgPSA3NjM7XG4gICAgdC5HYW1tYSA9IDYwMztcbiAgICB0LkV0YSA9IDcyMjtcbiAgICB0LklvdGEgPSAzMzM7XG4gICAgdC50aGV0YTEgPSA2MzE7XG4gICAgdC5LYXBwYSA9IDcyMjtcbiAgICB0LkxhbWJkYSA9IDY4NjtcbiAgICB0Lk11ID0gODg5O1xuICAgIHQuTnUgPSA3MjI7XG4gICAgdC5PbWljcm9uID0gNzIyO1xuICAgIHQuUGkgPSA3Njg7XG4gICAgdC5UaGV0YSA9IDc0MTtcbiAgICB0LlJobyA9IDU1NjtcbiAgICB0LlNpZ21hID0gNTkyO1xuICAgIHQuVGF1ID0gNjExO1xuICAgIHQuVXBzaWxvbiA9IDY5MDtcbiAgICB0LnNpZ21hMSA9IDQzOTtcbiAgICB0Lk9tZWdhID0gNzY4O1xuICAgIHQuWGkgPSA2NDU7XG4gICAgdC5Qc2kgPSA3OTU7XG4gICAgdC5aZXRhID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC50aGVyZWZvcmUgPSA4NjM7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5wZXJwZW5kaWN1bGFyID0gNjU4O1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnJhZGljYWxleCA9IDUwMDtcbiAgICB0LmFscGhhID0gNjMxO1xuICAgIHQuYmV0YSA9IDU0OTtcbiAgICB0LmNoaSA9IDU0OTtcbiAgICB0LmRlbHRhID0gNDk0O1xuICAgIHQuZXBzaWxvbiA9IDQzOTtcbiAgICB0LnBoaSA9IDUyMTtcbiAgICB0LmdhbW1hID0gNDExO1xuICAgIHQuZXRhID0gNjAzO1xuICAgIHQuaW90YSA9IDMyOTtcbiAgICB0LnBoaTEgPSA2MDM7XG4gICAgdC5rYXBwYSA9IDU0OTtcbiAgICB0LmxhbWJkYSA9IDU0OTtcbiAgICB0Lm11ID0gNTc2O1xuICAgIHQubnUgPSA1MjE7XG4gICAgdC5vbWljcm9uID0gNTQ5O1xuICAgIHQucGkgPSA1NDk7XG4gICAgdC50aGV0YSA9IDUyMTtcbiAgICB0LnJobyA9IDU0OTtcbiAgICB0LnNpZ21hID0gNjAzO1xuICAgIHQudGF1ID0gNDM5O1xuICAgIHQudXBzaWxvbiA9IDU3NjtcbiAgICB0Lm9tZWdhMSA9IDcxMztcbiAgICB0Lm9tZWdhID0gNjg2O1xuICAgIHQueGkgPSA0OTM7XG4gICAgdC5wc2kgPSA2ODY7XG4gICAgdC56ZXRhID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0ID0gNDgwO1xuICAgIHQuYmFyID0gMjAwO1xuICAgIHQuYnJhY2VyaWdodCA9IDQ4MDtcbiAgICB0LnNpbWlsYXIgPSA1NDk7XG4gICAgdC5FdXJvID0gNzUwO1xuICAgIHQuVXBzaWxvbjEgPSA2MjA7XG4gICAgdC5taW51dGUgPSAyNDc7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LmluZmluaXR5ID0gNzEzO1xuICAgIHQuZmxvcmluID0gNTAwO1xuICAgIHQuY2x1YiA9IDc1MztcbiAgICB0LmRpYW1vbmQgPSA3NTM7XG4gICAgdC5oZWFydCA9IDc1MztcbiAgICB0LnNwYWRlID0gNzUzO1xuICAgIHQuYXJyb3dib3RoID0gMTA0MjtcbiAgICB0LmFycm93bGVmdCA9IDk4NztcbiAgICB0LmFycm93dXAgPSA2MDM7XG4gICAgdC5hcnJvd3JpZ2h0ID0gOTg3O1xuICAgIHQuYXJyb3dkb3duID0gNjAzO1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQucGx1c21pbnVzID0gNTQ5O1xuICAgIHQuc2Vjb25kID0gNDExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQubXVsdGlwbHkgPSA1NDk7XG4gICAgdC5wcm9wb3J0aW9uYWwgPSA3MTM7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDtcbiAgICB0LmJ1bGxldCA9IDQ2MDtcbiAgICB0LmRpdmlkZSA9IDU0OTtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZXF1aXZhbGVuY2UgPSA1NDk7XG4gICAgdC5hcHByb3hlcXVhbCA9IDU0OTtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LmFycm93dmVydGV4ID0gNjAzO1xuICAgIHQuYXJyb3dob3JpemV4ID0gMTAwMDtcbiAgICB0LmNhcnJpYWdlcmV0dXJuID0gNjU4O1xuICAgIHQuYWxlcGggPSA4MjM7XG4gICAgdC5JZnJha3R1ciA9IDY4NjtcbiAgICB0LlJmcmFrdHVyID0gNzk1O1xuICAgIHQud2VpZXJzdHJhc3MgPSA5ODc7XG4gICAgdC5jaXJjbGVtdWx0aXBseSA9IDc2ODtcbiAgICB0LmNpcmNsZXBsdXMgPSA3Njg7XG4gICAgdC5lbXB0eXNldCA9IDgyMztcbiAgICB0LmludGVyc2VjdGlvbiA9IDc2ODtcbiAgICB0LnVuaW9uID0gNzY4O1xuICAgIHQucHJvcGVyc3VwZXJzZXQgPSA3MTM7XG4gICAgdC5yZWZsZXhzdXBlcnNldCA9IDcxMztcbiAgICB0Lm5vdHN1YnNldCA9IDcxMztcbiAgICB0LnByb3BlcnN1YnNldCA9IDcxMztcbiAgICB0LnJlZmxleHN1YnNldCA9IDcxMztcbiAgICB0LmVsZW1lbnQgPSA3MTM7XG4gICAgdC5ub3RlbGVtZW50ID0gNzEzO1xuICAgIHQuYW5nbGUgPSA3Njg7XG4gICAgdC5ncmFkaWVudCA9IDcxMztcbiAgICB0LnJlZ2lzdGVyc2VyaWYgPSA3OTA7XG4gICAgdC5jb3B5cmlnaHRzZXJpZiA9IDc5MDtcbiAgICB0LnRyYWRlbWFya3NlcmlmID0gODkwO1xuICAgIHQucHJvZHVjdCA9IDgyMztcbiAgICB0LnJhZGljYWwgPSA1NDk7XG4gICAgdC5kb3RtYXRoID0gMjUwO1xuICAgIHQubG9naWNhbG5vdCA9IDcxMztcbiAgICB0LmxvZ2ljYWxhbmQgPSA2MDM7XG4gICAgdC5sb2dpY2Fsb3IgPSA2MDM7XG4gICAgdC5hcnJvd2RibGJvdGggPSAxMDQyO1xuICAgIHQuYXJyb3dkYmxsZWZ0ID0gOTg3O1xuICAgIHQuYXJyb3dkYmx1cCA9IDYwMztcbiAgICB0LmFycm93ZGJscmlnaHQgPSA5ODc7XG4gICAgdC5hcnJvd2RibGRvd24gPSA2MDM7XG4gICAgdC5sb3plbmdlID0gNDk0O1xuICAgIHQuYW5nbGVsZWZ0ID0gMzI5O1xuICAgIHQucmVnaXN0ZXJzYW5zID0gNzkwO1xuICAgIHQuY29weXJpZ2h0c2FucyA9IDc5MDtcbiAgICB0LnRyYWRlbWFya3NhbnMgPSA3ODY7XG4gICAgdC5zdW1tYXRpb24gPSA3MTM7XG4gICAgdC5wYXJlbmxlZnR0cCA9IDM4NDtcbiAgICB0LnBhcmVubGVmdGV4ID0gMzg0O1xuICAgIHQucGFyZW5sZWZ0YnQgPSAzODQ7XG4gICAgdC5icmFja2V0bGVmdHRwID0gMzg0O1xuICAgIHQuYnJhY2tldGxlZnRleCA9IDM4NDtcbiAgICB0LmJyYWNrZXRsZWZ0YnQgPSAzODQ7XG4gICAgdC5icmFjZWxlZnR0cCA9IDQ5NDtcbiAgICB0LmJyYWNlbGVmdG1pZCA9IDQ5NDtcbiAgICB0LmJyYWNlbGVmdGJ0ID0gNDk0O1xuICAgIHQuYnJhY2VleCA9IDQ5NDtcbiAgICB0LmFuZ2xlcmlnaHQgPSAzMjk7XG4gICAgdC5pbnRlZ3JhbCA9IDI3NDtcbiAgICB0LmludGVncmFsdHAgPSA2ODY7XG4gICAgdC5pbnRlZ3JhbGV4ID0gNjg2O1xuICAgIHQuaW50ZWdyYWxidCA9IDY4NjtcbiAgICB0LnBhcmVucmlnaHR0cCA9IDM4NDtcbiAgICB0LnBhcmVucmlnaHRleCA9IDM4NDtcbiAgICB0LnBhcmVucmlnaHRidCA9IDM4NDtcbiAgICB0LmJyYWNrZXRyaWdodHRwID0gMzg0O1xuICAgIHQuYnJhY2tldHJpZ2h0ZXggPSAzODQ7XG4gICAgdC5icmFja2V0cmlnaHRidCA9IDM4NDtcbiAgICB0LmJyYWNlcmlnaHR0cCA9IDQ5NDtcbiAgICB0LmJyYWNlcmlnaHRtaWQgPSA0OTQ7XG4gICAgdC5icmFjZXJpZ2h0YnQgPSA0OTQ7XG4gICAgdC5hcHBsZSA9IDc5MDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1Sb21hblwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI1MDtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNDA4O1xuICAgIHQubnVtYmVyc2lnbiA9IDUwMDtcbiAgICB0LmRvbGxhciA9IDUwMDtcbiAgICB0LnBlcmNlbnQgPSA4MzM7XG4gICAgdC5hbXBlcnNhbmQgPSA3Nzg7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMzMzO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gNTAwO1xuICAgIHQucGx1cyA9IDU2NDtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjUwO1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTAwO1xuICAgIHQub25lID0gNTAwO1xuICAgIHQudHdvID0gNTAwO1xuICAgIHQudGhyZWUgPSA1MDA7XG4gICAgdC5mb3VyID0gNTAwO1xuICAgIHQuZml2ZSA9IDUwMDtcbiAgICB0LnNpeCA9IDUwMDtcbiAgICB0LnNldmVuID0gNTAwO1xuICAgIHQuZWlnaHQgPSA1MDA7XG4gICAgdC5uaW5lID0gNTAwO1xuICAgIHQuY29sb24gPSAyNzg7XG4gICAgdC5zZW1pY29sb24gPSAyNzg7XG4gICAgdC5sZXNzID0gNTY0O1xuICAgIHQuZXF1YWwgPSA1NjQ7XG4gICAgdC5ncmVhdGVyID0gNTY0O1xuICAgIHQucXVlc3Rpb24gPSA0NDQ7XG4gICAgdC5hdCA9IDkyMTtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNjY3O1xuICAgIHQuQyA9IDY2NztcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjExO1xuICAgIHQuRiA9IDU1NjtcbiAgICB0LkcgPSA3MjI7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDMzMztcbiAgICB0LkogPSAzODk7XG4gICAgdC5LID0gNzIyO1xuICAgIHQuTCA9IDYxMTtcbiAgICB0Lk0gPSA4ODk7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDcyMjtcbiAgICB0LlAgPSA1NTY7XG4gICAgdC5RID0gNzIyO1xuICAgIHQuUiA9IDY2NztcbiAgICB0LlMgPSA1NTY7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA3MjI7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDcyMjtcbiAgICB0LlkgPSA3MjI7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDQ2OTtcbiAgICB0LnVuZGVyc2NvcmUgPSA1MDA7XG4gICAgdC5xdW90ZWxlZnQgPSAzMzM7XG4gICAgdC5hID0gNDQ0O1xuICAgIHQuYiA9IDUwMDtcbiAgICB0LmMgPSA0NDQ7XG4gICAgdC5kID0gNTAwO1xuICAgIHQuZSA9IDQ0NDtcbiAgICB0LmYgPSAzMzM7XG4gICAgdC5nID0gNTAwO1xuICAgIHQuaCA9IDUwMDtcbiAgICB0LmkgPSAyNzg7XG4gICAgdC5qID0gMjc4O1xuICAgIHQuayA9IDUwMDtcbiAgICB0LmwgPSAyNzg7XG4gICAgdC5tID0gNzc4O1xuICAgIHQubiA9IDUwMDtcbiAgICB0Lm8gPSA1MDA7XG4gICAgdC5wID0gNTAwO1xuICAgIHQucSA9IDUwMDtcbiAgICB0LnIgPSAzMzM7XG4gICAgdC5zID0gMzg5O1xuICAgIHQudCA9IDI3ODtcbiAgICB0LnUgPSA1MDA7XG4gICAgdC52ID0gNTAwO1xuICAgIHQudyA9IDcyMjtcbiAgICB0LnggPSA1MDA7XG4gICAgdC55ID0gNTAwO1xuICAgIHQueiA9IDQ0NDtcbiAgICB0LmJyYWNlbGVmdCA9IDQ4MDtcbiAgICB0LmJhciA9IDIwMDtcbiAgICB0LmJyYWNlcmlnaHQgPSA0ODA7XG4gICAgdC5hc2NpaXRpbGRlID0gNTQxO1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1MDA7XG4gICAgdC5zdGVybGluZyA9IDUwMDtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTAwO1xuICAgIHQuZmxvcmluID0gNTAwO1xuICAgIHQuc2VjdGlvbiA9IDUwMDtcbiAgICB0LmN1cnJlbmN5ID0gNTAwO1xuICAgIHQucXVvdGVzaW5nbGUgPSAxODA7XG4gICAgdC5xdW90ZWRibGxlZnQgPSA0NDQ7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA1NTY7XG4gICAgdC5mbCA9IDU1NjtcbiAgICB0LmVuZGFzaCA9IDUwMDtcbiAgICB0LmRhZ2dlciA9IDUwMDtcbiAgICB0LmRhZ2dlcmRibCA9IDUwMDtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjUwO1xuICAgIHQucGFyYWdyYXBoID0gNDUzO1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAzMzM7XG4gICAgdC5xdW90ZWRibGJhc2UgPSA0NDQ7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gNDQ0O1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1MDA7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA0NDQ7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSA4ODk7XG4gICAgdC5vcmRmZW1pbmluZSA9IDI3NjtcbiAgICB0LkxzbGFzaCA9IDYxMTtcbiAgICB0Lk9zbGFzaCA9IDcyMjtcbiAgICB0Lk9FID0gODg5O1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzEwO1xuICAgIHQuYWUgPSA2Njc7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDUwMDtcbiAgICB0Lm9lID0gNzIyO1xuICAgIHQuZ2VybWFuZGJscyA9IDUwMDtcbiAgICB0LklkaWVyZXNpcyA9IDMzMztcbiAgICB0LmVhY3V0ZSA9IDQ0NDtcbiAgICB0LmFicmV2ZSA9IDQ0NDtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5lY2Fyb24gPSA0NDQ7XG4gICAgdC5ZZGllcmVzaXMgPSA3MjI7XG4gICAgdC5kaXZpZGUgPSA1NjQ7XG4gICAgdC5ZYWN1dGUgPSA3MjI7XG4gICAgdC5BY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LmFhY3V0ZSA9IDQ0NDtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA0NDQ7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTAwO1xuICAgIHQuRWRpZXJlc2lzID0gNjExO1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3NjA7XG4gICAgdC5FbWFjcm9uID0gNjExO1xuICAgIHQuY2Nhcm9uID0gNDQ0O1xuICAgIHQuYXJpbmcgPSA0NDQ7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA0NDQ7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5DYWN1dGUgPSA2Njc7XG4gICAgdC5hdGlsZGUgPSA0NDQ7XG4gICAgdC5FZG90YWNjZW50ID0gNjExO1xuICAgIHQuc2Nhcm9uID0gMzg5O1xuICAgIHQuc2NlZGlsbGEgPSAzODk7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDcxO1xuICAgIHQuUmNhcm9uID0gNjY3O1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQudWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5hY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LkFtYWNyb24gPSA3MjI7XG4gICAgdC5yY2Fyb24gPSAzMzM7XG4gICAgdC5jY2VkaWxsYSA9IDQ0NDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5UaG9ybiA9IDU1NjtcbiAgICB0Lk9tYWNyb24gPSA3MjI7XG4gICAgdC5SYWN1dGUgPSA2Njc7XG4gICAgdC5TYWN1dGUgPSA1NTY7XG4gICAgdC5kY2Fyb24gPSA1ODg7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1MDA7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuT2dyYXZlID0gNzIyO1xuICAgIHQuQWdyYXZlID0gNzIyO1xuICAgIHQuQWJyZXZlID0gNzIyO1xuICAgIHQubXVsdGlwbHkgPSA1NjQ7XG4gICAgdC51YWN1dGUgPSA1MDA7XG4gICAgdC5UY2Fyb24gPSA2MTE7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ3NjtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5hZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5lZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5jYWN1dGUgPSA0NDQ7XG4gICAgdC5uYWN1dGUgPSA1MDA7XG4gICAgdC51bWFjcm9uID0gNTAwO1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMzMzO1xuICAgIHQucGx1c21pbnVzID0gNTY0O1xuICAgIHQuYnJva2VuYmFyID0gMjAwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDc2MDtcbiAgICB0LkdicmV2ZSA9IDcyMjtcbiAgICB0Lklkb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2MTE7XG4gICAgdC5yYWN1dGUgPSAzMzM7XG4gICAgdC5vbWFjcm9uID0gNTAwO1xuICAgIHQuWmFjdXRlID0gNjExO1xuICAgIHQuWmNhcm9uID0gNjExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSAzMjY7XG4gICAgdC5lb2dvbmVrID0gNDQ0O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDcyMjtcbiAgICB0LkFkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmVncmF2ZSA9IDQ0NDtcbiAgICB0LnphY3V0ZSA9IDQ0NDtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3MjI7XG4gICAgdC5vYWN1dGUgPSA1MDA7XG4gICAgdC5hbWFjcm9uID0gNDQ0O1xuICAgIHQuc2FjdXRlID0gMzg5O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTAwO1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZGllcmVzaXMgPSA3MjI7XG4gICAgdC5tdSA9IDUwMDtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5Fb2dvbmVrID0gNjExO1xuICAgIHQuZGNyb2F0ID0gNTAwO1xuICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDtcbiAgICB0LlNjZWRpbGxhID0gNTU2O1xuICAgIHQubGNhcm9uID0gMzQ0O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGFjdXRlID0gNjExO1xuICAgIHQudHJhZGVtYXJrID0gOTgwO1xuICAgIHQuZWRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LklncmF2ZSA9IDMzMztcbiAgICB0LkltYWNyb24gPSAzMzM7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gNzUwO1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5udGlsZGUgPSA1MDA7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjExO1xuICAgIHQuZW1hY3JvbiA9IDQ0NDtcbiAgICB0LmdicmV2ZSA9IDUwMDtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA3NTA7XG4gICAgdC5TY2Fyb24gPSA1NTY7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNTAwO1xuICAgIHQuQ2Nhcm9uID0gNjY3O1xuICAgIHQudWdyYXZlID0gNTAwO1xuICAgIHQucmFkaWNhbCA9IDQ1MztcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDMzMztcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDUwMDtcbiAgICB0LlJjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDcyMjtcbiAgICB0LkFvZ29uZWsgPSA3MjI7XG4gICAgdC5BcmluZyA9IDcyMjtcbiAgICB0Lk90aWxkZSA9IDcyMjtcbiAgICB0Lnpkb3RhY2NlbnQgPSA0NDQ7XG4gICAgdC5FY2Fyb24gPSA2MTE7XG4gICAgdC5Jb2dvbmVrID0gMzMzO1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQubWludXMgPSA1NjQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDMzMztcbiAgICB0Lm5jYXJvbiA9IDUwMDtcbiAgICB0LnRjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LmxvZ2ljYWxub3QgPSA1NjQ7XG4gICAgdC5vZGllcmVzaXMgPSA1MDA7XG4gICAgdC51ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmV0aCA9IDUwMDtcbiAgICB0LnpjYXJvbiA9IDQ0NDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1MDA7XG4gIH0pO1xuICB0W1wiVGltZXMtQm9sZFwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI1MDtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNTU1O1xuICAgIHQubnVtYmVyc2lnbiA9IDUwMDtcbiAgICB0LmRvbGxhciA9IDUwMDtcbiAgICB0LnBlcmNlbnQgPSAxMDAwO1xuICAgIHQuYW1wZXJzYW5kID0gODMzO1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA1NzA7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDU3MDtcbiAgICB0LmVxdWFsID0gNTcwO1xuICAgIHQuZ3JlYXRlciA9IDU3MDtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA5MzA7XG4gICAgdC5BID0gNzIyO1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA3MjI7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzc4O1xuICAgIHQuSCA9IDc3ODtcbiAgICB0LkkgPSAzODk7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDc3ODtcbiAgICB0LkwgPSA2Njc7XG4gICAgdC5NID0gOTQ0O1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3Nzg7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDc3ODtcbiAgICB0LlIgPSA3MjI7XG4gICAgdC5TID0gNTU2O1xuICAgIHQuVCA9IDY2NztcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNzIyO1xuICAgIHQuVyA9IDEwMDA7XG4gICAgdC5YID0gNzIyO1xuICAgIHQuWSA9IDcyMjtcbiAgICB0LlogPSA2Njc7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNTgxO1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA1MDA7XG4gICAgdC5iID0gNTU2O1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1NTY7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAzMzM7XG4gICAgdC5rID0gNTU2O1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA4MzM7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1NTY7XG4gICAgdC5xID0gNTU2O1xuICAgIHQuciA9IDQ0NDtcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMzMzO1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNDQ0O1xuICAgIHQuYnJhY2VsZWZ0ID0gMzk0O1xuICAgIHQuYmFyID0gMjIwO1xuICAgIHQuYnJhY2VyaWdodCA9IDM5NDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1MjA7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDU1NjtcbiAgICB0LmZsID0gNTU2O1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA1NDA7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDUwMDtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDMwMDtcbiAgICB0LkxzbGFzaCA9IDY2NztcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDMzMDtcbiAgICB0LmFlID0gNzIyO1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA1MDA7XG4gICAgdC5vZSA9IDcyMjtcbiAgICB0Lmdlcm1hbmRibHMgPSA1NTY7XG4gICAgdC5JZGllcmVzaXMgPSAzODk7XG4gICAgdC5lYWN1dGUgPSA0NDQ7XG4gICAgdC5hYnJldmUgPSA1MDA7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNDQ0O1xuICAgIHQuWWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZGl2aWRlID0gNTcwO1xuICAgIHQuWWFjdXRlID0gNzIyO1xuICAgIHQuQWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5hYWN1dGUgPSA1MDA7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDUwMDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTAwO1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzQ3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDQ0NDtcbiAgICB0LmFyaW5nID0gNTAwO1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTAwO1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTAwO1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDM4OTtcbiAgICB0LnNjZWRpbGxhID0gMzg5O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5BbWFjcm9uID0gNzIyO1xuICAgIHQucmNhcm9uID0gNDQ0O1xuICAgIHQuY2NlZGlsbGEgPSA0NDQ7XG4gICAgdC5aZG90YWNjZW50ID0gNjY3O1xuICAgIHQuVGhvcm4gPSA2MTE7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNTU2O1xuICAgIHQuZGNhcm9uID0gNjcyO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDcyMjtcbiAgICB0LkFicmV2ZSA9IDcyMjtcbiAgICB0Lm11bHRpcGx5ID0gNTcwO1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjY3O1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTAwO1xuICAgIHQuZWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuY2FjdXRlID0gNDQ0O1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDM4OTtcbiAgICB0LnBsdXNtaW51cyA9IDU3MDtcbiAgICB0LmJyb2tlbmJhciA9IDIyMDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3NDc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMzg5O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gNDQ0O1xuICAgIHQub21hY3JvbiA9IDUwMDtcbiAgICB0LlphY3V0ZSA9IDY2NztcbiAgICB0LlpjYXJvbiA9IDY2NztcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gNDE2O1xuICAgIHQuZW9nb25layA9IDQ0NDtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA3MjI7XG4gICAgdC5BZGllcmVzaXMgPSA3MjI7XG4gICAgdC5lZ3JhdmUgPSA0NDQ7XG4gICAgdC56YWN1dGUgPSA0NDQ7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNTAwO1xuICAgIHQuYW1hY3JvbiA9IDUwMDtcbiAgICB0LnNhY3V0ZSA9IDM4OTtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDU1NjtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzAwO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA1NTY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDU1NjtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7XG4gICAgdC5TY2VkaWxsYSA9IDU1NjtcbiAgICB0LmxjYXJvbiA9IDM5NDtcbiAgICB0Lktjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LkxhY3V0ZSA9IDY2NztcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzg5O1xuICAgIHQuSW1hY3JvbiA9IDM4OTtcbiAgICB0LkxjYXJvbiA9IDY2NztcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gNDQ0O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAzODk7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5taW51cyA9IDU3MDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzg5O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQubG9naWNhbG5vdCA9IDU3MDtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gNDQ0O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1Cb2xkSXRhbGljXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzg5O1xuICAgIHQucXVvdGVkYmwgPSA1NTU7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSA1MDA7XG4gICAgdC5wbHVzID0gNTcwO1xuICAgIHQuY29tbWEgPSAyNTA7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDMzMztcbiAgICB0LnNlbWljb2xvbiA9IDMzMztcbiAgICB0Lmxlc3MgPSA1NzA7XG4gICAgdC5lcXVhbCA9IDU3MDtcbiAgICB0LmdyZWF0ZXIgPSA1NzA7XG4gICAgdC5xdWVzdGlvbiA9IDUwMDtcbiAgICB0LmF0ID0gODMyO1xuICAgIHQuQSA9IDY2NztcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNjY3O1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjY3O1xuICAgIHQuRyA9IDcyMjtcbiAgICB0LkggPSA3Nzg7XG4gICAgdC5JID0gMzg5O1xuICAgIHQuSiA9IDUwMDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDg4OTtcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzIyO1xuICAgIHQuUCA9IDYxMTtcbiAgICB0LlEgPSA3MjI7XG4gICAgdC5SID0gNjY3O1xuICAgIHQuUyA9IDU1NjtcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA4ODk7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDYxMTtcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNTcwO1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA1MDA7XG4gICAgdC5iID0gNTAwO1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1MDA7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA3Nzg7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1MDA7XG4gICAgdC5xID0gNTAwO1xuICAgIHQuciA9IDM4OTtcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA0NDQ7XG4gICAgdC53ID0gNjY3O1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA0NDQ7XG4gICAgdC56ID0gMzg5O1xuICAgIHQuYnJhY2VsZWZ0ID0gMzQ4O1xuICAgIHQuYmFyID0gMjIwO1xuICAgIHQuYnJhY2VyaWdodCA9IDM0ODtcbiAgICB0LmFzY2lpdGlsZGUgPSA1NzA7XG4gICAgdC5leGNsYW1kb3duID0gMzg5O1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDU1NjtcbiAgICB0LmZsID0gNTU2O1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA1MDA7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDUwMDtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDk0NDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjY2O1xuICAgIHQuTHNsYXNoID0gNjExO1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA5NDQ7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMDA7XG4gICAgdC5hZSA9IDcyMjtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA3MjI7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzg5O1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNTAwO1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDU1NjtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDYxMTtcbiAgICB0LmRpdmlkZSA9IDU3MDtcbiAgICB0LllhY3V0ZSA9IDYxMTtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWFjdXRlID0gNTAwO1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA0NDQ7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDUwMDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1NTY7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc0NztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDUwMDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDUwMDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDUwMDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5SY2Fyb24gPSA2Njc7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQuQW1hY3JvbiA9IDY2NztcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjExO1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDY2NztcbiAgICB0LlNhY3V0ZSA9IDU1NjtcbiAgICB0LmRjYXJvbiA9IDYwODtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDU1NjtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA2Njc7XG4gICAgdC5BYnJldmUgPSA2Njc7XG4gICAgdC5tdWx0aXBseSA9IDU3MDtcbiAgICB0LnVhY3V0ZSA9IDU1NjtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQueWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDUwMDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDU1NjtcbiAgICB0LnVtYWNyb24gPSA1NTY7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAzODk7XG4gICAgdC5wbHVzbWludXMgPSA1NzA7XG4gICAgdC5icm9rZW5iYXIgPSAyMjA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzQ3O1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDM4OTtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDM2NjtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNjY3O1xuICAgIHQuQWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gMzg5O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA1MDA7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTc2O1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1NTY7XG4gICAgdC5sY2Fyb24gPSAzODI7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LklncmF2ZSA9IDM4OTtcbiAgICB0LkltYWNyb24gPSAzODk7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gNzUwO1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5udGlsZGUgPSA1NTY7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDQ0NDtcbiAgICB0LmdicmV2ZSA9IDUwMDtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA3NTA7XG4gICAgdC5TY2Fyb24gPSA1NTY7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNTAwO1xuICAgIHQuQ2Nhcm9uID0gNjY3O1xuICAgIHQudWdyYXZlID0gNTU2O1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDUwMDtcbiAgICB0LlJjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDY2NztcbiAgICB0LkFvZ29uZWsgPSA2Njc7XG4gICAgdC5BcmluZyA9IDY2NztcbiAgICB0Lk90aWxkZSA9IDcyMjtcbiAgICB0Lnpkb3RhY2NlbnQgPSAzODk7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMzg5O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQubWludXMgPSA2MDY7XG4gICAgdC5JY2lyY3VtZmxleCA9IDM4OTtcbiAgICB0Lm5jYXJvbiA9IDU1NjtcbiAgICB0LnRjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LmxvZ2ljYWxub3QgPSA2MDY7XG4gICAgdC5vZGllcmVzaXMgPSA1MDA7XG4gICAgdC51ZGllcmVzaXMgPSA1NTY7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmV0aCA9IDUwMDtcbiAgICB0LnpjYXJvbiA9IDM4OTtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1MDA7XG4gIH0pO1xuICB0W1wiVGltZXMtSXRhbGljXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0MjA7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSA1MDA7XG4gICAgdC5wbHVzID0gNjc1O1xuICAgIHQuY29tbWEgPSAyNTA7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDMzMztcbiAgICB0LnNlbWljb2xvbiA9IDMzMztcbiAgICB0Lmxlc3MgPSA2NzU7XG4gICAgdC5lcXVhbCA9IDY3NTtcbiAgICB0LmdyZWF0ZXIgPSA2NzU7XG4gICAgdC5xdWVzdGlvbiA9IDUwMDtcbiAgICB0LmF0ID0gOTIwO1xuICAgIHQuQSA9IDYxMTtcbiAgICB0LkIgPSA2MTE7XG4gICAgdC5DID0gNjY3O1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2MTE7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDcyMjtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMzMzO1xuICAgIHQuSiA9IDQ0NDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNTU2O1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA2Njc7XG4gICAgdC5PID0gNzIyO1xuICAgIHQuUCA9IDYxMTtcbiAgICB0LlEgPSA3MjI7XG4gICAgdC5SID0gNjExO1xuICAgIHQuUyA9IDUwMDtcbiAgICB0LlQgPSA1NTY7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDYxMTtcbiAgICB0LlcgPSA4MzM7XG4gICAgdC5YID0gNjExO1xuICAgIHQuWSA9IDU1NjtcbiAgICB0LlogPSA1NTY7XG4gICAgdC5icmFja2V0bGVmdCA9IDM4OTtcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDM4OTtcbiAgICB0LmFzY2lpY2lyY3VtID0gNDIyO1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA1MDA7XG4gICAgdC5iID0gNTAwO1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1MDA7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDI3ODtcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTAwO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNDQ0O1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA3MjI7XG4gICAgdC5uID0gNTAwO1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1MDA7XG4gICAgdC5xID0gNTAwO1xuICAgIHQuciA9IDM4OTtcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDUwMDtcbiAgICB0LnYgPSA0NDQ7XG4gICAgdC53ID0gNjY3O1xuICAgIHQueCA9IDQ0NDtcbiAgICB0LnkgPSA0NDQ7XG4gICAgdC56ID0gMzg5O1xuICAgIHQuYnJhY2VsZWZ0ID0gNDAwO1xuICAgIHQuYmFyID0gMjc1O1xuICAgIHQuYnJhY2VyaWdodCA9IDQwMDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1NDE7XG4gICAgdC5leGNsYW1kb3duID0gMzg5O1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDIxNDtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDU1NjtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDUwMDtcbiAgICB0LmZsID0gNTAwO1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA1MjM7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDU1NjtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1NTY7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gODg5O1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gODg5O1xuICAgIHQuQUUgPSA4ODk7XG4gICAgdC5vcmRmZW1pbmluZSA9IDI3NjtcbiAgICB0LkxzbGFzaCA9IDU1NjtcbiAgICB0Lk9zbGFzaCA9IDcyMjtcbiAgICB0Lk9FID0gOTQ0O1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzEwO1xuICAgIHQuYWUgPSA2Njc7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDUwMDtcbiAgICB0Lm9lID0gNjY3O1xuICAgIHQuZ2VybWFuZGJscyA9IDUwMDtcbiAgICB0LklkaWVyZXNpcyA9IDMzMztcbiAgICB0LmVhY3V0ZSA9IDQ0NDtcbiAgICB0LmFicmV2ZSA9IDUwMDtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5lY2Fyb24gPSA0NDQ7XG4gICAgdC5ZZGllcmVzaXMgPSA1NTY7XG4gICAgdC5kaXZpZGUgPSA2NzU7XG4gICAgdC5ZYWN1dGUgPSA1NTY7XG4gICAgdC5BY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFhY3V0ZSA9IDUwMDtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNDQ0O1xuICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1MDA7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTAwO1xuICAgIHQuRWRpZXJlc2lzID0gNjExO1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3NjA7XG4gICAgdC5FbWFjcm9uID0gNjExO1xuICAgIHQuY2Nhcm9uID0gNDQ0O1xuICAgIHQuYXJpbmcgPSA1MDA7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA1MDA7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5DYWN1dGUgPSA2Njc7XG4gICAgdC5hdGlsZGUgPSA1MDA7XG4gICAgdC5FZG90YWNjZW50ID0gNjExO1xuICAgIHQuc2Nhcm9uID0gMzg5O1xuICAgIHQuc2NlZGlsbGEgPSAzODk7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDcxO1xuICAgIHQuUmNhcm9uID0gNjExO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQudWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5hY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LkFtYWNyb24gPSA2MTE7XG4gICAgdC5yY2Fyb24gPSAzODk7XG4gICAgdC5jY2VkaWxsYSA9IDQ0NDtcbiAgICB0Llpkb3RhY2NlbnQgPSA1NTY7XG4gICAgdC5UaG9ybiA9IDYxMTtcbiAgICB0Lk9tYWNyb24gPSA3MjI7XG4gICAgdC5SYWN1dGUgPSA2MTE7XG4gICAgdC5TYWN1dGUgPSA1MDA7XG4gICAgdC5kY2Fyb24gPSA1NDQ7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1MDA7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuT2dyYXZlID0gNzIyO1xuICAgIHQuQWdyYXZlID0gNjExO1xuICAgIHQuQWJyZXZlID0gNjExO1xuICAgIHQubXVsdGlwbHkgPSA2NzU7XG4gICAgdC51YWN1dGUgPSA1MDA7XG4gICAgdC5UY2Fyb24gPSA1NTY7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ3NjtcbiAgICB0LnlkaWVyZXNpcyA9IDQ0NDtcbiAgICB0Lk5hY3V0ZSA9IDY2NztcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5hZGllcmVzaXMgPSA1MDA7XG4gICAgdC5lZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5jYWN1dGUgPSA0NDQ7XG4gICAgdC5uYWN1dGUgPSA1MDA7XG4gICAgdC51bWFjcm9uID0gNTAwO1xuICAgIHQuTmNhcm9uID0gNjY3O1xuICAgIHQuSWFjdXRlID0gMzMzO1xuICAgIHQucGx1c21pbnVzID0gNjc1O1xuICAgIHQuYnJva2VuYmFyID0gMjc1O1xuICAgIHQucmVnaXN0ZXJlZCA9IDc2MDtcbiAgICB0LkdicmV2ZSA9IDcyMjtcbiAgICB0Lklkb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2MTE7XG4gICAgdC5yYWN1dGUgPSAzODk7XG4gICAgdC5vbWFjcm9uID0gNTAwO1xuICAgIHQuWmFjdXRlID0gNTU2O1xuICAgIHQuWmNhcm9uID0gNTU2O1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSAzMDA7XG4gICAgdC5lb2dvbmVrID0gNDQ0O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDYxMTtcbiAgICB0LkFkaWVyZXNpcyA9IDYxMTtcbiAgICB0LmVncmF2ZSA9IDQ0NDtcbiAgICB0LnphY3V0ZSA9IDM4OTtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3MjI7XG4gICAgdC5vYWN1dGUgPSA1MDA7XG4gICAgdC5hbWFjcm9uID0gNTAwO1xuICAgIHQuc2FjdXRlID0gMzg5O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTAwO1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZGllcmVzaXMgPSA3MjI7XG4gICAgdC5tdSA9IDUwMDtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5Fb2dvbmVrID0gNjExO1xuICAgIHQuZGNyb2F0ID0gNTAwO1xuICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDtcbiAgICB0LlNjZWRpbGxhID0gNTAwO1xuICAgIHQubGNhcm9uID0gMzAwO1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGFjdXRlID0gNTU2O1xuICAgIHQudHJhZGVtYXJrID0gOTgwO1xuICAgIHQuZWRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LklncmF2ZSA9IDMzMztcbiAgICB0LkltYWNyb24gPSAzMzM7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gNzUwO1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5udGlsZGUgPSA1MDA7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjExO1xuICAgIHQuZW1hY3JvbiA9IDQ0NDtcbiAgICB0LmdicmV2ZSA9IDUwMDtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA3NTA7XG4gICAgdC5TY2Fyb24gPSA1MDA7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNTAwO1xuICAgIHQuQ2Nhcm9uID0gNjY3O1xuICAgIHQudWdyYXZlID0gNTAwO1xuICAgIHQucmFkaWNhbCA9IDQ1MztcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDY2NztcbiAgICB0Lm90aWxkZSA9IDUwMDtcbiAgICB0LlJjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LkF0aWxkZSA9IDYxMTtcbiAgICB0LkFvZ29uZWsgPSA2MTE7XG4gICAgdC5BcmluZyA9IDYxMTtcbiAgICB0Lk90aWxkZSA9IDcyMjtcbiAgICB0Lnpkb3RhY2NlbnQgPSAzODk7XG4gICAgdC5FY2Fyb24gPSA2MTE7XG4gICAgdC5Jb2dvbmVrID0gMzMzO1xuICAgIHQua2NvbW1hYWNjZW50ID0gNDQ0O1xuICAgIHQubWludXMgPSA2NzU7XG4gICAgdC5JY2lyY3VtZmxleCA9IDMzMztcbiAgICB0Lm5jYXJvbiA9IDUwMDtcbiAgICB0LnRjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LmxvZ2ljYWxub3QgPSA2NzU7XG4gICAgdC5vZGllcmVzaXMgPSA1MDA7XG4gICAgdC51ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmV0aCA9IDUwMDtcbiAgICB0LnpjYXJvbiA9IDM4OTtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1MDA7XG4gIH0pO1xuICB0LlphcGZEaW5nYmF0cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmExID0gOTc0O1xuICAgIHQuYTIgPSA5NjE7XG4gICAgdC5hMjAyID0gOTc0O1xuICAgIHQuYTMgPSA5ODA7XG4gICAgdC5hNCA9IDcxOTtcbiAgICB0LmE1ID0gNzg5O1xuICAgIHQuYTExOSA9IDc5MDtcbiAgICB0LmExMTggPSA3OTE7XG4gICAgdC5hMTE3ID0gNjkwO1xuICAgIHQuYTExID0gOTYwO1xuICAgIHQuYTEyID0gOTM5O1xuICAgIHQuYTEzID0gNTQ5O1xuICAgIHQuYTE0ID0gODU1O1xuICAgIHQuYTE1ID0gOTExO1xuICAgIHQuYTE2ID0gOTMzO1xuICAgIHQuYTEwNSA9IDkxMTtcbiAgICB0LmExNyA9IDk0NTtcbiAgICB0LmExOCA9IDk3NDtcbiAgICB0LmExOSA9IDc1NTtcbiAgICB0LmEyMCA9IDg0NjtcbiAgICB0LmEyMSA9IDc2MjtcbiAgICB0LmEyMiA9IDc2MTtcbiAgICB0LmEyMyA9IDU3MTtcbiAgICB0LmEyNCA9IDY3NztcbiAgICB0LmEyNSA9IDc2MztcbiAgICB0LmEyNiA9IDc2MDtcbiAgICB0LmEyNyA9IDc1OTtcbiAgICB0LmEyOCA9IDc1NDtcbiAgICB0LmE2ID0gNDk0O1xuICAgIHQuYTcgPSA1NTI7XG4gICAgdC5hOCA9IDUzNztcbiAgICB0LmE5ID0gNTc3O1xuICAgIHQuYTEwID0gNjkyO1xuICAgIHQuYTI5ID0gNzg2O1xuICAgIHQuYTMwID0gNzg4O1xuICAgIHQuYTMxID0gNzg4O1xuICAgIHQuYTMyID0gNzkwO1xuICAgIHQuYTMzID0gNzkzO1xuICAgIHQuYTM0ID0gNzk0O1xuICAgIHQuYTM1ID0gODE2O1xuICAgIHQuYTM2ID0gODIzO1xuICAgIHQuYTM3ID0gNzg5O1xuICAgIHQuYTM4ID0gODQxO1xuICAgIHQuYTM5ID0gODIzO1xuICAgIHQuYTQwID0gODMzO1xuICAgIHQuYTQxID0gODE2O1xuICAgIHQuYTQyID0gODMxO1xuICAgIHQuYTQzID0gOTIzO1xuICAgIHQuYTQ0ID0gNzQ0O1xuICAgIHQuYTQ1ID0gNzIzO1xuICAgIHQuYTQ2ID0gNzQ5O1xuICAgIHQuYTQ3ID0gNzkwO1xuICAgIHQuYTQ4ID0gNzkyO1xuICAgIHQuYTQ5ID0gNjk1O1xuICAgIHQuYTUwID0gNzc2O1xuICAgIHQuYTUxID0gNzY4O1xuICAgIHQuYTUyID0gNzkyO1xuICAgIHQuYTUzID0gNzU5O1xuICAgIHQuYTU0ID0gNzA3O1xuICAgIHQuYTU1ID0gNzA4O1xuICAgIHQuYTU2ID0gNjgyO1xuICAgIHQuYTU3ID0gNzAxO1xuICAgIHQuYTU4ID0gODI2O1xuICAgIHQuYTU5ID0gODE1O1xuICAgIHQuYTYwID0gNzg5O1xuICAgIHQuYTYxID0gNzg5O1xuICAgIHQuYTYyID0gNzA3O1xuICAgIHQuYTYzID0gNjg3O1xuICAgIHQuYTY0ID0gNjk2O1xuICAgIHQuYTY1ID0gNjg5O1xuICAgIHQuYTY2ID0gNzg2O1xuICAgIHQuYTY3ID0gNzg3O1xuICAgIHQuYTY4ID0gNzEzO1xuICAgIHQuYTY5ID0gNzkxO1xuICAgIHQuYTcwID0gNzg1O1xuICAgIHQuYTcxID0gNzkxO1xuICAgIHQuYTcyID0gODczO1xuICAgIHQuYTczID0gNzYxO1xuICAgIHQuYTc0ID0gNzYyO1xuICAgIHQuYTIwMyA9IDc2MjtcbiAgICB0LmE3NSA9IDc1OTtcbiAgICB0LmEyMDQgPSA3NTk7XG4gICAgdC5hNzYgPSA4OTI7XG4gICAgdC5hNzcgPSA4OTI7XG4gICAgdC5hNzggPSA3ODg7XG4gICAgdC5hNzkgPSA3ODQ7XG4gICAgdC5hODEgPSA0Mzg7XG4gICAgdC5hODIgPSAxMzg7XG4gICAgdC5hODMgPSAyNzc7XG4gICAgdC5hODQgPSA0MTU7XG4gICAgdC5hOTcgPSAzOTI7XG4gICAgdC5hOTggPSAzOTI7XG4gICAgdC5hOTkgPSA2Njg7XG4gICAgdC5hMTAwID0gNjY4O1xuICAgIHQuYTg5ID0gMzkwO1xuICAgIHQuYTkwID0gMzkwO1xuICAgIHQuYTkzID0gMzE3O1xuICAgIHQuYTk0ID0gMzE3O1xuICAgIHQuYTkxID0gMjc2O1xuICAgIHQuYTkyID0gMjc2O1xuICAgIHQuYTIwNSA9IDUwOTtcbiAgICB0LmE4NSA9IDUwOTtcbiAgICB0LmEyMDYgPSA0MTA7XG4gICAgdC5hODYgPSA0MTA7XG4gICAgdC5hODcgPSAyMzQ7XG4gICAgdC5hODggPSAyMzQ7XG4gICAgdC5hOTUgPSAzMzQ7XG4gICAgdC5hOTYgPSAzMzQ7XG4gICAgdC5hMTAxID0gNzMyO1xuICAgIHQuYTEwMiA9IDU0NDtcbiAgICB0LmExMDMgPSA1NDQ7XG4gICAgdC5hMTA0ID0gOTEwO1xuICAgIHQuYTEwNiA9IDY2NztcbiAgICB0LmExMDcgPSA3NjA7XG4gICAgdC5hMTA4ID0gNzYwO1xuICAgIHQuYTExMiA9IDc3NjtcbiAgICB0LmExMTEgPSA1OTU7XG4gICAgdC5hMTEwID0gNjk0O1xuICAgIHQuYTEwOSA9IDYyNjtcbiAgICB0LmExMjAgPSA3ODg7XG4gICAgdC5hMTIxID0gNzg4O1xuICAgIHQuYTEyMiA9IDc4ODtcbiAgICB0LmExMjMgPSA3ODg7XG4gICAgdC5hMTI0ID0gNzg4O1xuICAgIHQuYTEyNSA9IDc4ODtcbiAgICB0LmExMjYgPSA3ODg7XG4gICAgdC5hMTI3ID0gNzg4O1xuICAgIHQuYTEyOCA9IDc4ODtcbiAgICB0LmExMjkgPSA3ODg7XG4gICAgdC5hMTMwID0gNzg4O1xuICAgIHQuYTEzMSA9IDc4ODtcbiAgICB0LmExMzIgPSA3ODg7XG4gICAgdC5hMTMzID0gNzg4O1xuICAgIHQuYTEzNCA9IDc4ODtcbiAgICB0LmExMzUgPSA3ODg7XG4gICAgdC5hMTM2ID0gNzg4O1xuICAgIHQuYTEzNyA9IDc4ODtcbiAgICB0LmExMzggPSA3ODg7XG4gICAgdC5hMTM5ID0gNzg4O1xuICAgIHQuYTE0MCA9IDc4ODtcbiAgICB0LmExNDEgPSA3ODg7XG4gICAgdC5hMTQyID0gNzg4O1xuICAgIHQuYTE0MyA9IDc4ODtcbiAgICB0LmExNDQgPSA3ODg7XG4gICAgdC5hMTQ1ID0gNzg4O1xuICAgIHQuYTE0NiA9IDc4ODtcbiAgICB0LmExNDcgPSA3ODg7XG4gICAgdC5hMTQ4ID0gNzg4O1xuICAgIHQuYTE0OSA9IDc4ODtcbiAgICB0LmExNTAgPSA3ODg7XG4gICAgdC5hMTUxID0gNzg4O1xuICAgIHQuYTE1MiA9IDc4ODtcbiAgICB0LmExNTMgPSA3ODg7XG4gICAgdC5hMTU0ID0gNzg4O1xuICAgIHQuYTE1NSA9IDc4ODtcbiAgICB0LmExNTYgPSA3ODg7XG4gICAgdC5hMTU3ID0gNzg4O1xuICAgIHQuYTE1OCA9IDc4ODtcbiAgICB0LmExNTkgPSA3ODg7XG4gICAgdC5hMTYwID0gODk0O1xuICAgIHQuYTE2MSA9IDgzODtcbiAgICB0LmExNjMgPSAxMDE2O1xuICAgIHQuYTE2NCA9IDQ1ODtcbiAgICB0LmExOTYgPSA3NDg7XG4gICAgdC5hMTY1ID0gOTI0O1xuICAgIHQuYTE5MiA9IDc0ODtcbiAgICB0LmExNjYgPSA5MTg7XG4gICAgdC5hMTY3ID0gOTI3O1xuICAgIHQuYTE2OCA9IDkyODtcbiAgICB0LmExNjkgPSA5Mjg7XG4gICAgdC5hMTcwID0gODM0O1xuICAgIHQuYTE3MSA9IDg3MztcbiAgICB0LmExNzIgPSA4Mjg7XG4gICAgdC5hMTczID0gOTI0O1xuICAgIHQuYTE2MiA9IDkyNDtcbiAgICB0LmExNzQgPSA5MTc7XG4gICAgdC5hMTc1ID0gOTMwO1xuICAgIHQuYTE3NiA9IDkzMTtcbiAgICB0LmExNzcgPSA0NjM7XG4gICAgdC5hMTc4ID0gODgzO1xuICAgIHQuYTE3OSA9IDgzNjtcbiAgICB0LmExOTMgPSA4MzY7XG4gICAgdC5hMTgwID0gODY3O1xuICAgIHQuYTE5OSA9IDg2NztcbiAgICB0LmExODEgPSA2OTY7XG4gICAgdC5hMjAwID0gNjk2O1xuICAgIHQuYTE4MiA9IDg3NDtcbiAgICB0LmEyMDEgPSA4NzQ7XG4gICAgdC5hMTgzID0gNzYwO1xuICAgIHQuYTE4NCA9IDk0NjtcbiAgICB0LmExOTcgPSA3NzE7XG4gICAgdC5hMTg1ID0gODY1O1xuICAgIHQuYTE5NCA9IDc3MTtcbiAgICB0LmExOTggPSA4ODg7XG4gICAgdC5hMTg2ID0gOTY3O1xuICAgIHQuYTE5NSA9IDg4ODtcbiAgICB0LmExODcgPSA4MzE7XG4gICAgdC5hMTg4ID0gODczO1xuICAgIHQuYTE4OSA9IDkyNztcbiAgICB0LmExOTAgPSA5NzA7XG4gICAgdC5hMTkxID0gOTE4O1xuICB9KTtcbn0pO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gZ2V0TWV0cmljcztcblxuLyoqKi8gfSksXG4vKiA0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5NdXJtdXJIYXNoM182NCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgU0VFRCA9IDB4YzNkMmUxZjA7XG5jb25zdCBNQVNLX0hJR0ggPSAweGZmZmYwMDAwO1xuY29uc3QgTUFTS19MT1cgPSAweGZmZmY7XG5cbmNsYXNzIE11cm11ckhhc2gzXzY0IHtcbiAgY29uc3RydWN0b3Ioc2VlZCkge1xuICAgIHRoaXMuaDEgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEO1xuICAgIHRoaXMuaDIgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEO1xuICB9XG5cbiAgdXBkYXRlKGlucHV0KSB7XG4gICAgbGV0IGRhdGEsIGxlbmd0aDtcblxuICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGlucHV0KSkge1xuICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCAqIDIpO1xuICAgICAgbGVuZ3RoID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5wdXQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBjb2RlID0gaW5wdXQuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoY29kZSA8PSAweGZmKSB7XG4gICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZSA+Pj4gODtcbiAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGUgJiAweGZmO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoaW5wdXQpKSB7XG4gICAgICBkYXRhID0gaW5wdXQ7XG4gICAgICBsZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGRhdGEgZm9ybWF0IGluIE11cm11ckhhc2gzXzY0X3VwZGF0ZS4gXCIgKyBcIklucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrQ291bnRzID0gbGVuZ3RoID4+IDI7XG4gICAgY29uc3QgdGFpbExlbmd0aCA9IGxlbmd0aCAtIGJsb2NrQ291bnRzICogNDtcbiAgICBjb25zdCBkYXRhVWludDMyID0gbmV3IFVpbnQzMkFycmF5KGRhdGEuYnVmZmVyLCAwLCBibG9ja0NvdW50cyk7XG4gICAgbGV0IGsxID0gMCxcbiAgICAgICAgazIgPSAwO1xuICAgIGxldCBoMSA9IHRoaXMuaDEsXG4gICAgICAgIGgyID0gdGhpcy5oMjtcbiAgICBjb25zdCBDMSA9IDB4Y2M5ZTJkNTEsXG4gICAgICAgICAgQzIgPSAweDFiODczNTkzO1xuICAgIGNvbnN0IEMxX0xPVyA9IEMxICYgTUFTS19MT1csXG4gICAgICAgICAgQzJfTE9XID0gQzIgJiBNQVNLX0xPVztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tDb3VudHM7IGkrKykge1xuICAgICAgaWYgKGkgJiAxKSB7XG4gICAgICAgIGsxID0gZGF0YVVpbnQzMltpXTtcbiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgazEgPSBrMSAqIEMyICYgTUFTS19ISUdIIHwgazEgKiBDMl9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIGgxID0gaDEgPDwgMTMgfCBoMSA+Pj4gMTk7XG4gICAgICAgIGgxID0gaDEgKiA1ICsgMHhlNjU0NmI2NDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsyID0gZGF0YVVpbnQzMltpXTtcbiAgICAgICAgazIgPSBrMiAqIEMxICYgTUFTS19ISUdIIHwgazIgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgazIgPSBrMiA8PCAxNSB8IGsyID4+PiAxNztcbiAgICAgICAgazIgPSBrMiAqIEMyICYgTUFTS19ISUdIIHwgazIgKiBDMl9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgaDIgXj0gazI7XG4gICAgICAgIGgyID0gaDIgPDwgMTMgfCBoMiA+Pj4gMTk7XG4gICAgICAgIGgyID0gaDIgKiA1ICsgMHhlNjU0NmI2NDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBrMSA9IDA7XG5cbiAgICBzd2l0Y2ggKHRhaWxMZW5ndGgpIHtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgazEgXj0gZGF0YVtibG9ja0NvdW50cyAqIDQgKyAyXSA8PCAxNjtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNCArIDFdIDw8IDg7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgazEgXj0gZGF0YVtibG9ja0NvdW50cyAqIDRdO1xuICAgICAgICBrMSA9IGsxICogQzEgJiBNQVNLX0hJR0ggfCBrMSAqIEMxX0xPVyAmIE1BU0tfTE9XO1xuICAgICAgICBrMSA9IGsxIDw8IDE1IHwgazEgPj4+IDE3O1xuICAgICAgICBrMSA9IGsxICogQzIgJiBNQVNLX0hJR0ggfCBrMSAqIEMyX0xPVyAmIE1BU0tfTE9XO1xuXG4gICAgICAgIGlmIChibG9ja0NvdW50cyAmIDEpIHtcbiAgICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoMiBePSBrMTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdGhpcy5oMSA9IGgxO1xuICAgIHRoaXMuaDIgPSBoMjtcbiAgfVxuXG4gIGhleGRpZ2VzdCgpIHtcbiAgICBsZXQgaDEgPSB0aGlzLmgxLFxuICAgICAgICBoMiA9IHRoaXMuaDI7XG4gICAgaDEgXj0gaDIgPj4+IDE7XG4gICAgaDEgPSBoMSAqIDB4ZWQ1NThjY2QgJiBNQVNLX0hJR0ggfCBoMSAqIDB4OGNjZCAmIE1BU0tfTE9XO1xuICAgIGgyID0gaDIgKiAweGZmNTFhZmQ3ICYgTUFTS19ISUdIIHwgKChoMiA8PCAxNiB8IGgxID4+PiAxNikgKiAweGFmZDdlZDU1ICYgTUFTS19ISUdIKSA+Pj4gMTY7XG4gICAgaDEgXj0gaDIgPj4+IDE7XG4gICAgaDEgPSBoMSAqIDB4MWE4NWVjNTMgJiBNQVNLX0hJR0ggfCBoMSAqIDB4ZWM1MyAmIE1BU0tfTE9XO1xuICAgIGgyID0gaDIgKiAweGM0Y2ViOWZlICYgTUFTS19ISUdIIHwgKChoMiA8PCAxNiB8IGgxID4+PiAxNikgKiAweGI5ZmUxYTg1ICYgTUFTS19ISUdIKSA+Pj4gMTY7XG4gICAgaDEgXj0gaDIgPj4+IDE7XG4gICAgY29uc3QgaGV4MSA9IChoMSA+Pj4gMCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIGhleDIgPSAoaDIgPj4+IDApLnRvU3RyaW5nKDE2KTtcbiAgICByZXR1cm4gaGV4MS5wYWRTdGFydCg4LCBcIjBcIikgKyBoZXgyLnBhZFN0YXJ0KDgsIFwiMFwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSBNdXJtdXJIYXNoM182NDtcblxuLyoqKi8gfSksXG4vKiA0NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QREZJbWFnZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfanBlZ19zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9qcHggPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxuZnVuY3Rpb24gZGVjb2RlQW5kQ2xhbXAodmFsdWUsIGFkZGVuZCwgY29lZmZpY2llbnQsIG1heCkge1xuICB2YWx1ZSA9IGFkZGVuZCArIHZhbHVlICogY29lZmZpY2llbnQ7XG5cbiAgaWYgKHZhbHVlIDwgMCkge1xuICAgIHZhbHVlID0gMDtcbiAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xuICAgIHZhbHVlID0gbWF4O1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXNpemVJbWFnZU1hc2soc3JjLCBicGMsIHcxLCBoMSwgdzIsIGgyKSB7XG4gIHZhciBsZW5ndGggPSB3MiAqIGgyO1xuICBsZXQgZGVzdDtcblxuICBpZiAoYnBjIDw9IDgpIHtcbiAgICBkZXN0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgfSBlbHNlIGlmIChicGMgPD0gMTYpIHtcbiAgICBkZXN0ID0gbmV3IFVpbnQxNkFycmF5KGxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgZGVzdCA9IG5ldyBVaW50MzJBcnJheShsZW5ndGgpO1xuICB9XG5cbiAgdmFyIHhSYXRpbyA9IHcxIC8gdzI7XG4gIHZhciB5UmF0aW8gPSBoMSAvIGgyO1xuICB2YXIgaSxcbiAgICAgIGosXG4gICAgICBweSxcbiAgICAgIG5ld0luZGV4ID0gMCxcbiAgICAgIG9sZEluZGV4O1xuICB2YXIgeFNjYWxlZCA9IG5ldyBVaW50MTZBcnJheSh3Mik7XG4gIHZhciB3MVNjYW5saW5lID0gdzE7XG5cbiAgZm9yIChpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICB4U2NhbGVkW2ldID0gTWF0aC5mbG9vcihpICogeFJhdGlvKTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG5jbGFzcyBQREZJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHNtYXNrID0gbnVsbCxcbiAgICBtYXNrID0gbnVsbCxcbiAgICBpc01hc2sgPSBmYWxzZSxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG4gICAgY29uc3QgZmlsdGVyID0gZGljdC5nZXQoXCJGaWx0ZXJcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICBjYXNlIFwiSlBYRGVjb2RlXCI6XG4gICAgICAgICAgdmFyIGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICAgICAgICBqcHhJbWFnZS5wYXJzZUltYWdlUHJvcGVydGllcyhpbWFnZS5zdHJlYW0pO1xuICAgICAgICAgIGltYWdlLnN0cmVhbS5yZXNldCgpO1xuICAgICAgICAgIGltYWdlLndpZHRoID0ganB4SW1hZ2Uud2lkdGg7XG4gICAgICAgICAgaW1hZ2UuaGVpZ2h0ID0ganB4SW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgIGltYWdlLmJpdHNQZXJDb21wb25lbnQgPSBqcHhJbWFnZS5iaXRzUGVyQ29tcG9uZW50O1xuICAgICAgICAgIGltYWdlLm51bUNvbXBzID0ganB4SW1hZ2UuY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJKQklHMkRlY29kZVwiOlxuICAgICAgICAgIGltYWdlLmJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICAgIGltYWdlLm51bUNvbXBzID0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgd2lkdGggPSBkaWN0LmdldChcIldpZHRoXCIsIFwiV1wiKTtcbiAgICBsZXQgaGVpZ2h0ID0gZGljdC5nZXQoXCJIZWlnaHRcIiwgXCJIXCIpO1xuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW1hZ2Uud2lkdGgpICYmIGltYWdlLndpZHRoID4gMCAmJiBOdW1iZXIuaXNJbnRlZ2VyKGltYWdlLmhlaWdodCkgJiYgaW1hZ2UuaGVpZ2h0ID4gMCAmJiAoaW1hZ2Uud2lkdGggIT09IHdpZHRoIHx8IGltYWdlLmhlaWdodCAhPT0gaGVpZ2h0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiUERGSW1hZ2UgLSB1c2luZyB0aGUgV2lkdGgvSGVpZ2h0IG9mIHRoZSBpbWFnZSBkYXRhLCBcIiArIFwicmF0aGVyIHRoYW4gdGhlIGltYWdlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgd2lkdGggPSBpbWFnZS53aWR0aDtcbiAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICB9XG5cbiAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHt3aWR0aH0gb3IgaGVpZ2h0OiAke2hlaWdodH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5pbnRlcnBvbGF0ZSA9IGRpY3QuZ2V0KFwiSW50ZXJwb2xhdGVcIiwgXCJJXCIpIHx8IGZhbHNlO1xuICAgIHRoaXMuaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJbWFnZU1hc2tcIiwgXCJJTVwiKSB8fCBmYWxzZTtcbiAgICB0aGlzLm1hdHRlID0gZGljdC5nZXQoXCJNYXR0ZVwiKSB8fCBmYWxzZTtcbiAgICB2YXIgYml0c1BlckNvbXBvbmVudCA9IGltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICBpZiAoIWJpdHNQZXJDb21wb25lbnQpIHtcbiAgICAgIGJpdHNQZXJDb21wb25lbnQgPSBkaWN0LmdldChcIkJpdHNQZXJDb21wb25lbnRcIiwgXCJCUENcIik7XG5cbiAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICBiaXRzUGVyQ29tcG9uZW50ID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAke3RoaXMuaW1hZ2VNYXNrfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5icGMgPSBiaXRzUGVyQ29tcG9uZW50O1xuXG4gICAgaWYgKCF0aGlzLmltYWdlTWFzaykge1xuICAgICAgbGV0IGNvbG9yU3BhY2UgPSBkaWN0LmdldFJhdyhcIkNvbG9yU3BhY2VcIikgfHwgZGljdC5nZXRSYXcoXCJDU1wiKTtcblxuICAgICAgaWYgKCFjb2xvclNwYWNlKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkpQWCBpbWFnZXMgKHdoaWNoIGRvIG5vdCByZXF1aXJlIGNvbG9yIHNwYWNlcylcIik7XG5cbiAgICAgICAgc3dpdGNoIChpbWFnZS5udW1Db21wcykge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkRldmljZUdyYXlcIik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkRldmljZVJHQlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlQ01ZS1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSlBYIGltYWdlcyB3aXRoICR7aW1hZ2UubnVtQ29tcHN9IGAgKyBcImNvbG9yIGNvbXBvbmVudHMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZSh7XG4gICAgICAgIGNzOiBjb2xvclNwYWNlLFxuICAgICAgICB4cmVmLFxuICAgICAgICByZXNvdXJjZXM6IGlzSW5saW5lID8gcmVzIDogbnVsbCxcbiAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgfSk7XG4gICAgICB0aGlzLm51bUNvbXBzID0gdGhpcy5jb2xvclNwYWNlLm51bUNvbXBzO1xuICAgIH1cblxuICAgIHRoaXMuZGVjb2RlID0gZGljdC5nZXRBcnJheShcIkRlY29kZVwiLCBcIkRcIik7XG4gICAgdGhpcy5uZWVkc0RlY29kZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGVjb2RlICYmICh0aGlzLmNvbG9yU3BhY2UgJiYgIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIGJpdHNQZXJDb21wb25lbnQpIHx8IGlzTWFzayAmJiAhX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIDEpKSkge1xuICAgICAgdGhpcy5uZWVkc0RlY29kZSA9IHRydWU7XG4gICAgICB2YXIgbWF4ID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgIHRoaXMuZGVjb2RlQWRkZW5kcyA9IFtdO1xuICAgICAgY29uc3QgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkluZGV4ZWRcIjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgdGhpcy5kZWNvZGUubGVuZ3RoOyBpICs9IDIsICsraikge1xuICAgICAgICB2YXIgZG1pbiA9IHRoaXMuZGVjb2RlW2ldO1xuICAgICAgICB2YXIgZG1heCA9IHRoaXMuZGVjb2RlW2kgKyAxXTtcbiAgICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHNbal0gPSBpc0luZGV4ZWQgPyAoZG1heCAtIGRtaW4pIC8gbWF4IDogZG1heCAtIGRtaW47XG4gICAgICAgIHRoaXMuZGVjb2RlQWRkZW5kc1tqXSA9IGlzSW5kZXhlZCA/IGRtaW4gOiBtYXggKiBkbWluO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzbWFzaykge1xuICAgICAgdGhpcy5zbWFzayA9IG5ldyBQREZJbWFnZSh7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIHJlcyxcbiAgICAgICAgaW1hZ2U6IHNtYXNrLFxuICAgICAgICBpc0lubGluZSxcbiAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSkge1xuICAgICAgICB2YXIgbWFza0RpY3QgPSBtYXNrLmRpY3QsXG4gICAgICAgICAgICBpbWFnZU1hc2sgPSBtYXNrRGljdC5nZXQoXCJJbWFnZU1hc2tcIiwgXCJJTVwiKTtcblxuICAgICAgICBpZiAoIWltYWdlTWFzaykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIklnbm9yaW5nIC9NYXNrIGluIGltYWdlIHdpdGhvdXQgL0ltYWdlTWFzay5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXNrID0gbmV3IFBERkltYWdlKHtcbiAgICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgICByZXMsXG4gICAgICAgICAgICBpbWFnZTogbWFzayxcbiAgICAgICAgICAgIGlzSW5saW5lLFxuICAgICAgICAgICAgaXNNYXNrOiB0cnVlLFxuICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgYnVpbGRJbWFnZSh7XG4gICAgeHJlZixcbiAgICByZXMsXG4gICAgaW1hZ2UsXG4gICAgaXNJbmxpbmUgPSBmYWxzZSxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGltYWdlRGF0YSA9IGltYWdlO1xuICAgIGxldCBzbWFza0RhdGEgPSBudWxsO1xuICAgIGxldCBtYXNrRGF0YSA9IG51bGw7XG4gICAgY29uc3Qgc21hc2sgPSBpbWFnZS5kaWN0LmdldChcIlNNYXNrXCIpO1xuICAgIGNvbnN0IG1hc2sgPSBpbWFnZS5kaWN0LmdldChcIk1hc2tcIik7XG5cbiAgICBpZiAoc21hc2spIHtcbiAgICAgIHNtYXNrRGF0YSA9IHNtYXNrO1xuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobWFzaykgfHwgQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICBtYXNrRGF0YSA9IG1hc2s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnN1cHBvcnRlZCBtYXNrIGZvcm1hdC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQREZJbWFnZSh7XG4gICAgICB4cmVmLFxuICAgICAgcmVzLFxuICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcbiAgICAgIGlzSW5saW5lLFxuICAgICAgc21hc2s6IHNtYXNrRGF0YSxcbiAgICAgIG1hc2s6IG1hc2tEYXRhLFxuICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVNYXNrKHtcbiAgICBpbWdBcnJheSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0sXG4gICAgaW52ZXJzZURlY29kZVxuICB9KSB7XG4gICAgdmFyIGNvbXB1dGVkTGVuZ3RoID0gKHdpZHRoICsgNyA+PiAzKSAqIGhlaWdodDtcbiAgICB2YXIgYWN0dWFsTGVuZ3RoID0gaW1nQXJyYXkuYnl0ZUxlbmd0aDtcbiAgICB2YXIgaGF2ZUZ1bGxEYXRhID0gY29tcHV0ZWRMZW5ndGggPT09IGFjdHVhbExlbmd0aDtcbiAgICB2YXIgZGF0YSwgaTtcblxuICAgIGlmIChpbWFnZUlzRnJvbURlY29kZVN0cmVhbSAmJiAoIWludmVyc2VEZWNvZGUgfHwgaGF2ZUZ1bGxEYXRhKSkge1xuICAgICAgZGF0YSA9IGltZ0FycmF5O1xuICAgIH0gZWxzZSBpZiAoIWludmVyc2VEZWNvZGUpIHtcbiAgICAgIGRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoYWN0dWFsTGVuZ3RoKTtcbiAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb21wdXRlZExlbmd0aCk7XG4gICAgICBkYXRhLnNldChpbWdBcnJheSk7XG5cbiAgICAgIGZvciAoaSA9IGFjdHVhbExlbmd0aDsgaSA8IGNvbXB1dGVkTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGF0YVtpXSA9IDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VEZWNvZGUpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhW2ldIF49IDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH07XG4gIH1cblxuICBnZXQgZHJhd1dpZHRoKCkge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLCB0aGlzLnNtYXNrICYmIHRoaXMuc21hc2sud2lkdGggfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay53aWR0aCB8fCAwKTtcbiAgfVxuXG4gIGdldCBkcmF3SGVpZ2h0KCkge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCwgdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLmhlaWdodCB8fCAwLCB0aGlzLm1hc2sgJiYgdGhpcy5tYXNrLmhlaWdodCB8fCAwKTtcbiAgfVxuXG4gIGRlY29kZUJ1ZmZlcihidWZmZXIpIHtcbiAgICB2YXIgYnBjID0gdGhpcy5icGM7XG4gICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICB2YXIgZGVjb2RlQWRkZW5kcyA9IHRoaXMuZGVjb2RlQWRkZW5kcztcbiAgICB2YXIgZGVjb2RlQ29lZmZpY2llbnRzID0gdGhpcy5kZWNvZGVDb2VmZmljaWVudHM7XG4gICAgdmFyIG1heCA9ICgxIDw8IGJwYykgLSAxO1xuICAgIHZhciBpLCBpaTtcblxuICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgIGZvciAoaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgYnVmZmVyW2ldID0gKyFidWZmZXJbaV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSB0aGlzLndpZHRoICogdGhpcy5oZWlnaHQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgYnVmZmVyW2luZGV4XSA9IGRlY29kZUFuZENsYW1wKGJ1ZmZlcltpbmRleF0sIGRlY29kZUFkZGVuZHNbal0sIGRlY29kZUNvZWZmaWNpZW50c1tqXSwgbWF4KTtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb21wb25lbnRzKGJ1ZmZlcikge1xuICAgIHZhciBicGMgPSB0aGlzLmJwYztcblxuICAgIGlmIChicGMgPT09IDgpIHtcbiAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICB2YXIgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiBudW1Db21wcztcbiAgICB2YXIgYnVmZmVyUG9zID0gMDtcbiAgICBsZXQgb3V0cHV0O1xuXG4gICAgaWYgKGJwYyA8PSA4KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDE2QXJyYXkobGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIHJvd0NvbXBzID0gd2lkdGggKiBudW1Db21wcztcbiAgICB2YXIgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBpaSxcbiAgICAgICAgYnVmO1xuXG4gICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgdmFyIG1hc2ssIGxvb3AxRW5kLCBsb29wMkVuZDtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xuICAgICAgICBsb29wMUVuZCA9IGkgKyAocm93Q29tcHMgJiB+Nyk7XG4gICAgICAgIGxvb3AyRW5kID0gaSArIHJvd0NvbXBzO1xuXG4gICAgICAgIHdoaWxlIChpIDwgbG9vcDFFbmQpIHtcbiAgICAgICAgICBidWYgPSBidWZmZXJbYnVmZmVyUG9zKytdO1xuICAgICAgICAgIG91dHB1dFtpXSA9IGJ1ZiA+PiA3ICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDFdID0gYnVmID4+IDYgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgMl0gPSBidWYgPj4gNSAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyAzXSA9IGJ1ZiA+PiA0ICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDRdID0gYnVmID4+IDMgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgNV0gPSBidWYgPj4gMiAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyA2XSA9IGJ1ZiA+PiAxICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDddID0gYnVmICYgMTtcbiAgICAgICAgICBpICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaSA8IGxvb3AyRW5kKSB7XG4gICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICBtYXNrID0gMTI4O1xuXG4gICAgICAgICAgd2hpbGUgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgICAgb3V0cHV0W2krK10gPSArISEoYnVmICYgbWFzayk7XG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYml0cyA9IDA7XG4gICAgICBidWYgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwLCBpaSA9IGxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgaWYgKGkgJSByb3dDb21wcyA9PT0gMCkge1xuICAgICAgICAgIGJ1ZiA9IDA7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoYml0cyA8IGJwYykge1xuICAgICAgICAgIGJ1ZiA9IGJ1ZiA8PCA4IHwgYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgIGxldCB2YWx1ZSA9IGJ1ZiA+PiByZW1haW5pbmdCaXRzO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1heDtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICBidWYgPSBidWYgJiAoMSA8PCByZW1haW5pbmdCaXRzKSAtIDE7XG4gICAgICAgIGJpdHMgPSByZW1haW5pbmdCaXRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBmaWxsT3BhY2l0eShyZ2JhQnVmLCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGltYWdlKSB7XG4gICAgdmFyIHNtYXNrID0gdGhpcy5zbWFzaztcbiAgICB2YXIgbWFzayA9IHRoaXMubWFzaztcbiAgICB2YXIgYWxwaGFCdWYsIHN3LCBzaCwgaSwgaWksIGo7XG5cbiAgICBpZiAoc21hc2spIHtcbiAgICAgIHN3ID0gc21hc2sud2lkdGg7XG4gICAgICBzaCA9IHNtYXNrLmhlaWdodDtcbiAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpO1xuICAgICAgc21hc2suZmlsbEdyYXlCdWZmZXIoYWxwaGFCdWYpO1xuXG4gICAgICBpZiAoc3cgIT09IHdpZHRoIHx8IHNoICE9PSBoZWlnaHQpIHtcbiAgICAgICAgYWxwaGFCdWYgPSByZXNpemVJbWFnZU1hc2soYWxwaGFCdWYsIHNtYXNrLmJwYywgc3csIHNoLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hc2spIHtcbiAgICAgIGlmIChtYXNrIGluc3RhbmNlb2YgUERGSW1hZ2UpIHtcbiAgICAgICAgc3cgPSBtYXNrLndpZHRoO1xuICAgICAgICBzaCA9IG1hc2suaGVpZ2h0O1xuICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzdyAqIHNoKTtcbiAgICAgICAgbWFzay5udW1Db21wcyA9IDE7XG4gICAgICAgIG1hc2suZmlsbEdyYXlCdWZmZXIoYWxwaGFCdWYpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gc3cgKiBzaDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICBhbHBoYUJ1ZltpXSA9IDI1NSAtIGFscGhhQnVmW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN3ICE9PSB3aWR0aCB8fCBzaCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgYWxwaGFCdWYgPSByZXNpemVJbWFnZU1hc2soYWxwaGFCdWYsIG1hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWFzaykpIHtcbiAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGlpID0gd2lkdGggKiBoZWlnaHQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgdmFyIG9wYWNpdHkgPSAwO1xuICAgICAgICAgIHZhciBpbWFnZU9mZnNldCA9IGkgKiBudW1Db21wcztcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1Db21wczsgKytqKSB7XG4gICAgICAgICAgICB2YXIgY29sb3IgPSBpbWFnZVtpbWFnZU9mZnNldCArIGpdO1xuICAgICAgICAgICAgdmFyIG1hc2tPZmZzZXQgPSBqICogMjtcblxuICAgICAgICAgICAgaWYgKGNvbG9yIDwgbWFza1ttYXNrT2Zmc2V0XSB8fCBjb2xvciA+IG1hc2tbbWFza09mZnNldCArIDFdKSB7XG4gICAgICAgICAgICAgIG9wYWNpdHkgPSAyNTU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFscGhhQnVmW2ldID0gb3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBtYXNrIGZvcm1hdC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFscGhhQnVmKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkge1xuICAgICAgICByZ2JhQnVmW2pdID0gYWxwaGFCdWZbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAzLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBpIDwgaWk7ICsraSwgaiArPSA0KSB7XG4gICAgICAgIHJnYmFCdWZbal0gPSAyNTU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5kb1ByZWJsZW5kKGJ1ZmZlciwgd2lkdGgsIGhlaWdodCkge1xuICAgIHZhciBtYXR0ZSA9IHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5tYXR0ZTtcblxuICAgIGlmICghbWF0dGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWF0dGVSZ2IgPSB0aGlzLmNvbG9yU3BhY2UuZ2V0UmdiKG1hdHRlLCAwKTtcbiAgICB2YXIgbWF0dGVSID0gbWF0dGVSZ2JbMF07XG4gICAgdmFyIG1hdHRlRyA9IG1hdHRlUmdiWzFdO1xuICAgIHZhciBtYXR0ZUIgPSBtYXR0ZVJnYlsyXTtcbiAgICB2YXIgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiA0O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgdmFyIGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgIGJ1ZmZlcltpXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAxXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAyXSA9IDI1NTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBrID0gMjU1IC8gYWxwaGE7XG4gICAgICBidWZmZXJbaV0gPSAoYnVmZmVyW2ldIC0gbWF0dGVSKSAqIGsgKyBtYXR0ZVI7XG4gICAgICBidWZmZXJbaSArIDFdID0gKGJ1ZmZlcltpICsgMV0gLSBtYXR0ZUcpICogayArIG1hdHRlRztcbiAgICAgIGJ1ZmZlcltpICsgMl0gPSAoYnVmZmVyW2kgKyAyXSAtIG1hdHRlQikgKiBrICsgbWF0dGVCO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUltYWdlRGF0YShmb3JjZVJHQkEgPSBmYWxzZSkge1xuICAgIHZhciBkcmF3V2lkdGggPSB0aGlzLmRyYXdXaWR0aDtcbiAgICB2YXIgZHJhd0hlaWdodCA9IHRoaXMuZHJhd0hlaWdodDtcbiAgICB2YXIgaW1nRGF0YSA9IHtcbiAgICAgIHdpZHRoOiBkcmF3V2lkdGgsXG4gICAgICBoZWlnaHQ6IGRyYXdIZWlnaHQsXG4gICAgICBraW5kOiAwLFxuICAgICAgZGF0YTogbnVsbFxuICAgIH07XG4gICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICB2YXIgb3JpZ2luYWxXaWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdmFyIG9yaWdpbmFsSGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuICAgIHZhciByb3dCeXRlcyA9IG9yaWdpbmFsV2lkdGggKiBudW1Db21wcyAqIGJwYyArIDcgPj4gMztcbiAgICB2YXIgaW1nQXJyYXk7XG5cbiAgICBpZiAoIWZvcmNlUkdCQSkge1xuICAgICAgdmFyIGtpbmQ7XG5cbiAgICAgIGlmICh0aGlzLmNvbG9yU3BhY2UubmFtZSA9PT0gXCJEZXZpY2VHcmF5XCIgJiYgYnBjID09PSAxKSB7XG4gICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkRldmljZVJHQlwiICYmIGJwYyA9PT0gOCAmJiAhdGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICBraW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgIH1cblxuICAgICAgaWYgKGtpbmQgJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzayAmJiBkcmF3V2lkdGggPT09IG9yaWdpbmFsV2lkdGggJiYgZHJhd0hlaWdodCA9PT0gb3JpZ2luYWxIZWlnaHQpIHtcbiAgICAgICAgaW1nRGF0YS5raW5kID0ga2luZDtcbiAgICAgICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfc3RyZWFtLkRlY29kZVN0cmVhbSkge1xuICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IGltZ0FycmF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdBcnJheSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShpbWdBcnJheS5sZW5ndGgpO1xuICAgICAgICAgIG5ld0FycmF5LnNldChpbWdBcnJheSk7XG4gICAgICAgICAgaW1nRGF0YS5kYXRhID0gbmV3QXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwgXCJQREZJbWFnZS5jcmVhdGVJbWFnZURhdGE6IFRoZSBpbWFnZSBtdXN0IGJlIGdyYXlzY2FsZS5cIik7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGltZ0RhdGEuZGF0YTtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ1ZmZlci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBidWZmZXJbaV0gXj0gMHhmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfanBlZ19zdHJlYW0uSnBlZ1N0cmVhbSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgIGxldCBpbWFnZUxlbmd0aCA9IG9yaWdpbmFsSGVpZ2h0ICogcm93Qnl0ZXM7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmNvbG9yU3BhY2UubmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJEZXZpY2VHcmF5XCI6XG4gICAgICAgICAgICBpbWFnZUxlbmd0aCAqPSAzO1xuXG4gICAgICAgICAgY2FzZSBcIkRldmljZVJHQlwiOlxuICAgICAgICAgIGNhc2UgXCJEZXZpY2VDTVlLXCI6XG4gICAgICAgICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgaW1nRGF0YS5kYXRhID0gdGhpcy5nZXRJbWFnZUJ5dGVzKGltYWdlTGVuZ3RoLCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIGltZ0RhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICB2YXIgYWN0dWFsSGVpZ2h0ID0gMCB8IGltZ0FycmF5Lmxlbmd0aCAvIHJvd0J5dGVzICogZHJhd0hlaWdodCAvIG9yaWdpbmFsSGVpZ2h0O1xuICAgIHZhciBjb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cyhpbWdBcnJheSk7XG4gICAgdmFyIGFscGhhMDEsIG1heWJlVW5kb1ByZWJsZW5kO1xuXG4gICAgaWYgKCFmb3JjZVJHQkEgJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzaykge1xuICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgIGltZ0RhdGEuZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkcmF3V2lkdGggKiBkcmF3SGVpZ2h0ICogMyk7XG4gICAgICBhbHBoYTAxID0gMDtcbiAgICAgIG1heWJlVW5kb1ByZWJsZW5kID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltZ0RhdGEua2luZCA9IF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQO1xuICAgICAgaW1nRGF0YS5kYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiA0KTtcbiAgICAgIGFscGhhMDEgPSAxO1xuICAgICAgbWF5YmVVbmRvUHJlYmxlbmQgPSB0cnVlO1xuICAgICAgdGhpcy5maWxsT3BhY2l0eShpbWdEYXRhLmRhdGEsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgYWN0dWFsSGVpZ2h0LCBjb21wcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihpbWdEYXRhLmRhdGEsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgYnBjLCBjb21wcywgYWxwaGEwMSk7XG5cbiAgICBpZiAobWF5YmVVbmRvUHJlYmxlbmQpIHtcbiAgICAgIHRoaXMudW5kb1ByZWJsZW5kKGltZ0RhdGEuZGF0YSwgZHJhd1dpZHRoLCBhY3R1YWxIZWlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBpbWdEYXRhO1xuICB9XG5cbiAgZmlsbEdyYXlCdWZmZXIoYnVmZmVyKSB7XG4gICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcblxuICAgIGlmIChudW1Db21wcyAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBSZWFkaW5nIGdyYXkgc2NhbGUgZnJvbSBhIGNvbG9yIGltYWdlOiAke251bUNvbXBzfWApO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIHZhciBicGMgPSB0aGlzLmJwYztcbiAgICB2YXIgcm93Qnl0ZXMgPSB3aWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgIHZhciBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhoZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgdmFyIGNvbXBzID0gdGhpcy5nZXRDb21wb25lbnRzKGltZ0FycmF5KTtcbiAgICB2YXIgaSwgbGVuZ3RoO1xuXG4gICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQ7XG5cbiAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltpXSA9IGNvbXBzW2ldIC0gMSAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2ldID0gLWNvbXBzW2ldICYgMjU1O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgdGhpcy5kZWNvZGVCdWZmZXIoY29tcHMpO1xuICAgIH1cblxuICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgIHZhciBzY2FsZSA9IDI1NSAvICgoMSA8PCBicGMpIC0gMSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IHNjYWxlICogY29tcHNbaV07XG4gICAgfVxuICB9XG5cbiAgZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgZm9yY2VSR0IgPSBmYWxzZSkge1xuICAgIHRoaXMuaW1hZ2UucmVzZXQoKTtcbiAgICB0aGlzLmltYWdlLmRyYXdXaWR0aCA9IGRyYXdXaWR0aCB8fCB0aGlzLndpZHRoO1xuICAgIHRoaXMuaW1hZ2UuZHJhd0hlaWdodCA9IGRyYXdIZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5pbWFnZS5mb3JjZVJHQiA9ICEhZm9yY2VSR0I7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2UuZ2V0Qnl0ZXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGSW1hZ2UgPSBQREZJbWFnZTtcblxuLyoqKi8gfSksXG4vKiA0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgQ2FsbGJhY2tLaW5kID0ge1xuICBVTktOT1dOOiAwLFxuICBEQVRBOiAxLFxuICBFUlJPUjogMlxufTtcbmNvbnN0IFN0cmVhbUtpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIENBTkNFTDogMSxcbiAgQ0FOQ0VMX0NPTVBMRVRFOiAyLFxuICBDTE9TRTogMyxcbiAgRU5RVUVVRTogNCxcbiAgRVJST1I6IDUsXG4gIFBVTEw6IDYsXG4gIFBVTExfQ09NUExFVEU6IDcsXG4gIFNUQVJUX0NPTVBMRVRFOiA4XG59O1xuXG5mdW5jdGlvbiB3cmFwUmVhc29uKHJlYXNvbikge1xuICBpZiAodHlwZW9mIHJlYXNvbiAhPT0gXCJvYmplY3RcIiB8fCByZWFzb24gPT09IG51bGwpIHtcbiAgICByZXR1cm4gcmVhc29uO1xuICB9XG5cbiAgc3dpdGNoIChyZWFzb24ubmFtZSkge1xuICAgIGNhc2UgXCJBYm9ydEV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSk7XG5cbiAgICBjYXNlIFwiTWlzc2luZ1BERkV4Y2VwdGlvblwiOlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25cIjpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uc3RhdHVzKTtcblxuICAgIGNhc2UgXCJVbmtub3duRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uZGV0YWlscyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi50b1N0cmluZygpKTtcbiAgfVxufVxuXG5jbGFzcyBNZXNzYWdlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZU5hbWUsIHRhcmdldE5hbWUsIGNvbU9iaikge1xuICAgIHRoaXMuc291cmNlTmFtZSA9IHNvdXJjZU5hbWU7XG4gICAgdGhpcy50YXJnZXROYW1lID0gdGFyZ2V0TmFtZTtcbiAgICB0aGlzLmNvbU9iaiA9IGNvbU9iajtcbiAgICB0aGlzLmNhbGxiYWNrSWQgPSAxO1xuICAgIHRoaXMuc3RyZWFtSWQgPSAxO1xuICAgIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB0cnVlO1xuICAgIHRoaXMuc3RyZWFtU2lua3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSA9IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xuXG4gICAgICBpZiAoZGF0YS50YXJnZXROYW1lICE9PSB0aGlzLnNvdXJjZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zdHJlYW0pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1N0cmVhbU1lc3NhZ2UoZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jYWxsYmFjaykge1xuICAgICAgICBjb25zdCBjYWxsYmFja0lkID0gZGF0YS5jYWxsYmFja0lkO1xuICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICBpZiAoIWNhcGFiaWxpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGNhbGxiYWNrICR7Y2FsbGJhY2tJZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdO1xuXG4gICAgICAgIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuREFUQSkge1xuICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZShkYXRhLmRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY2FsbGJhY2sgPT09IENhbGxiYWNrS2luZC5FUlJPUikge1xuICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2VcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG5cbiAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICR7ZGF0YS5hY3Rpb259YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNhbGxiYWNrSWQpIHtcbiAgICAgICAgY29uc3QgY2JTb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICBjb25zdCBjYlRhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWU7XG4gICAgICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZShhY3Rpb24oZGF0YS5kYXRhKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lOiBjYlNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lOiBjYlRhcmdldE5hbWUsXG4gICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2tLaW5kLkRBVEEsXG4gICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICBkYXRhOiByZXN1bHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lOiBjYlNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lOiBjYlRhcmdldE5hbWUsXG4gICAgICAgICAgICBjYWxsYmFjazogQ2FsbGJhY2tLaW5kLkVSUk9SLFxuICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc3RyZWFtSWQpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RyZWFtU2luayhkYXRhKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFjdGlvbihkYXRhLmRhdGEpO1xuICAgIH07XG5cbiAgICBjb21PYmouYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbiAgb24oYWN0aW9uTmFtZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGFoID0gdGhpcy5hY3Rpb25IYW5kbGVyO1xuXG4gICAgaWYgKGFoW2FjdGlvbk5hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgXCIke2FjdGlvbk5hbWV9XCJgKTtcbiAgICB9XG5cbiAgICBhaFthY3Rpb25OYW1lXSA9IGhhbmRsZXI7XG4gIH1cblxuICBzZW5kKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgIHRoaXMuX3Bvc3RNZXNzYWdlKHtcbiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgIHRhcmdldE5hbWU6IHRoaXMudGFyZ2V0TmFtZSxcbiAgICAgIGFjdGlvbjogYWN0aW9uTmFtZSxcbiAgICAgIGRhdGFcbiAgICB9LCB0cmFuc2ZlcnMpO1xuICB9XG5cbiAgc2VuZFdpdGhQcm9taXNlKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgIGNvbnN0IGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICBjb25zdCBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5O1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3Bvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZTogdGhpcy5zb3VyY2VOYW1lLFxuICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uTmFtZSxcbiAgICAgICAgY2FsbGJhY2tJZCxcbiAgICAgICAgZGF0YVxuICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBzZW5kV2l0aFN0cmVhbShhY3Rpb25OYW1lLCBkYXRhLCBxdWV1ZWluZ1N0cmF0ZWd5LCB0cmFuc2ZlcnMpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKztcbiAgICBjb25zdCBzb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0aGlzLnRhcmdldE5hbWU7XG4gICAgY29uc3QgY29tT2JqID0gdGhpcy5jb21PYmo7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBzdGFydDogY29udHJvbGxlciA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0gPSB7XG4gICAgICAgICAgY29udHJvbGxlcixcbiAgICAgICAgICBzdGFydENhbGw6IHN0YXJ0Q2FwYWJpbGl0eSxcbiAgICAgICAgICBwdWxsQ2FsbDogbnVsbCxcbiAgICAgICAgICBjYW5jZWxDYWxsOiBudWxsLFxuICAgICAgICAgIGlzQ2xvc2VkOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX3Bvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcblxuICAgICAgICByZXR1cm4gc3RhcnRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9LFxuICAgICAgcHVsbDogY29udHJvbGxlciA9PiB7XG4gICAgICAgIGNvbnN0IHB1bGxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbCA9IHB1bGxDYXBhYmlsaXR5O1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTCxcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICBkZXNpcmVkU2l6ZTogY29udHJvbGxlci5kZXNpcmVkU2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHB1bGxDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9LFxuICAgICAgY2FuY2VsOiByZWFzb24gPT4ge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uXCIpO1xuICAgICAgICBjb25zdCBjYW5jZWxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsID0gY2FuY2VsQ2FwYWJpbGl0eTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FuY2VsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfVxuICAgIH0sIHF1ZXVlaW5nU3RyYXRlZ3kpO1xuICB9XG5cbiAgX2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG4gICAgY29uc3Qgc3RyZWFtSWQgPSBkYXRhLnN0cmVhbUlkO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICBjb25zdCBjb21PYmogPSB0aGlzLmNvbU9iajtcbiAgICBjb25zdCBzdHJlYW1TaW5rID0ge1xuICAgICAgZW5xdWV1ZShjaHVuaywgc2l6ZSA9IDEsIHRyYW5zZmVycykge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3REZXNpcmVkU2l6ZSA9IHRoaXMuZGVzaXJlZFNpemU7XG4gICAgICAgIHRoaXMuZGVzaXJlZFNpemUgLT0gc2l6ZTtcblxuICAgICAgICBpZiAobGFzdERlc2lyZWRTaXplID4gMCAmJiB0aGlzLmRlc2lyZWRTaXplIDw9IDApIHtcbiAgICAgICAgICB0aGlzLnNpbmtDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLl9wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5FTlFVRVVFLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGNodW5rXG4gICAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgICB9LFxuXG4gICAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNMT1NFLFxuICAgICAgICAgIHN0cmVhbUlkXG4gICAgICAgIH0pO1xuICAgICAgICBkZWxldGUgc2VsZi5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihyZWFzb24pIHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsIFwiZXJyb3IgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5FUlJPUixcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbmtDYXBhYmlsaXR5OiAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksXG4gICAgICBvblB1bGw6IG51bGwsXG4gICAgICBvbkNhbmNlbDogbnVsbCxcbiAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgIGRlc2lyZWRTaXplOiBkYXRhLmRlc2lyZWRTaXplLFxuICAgICAgcmVhZHk6IG51bGxcbiAgICB9O1xuICAgIHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIHN0cmVhbVNpbmsucmVhZHkgPSBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0gPSBzdHJlYW1TaW5rO1xuICAgIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKGFjdGlvbihkYXRhLmRhdGEsIHN0cmVhbVNpbmspKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5TVEFSVF9DT01QTEVURSxcbiAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5TVEFSVF9DT01QTEVURSxcbiAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9wcm9jZXNzU3RyZWFtTWVzc2FnZShkYXRhKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSBkYXRhLnN0cmVhbUlkO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICBjb25zdCBjb21PYmogPSB0aGlzLmNvbU9iajtcblxuICAgIHN3aXRjaCAoZGF0YS5zdHJlYW0pIHtcbiAgICAgIGNhc2UgU3RyZWFtS2luZC5TVEFSVF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uc3RhcnRDYWxsLnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTDpcbiAgICAgICAgaWYgKCF0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF0uZGVzaXJlZFNpemUgPD0gMCAmJiBkYXRhLmRlc2lyZWRTaXplID4gMCkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdLmRlc2lyZWRTaXplID0gZGF0YS5kZXNpcmVkU2l6ZTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG9uUHVsbFxuICAgICAgICB9ID0gdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXTtcbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKG9uUHVsbCAmJiBvblB1bGwoKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRU5RVUVVRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0sIFwiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhLmNodW5rKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0sIFwiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkVSUk9SOlxuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSwgXCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsLnJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kZWxldGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbUlkKTtcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdHJlYW1LaW5kLkNBTkNFTDpcbiAgICAgICAgaWYgKCF0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIG9uQ2FuY2VsXG4gICAgICAgIH0gPSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUob25DYW5jZWwgJiYgb25DYW5jZWwod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdLnNpbmtDYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdHJlYW0gY2FzZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1JZCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uc3RhcnRDYWxsLCB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXS5wdWxsQ2FsbCwgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKGZ1bmN0aW9uIChjYXBhYmlsaXR5KSB7XG4gICAgICByZXR1cm4gY2FwYWJpbGl0eSAmJiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfSkpO1xuICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXTtcbiAgfVxuXG4gIF9wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcnMpIHtcbiAgICBpZiAodHJhbnNmZXJzICYmIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMpIHtcbiAgICAgIHRoaXMuY29tT2JqLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29tT2JqLnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4vKioqLyB9KSxcbi8qIDQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBERldvcmtlclN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgUERGV29ya2VyU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobXNnSGFuZGxlcikge1xuICAgIHRoaXMuX21zZ0hhbmRsZXIgPSBtc2dIYW5kbGVyO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXRGdWxsUmVhZGVyKCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgXCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGV29ya2VyU3RyZWFtUmVhZGVyKHRoaXMuX21zZ0hhbmRsZXIpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCwgdGhpcy5fbXNnSGFuZGxlcik7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlcnMgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApO1xuXG4gICAgcmVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChyZWFkZXIpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGV29ya2VyU3RyZWFtID0gUERGV29ya2VyU3RyZWFtO1xuXG5jbGFzcyBQREZXb3JrZXJTdHJlYW1SZWFkZXIge1xuICBjb25zdHJ1Y3Rvcihtc2dIYW5kbGVyKSB7XG4gICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gbnVsbDtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldFJlYWRlclwiKTtcblxuICAgIHRoaXMuX3JlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgIHRoaXMuX2hlYWRlcnNSZWFkeSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiUmVhZGVySGVhZGVyc1JlYWR5XCIpLnRoZW4oZGF0YSA9PiB7XG4gICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGRhdGEuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZGF0YS5pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IGRhdGEuY29udGVudExlbmd0aDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeTtcbiAgfVxuXG4gIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRvbmVcbiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUuYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3IoYmVnaW4sIGVuZCwgbXNnSGFuZGxlcikge1xuICAgIHRoaXMuX21zZ0hhbmRsZXIgPSBtc2dIYW5kbGVyO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG5cbiAgICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oXCJHZXRSYW5nZVJlYWRlclwiLCB7XG4gICAgICBiZWdpbixcbiAgICAgIGVuZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRvbmVcbiAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgIGlmIChkb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUuYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGRmLndvcmtlci5qcy5tYXAiLCIvKiBDb3B5cmlnaHQgMjAyMCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgPyB3aW5kb3dcbiAgOiB7fVxuKS5wZGZqc1dvcmtlciA9IHJlcXVpcmUoXCIuL3BkZi53b3JrZXIuanNcIik7XG4iLCJpbXBvcnQgeyBQbHVnaW4sIE1hcmtkb3duUmVuZGVyQ2hpbGQsIEFwcCB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgKiBhcyBwZGZqcyBmcm9tIFwicGRmanMtZGlzdC9idWlsZC9wZGYuanNcIjtcclxuaW1wb3J0ICogYXMgd29ya2VyIGZyb20gXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnkuanNcIjtcclxuXHJcbmludGVyZmFjZSBQZGZOb2RlUGFyYW1ldGVycyB7XHJcbiAgdXJsOiBzdHJpbmc7XHJcbiAgcGFnZTogbnVtYmVyIHwgQXJyYXk8bnVtYmVyPjtcclxuICBzY2FsZTogbnVtYmVyO1xyXG4gIHJvdGF0aW9uOiBudW1iZXI7XHJcbiAgcmVjdDogQXJyYXk8bnVtYmVyPjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmV0dGVyUERGUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuICBhc3luYyBvbmxvYWQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkJldHRlciBQREYgbG9hZGluZy4uLlwiKTtcclxuXHJcbiAgICBwZGZqcy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IHdvcmtlcjtcclxuXHJcbiAgICB0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJwZGZcIiwgYXN5bmMgKHNyYywgZWwsIGN0eCkgPT4ge1xyXG5cclxuICAgICAgLy8gR2V0IFBhcmFtZXRlcnNcclxuICAgICAgbGV0IHBhcmFtZXRlcnM6IFBkZk5vZGVQYXJhbWV0ZXJzID0gbnVsbDtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5yZWFkUGFyYW1ldGVycyhzcmMpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgZWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiUERGIFBhcmFtZXRlcnMgaW52YWxpZDogXCIgKyBlLm1lc3NhZ2UgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vQ3JlYXRlIFBERiBOb2RlXHJcbiAgICAgIGlmIChwYXJhbWV0ZXJzICE9PSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAvL1JlYWQgRG9jdW1lbnRcclxuICAgICAgICAgIHZhciB2YXVsdE5hbWUgPSB0aGlzLmFwcC52YXVsdC5nZXROYW1lKCk7XHJcbiAgICAgICAgICB2YXIgYnVmZmVyID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkQmluYXJ5KHBhcmFtZXRlcnMudXJsKTtcclxuICAgICAgICAgIHZhciBkb2N1bWVudCA9IGF3YWl0IHBkZmpzLmdldERvY3VtZW50KGJ1ZmZlcikucHJvbWlzZTtcclxuXHJcbiAgICAgICAgICAvL1JlYWQgcGFnZXNcclxuICAgICAgICAgIGZvciAobGV0IHBhZ2VOdW1iZXIgb2YgPG51bWJlcltdPnBhcmFtZXRlcnMucGFnZSkge1xyXG4gICAgICAgICAgICB2YXIgcGFnZSA9IGF3YWl0IGRvY3VtZW50LmdldFBhZ2UocGFnZU51bWJlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgaHlwZXJsaW5rIGZvciBQYWdlXHJcbiAgICAgICAgICAgIHZhciBocmVmID0gZWwuY3JlYXRlRWwoXCJhXCIpO1xyXG4gICAgICAgICAgICBocmVmLmhyZWYgPSBwYXJhbWV0ZXJzLnVybCArIFwiI3BhZ2U9XCIgKyBwYWdlTnVtYmVyO1xyXG4gICAgICAgICAgICBocmVmLmNsYXNzTmFtZSA9IFwiaW50ZXJuYWwtbGlua1wiO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IFZpZXdwb3J0XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXRYID0gTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnJlY3RbMF0gKiAtMSAqIHBhcmFtZXRlcnMuc2NhbGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFkgPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMucmVjdFsxXSAqIC0xICogcGFyYW1ldGVycy5zY2FsZVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7XHJcbiAgICAgICAgICAgICAgc2NhbGU6IHBhcmFtZXRlcnMuc2NhbGUsXHJcbiAgICAgICAgICAgICAgcm90YXRpb246IHBhcmFtZXRlcnMucm90YXRpb24sXHJcbiAgICAgICAgICAgICAgb2Zmc2V0WDogb2Zmc2V0WCxcclxuICAgICAgICAgICAgICBvZmZzZXRZOiBvZmZzZXRZLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciBDYW52YXNcclxuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGhyZWYuY3JlYXRlRWwoXCJjYW52YXNcIik7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnJlY3RbMl0gPCAxKSB7XHJcbiAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnJlY3RbMl0gKiBwYXJhbWV0ZXJzLnNjYWxlKTtcclxuICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSBNYXRoLmZsb29yKHBhcmFtZXRlcnMucmVjdFszXSAqIHBhcmFtZXRlcnMuc2NhbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyQ29udGV4dCA9IHtcclxuICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYXdhaXQgcGFnZS5yZW5kZXIocmVuZGVyQ29udGV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBlcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkUGFyYW1ldGVycyhqc29uU3RyaW5nOiBhbnkpIHtcclxuICAgIC8vIFwidXJsXCIgOiBbW2ZpbGUucGRmXV0gaXMgYW4gaW52YWxpZCBqc29uIHNpbmNlIGl0IG1pc3NlcyBxdW90YXRpb24gbWFya3MgaW4gdmFsdWVcclxuICAgIGlmIChqc29uU3RyaW5nLmNvbnRhaW5zKFwiW1tcIikgJiYgIWpzb25TdHJpbmcuY29udGFpbnMoJ1wiW1snKSkge1xyXG4gICAgICBqc29uU3RyaW5nID0ganNvblN0cmluZy5yZXBsYWNlKFwiW1tcIiwgJ1wiW1snKTtcclxuICAgICAganNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZShcIl1dXCIsICddXVwiJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmFtZXRlcnM6IFBkZk5vZGVQYXJhbWV0ZXJzID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuXHJcbiAgICAvL1RyYW5zZm9ybSBpbnRlcm5hbCBMaW5rIHRvIGV4dGVybmFsXHJcbiAgICBpZiAocGFyYW1ldGVycy51cmwuc3RhcnRzV2l0aChcIltbXCIpKSB7XHJcbiAgICAgIHBhcmFtZXRlcnMudXJsID0gcGFyYW1ldGVycy51cmwuc3Vic3RyKDIsIHBhcmFtZXRlcnMudXJsLmxlbmd0aCAtIDQpO1xyXG4gICAgICBwYXJhbWV0ZXJzLnVybCA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoXHJcbiAgICAgICAgcGFyYW1ldGVycy51cmwsXHJcbiAgICAgICAgXCJcIlxyXG4gICAgICApLnBhdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Db252ZXJ0IFBhZ2UgdG8gQXJyYXk8UGFnZT5cclxuICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy5wYWdlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHBhcmFtZXRlcnMucGFnZSA9IFtwYXJhbWV0ZXJzLnBhZ2VdO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtZXRlcnMucGFnZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcmFtZXRlcnMucGFnZSA9IFsxXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHBhcmFtZXRlcnMuc2NhbGUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICBwYXJhbWV0ZXJzLnNjYWxlIDwgMC4xIHx8XHJcbiAgICAgIHBhcmFtZXRlcnMuc2NhbGUgPiAxMC4wXHJcbiAgICApIHtcclxuICAgICAgcGFyYW1ldGVycy5zY2FsZSA9IDEuMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1ldGVycy5yb3RhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcmFtZXRlcnMucm90YXRpb24gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbWV0ZXJzLnJlY3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBwYXJhbWV0ZXJzLnJlY3QgPSBbMCwgMCwgMCwgMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1ldGVycztcclxuICB9XHJcblxyXG4gIG9udW5sb2FkKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJ1bmxvYWRpbmcgQmV0dGVyIFBERiBwbHVnaW4uLi5cIik7XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6WyJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwidXJsIiwicmVxdWlyZSQkNSIsInBkZmpzLkdsb2JhbFdvcmtlck9wdGlvbnMiLCJwZGZqcy5nZXREb2N1bWVudCIsIlBsdWdpbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxD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LEVBQUU7QUFDNUIsTUFBTSxJQUFJLEdBQUcsS0FBSztBQUNsQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNqQixJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM1QixHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzVCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsUUFBUSxJQUFJLENBQUMsUUFBUTtBQUNyQixRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25CLE1BQU0sSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUs7QUFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0IsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssS0FBSyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0Q7QUFDQSxFQUFFLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsUUFBUSxJQUFJLEdBQUcsQ0FB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RSxFQUFFLEVBQUU7QUFDNUMsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBO0FBQ0EsRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzVCLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEMsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUM5QztBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0QyxJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzlDLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxJQUFJLEtBQUssVUFBVTtBQUM3QixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUM3QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDMUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQyxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEMsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ2hFLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQsTUFBTSxPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3JELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDMUMsS0FBSztBQUNMLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3BDLElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ2xDLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3pELElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFD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LFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNsRSx1QkFBdUIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3RELE1BQU0sSUFBSSxVQUFVLEVBQUU7QUFDdEIsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDM0QsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNwQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUNsQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDdEUsTUFBTSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUU7QUFDM0QscUJBQXFCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0wsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQyxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVB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QUFJLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RCxJQUFJLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDcEQsSUFBSSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLElBQUksVUFBVSxHQUFHLFVBQVUsSUFBSSxDQUFDLElBQUksVUFBVSxJQUFJLEVBQUUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLElBQUksSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFB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O0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdE4sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2SSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNuQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRTtBQUM3QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUNqQyxJQUFJLFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDM0IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RSxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3RILE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0SCxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pyQjtBQUNBLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO0FBQ2hDLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU07QUFDM0IsUUFBUSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUM5QyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUNyRCxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMLEdBQUcsTUFBTTtBQUNULElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQyxNQUFNLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BF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QUFJLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RELE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztBQUN4QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdELE1BQU0sTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7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QUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1RCxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxD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QUFDO0FBQzdEO0FBQ0EsUUFBUSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFF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QUksSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksT0FBTztBQUNYLE1BQU0sSUFBSSxFQUFFLFNBQVM7QUFDckIsTUFBTSxVQUFVLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUU7QUFDdkQsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxJQUFJLElBQUksQ0FBQztBQUNqQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzlCLFVBQVUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3RDLFVBQVUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUs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QUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzdCLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMxQixJQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDZDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3BCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzlCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLE1BQU07QUFDZixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVDtBQUNBLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDZDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3BCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLE1BQU0sSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzlCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLE1BQU07QUFDZixVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVDtBQUNBLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ2xCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNwQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDMUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcs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RyxDQUFDLENBQUMsQ0FBQztBQUNyRixJQUFJLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxJQUFJLElBQUksV0FBVyxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNuQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEksSUFBSSxFQUFFLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkQsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLG1CQUFt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QUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO0FBQzNELGNBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxjQUFjLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsY0FBYyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FB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QUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FB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QUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxJQUFJLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hFLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUMsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ25ELElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLHdCQUF3QixTQUFTLHlCQUF5QixDQUFDO0FBQ2pFLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sc0JBQXNCLFNBQVMsaUJBQWlCLENBQUM7QUFDdkQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sb0JBQW9CLFNBQVMsaUJBQWlCLENBQUM7QUFDckQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ3ZELElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLElBQUksS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUN4QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM5QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDMUUsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5QyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDckQsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QztBQUNBLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RDtBQUNBLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sMEJBQTBCLFNBQVMsaUJBQWlCLENBQUM7QUFDM0QsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sMEJBQTBCLFNBQVMsaUJBQWlCLENBQUM7QUFDM0QsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0seUJBQXlCLFNBQVMsaUJBQWlCLENBQUM7QUFDMUQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sMEJBQTBCLFNBQVMsaUJBQWlCLENBQUM7QUFDM0QsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sc0JBQXNCLFNBQVMsaUJBQWlCLENBQUM7QUFDdkQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0csSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksRUFB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QUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxD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RyxNQUFNLENBQUM7QUFDckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2IsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2IsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxN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LENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFELE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFO0FBQzVELE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNsQyxNQUFNLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEMsTUFBTSxJQUFJLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBQ3hDLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNqQztBQUNBLE1BQU0sUUFBUSxJQUFJ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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbEQsUUFBUSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDaEUsUUFBUSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLElBQUksU0FB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SUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDMUM7QUFDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsTUFBTSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4RDtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0Q7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsTUFBTSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRTtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUs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WUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUNqQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEcsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksQ0FBQyxJ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S0FBSyxHQUFHO0FBQ2QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0EsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxNQUFNLElBQUksQ0FBQztBQUNYLEVBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzNCLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0TixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNFLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVFLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRCxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwSyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFO0FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4SCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZJLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUU7QUFDMUMsSUFBSSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDenJCO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7QUFDaEMsRUFBRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTTtBQUMzQixRQUFRLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO0FBQzlDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RixLQUFLO0FBQ0wsR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO0FBQ3JELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RixLQUFLO0FBQ0wsR0FBRyxNQUFNO0FBQ1QsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sTUFBTSxJQUFJLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDRDtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDakMsRUFBRSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFDRDtBQUNBLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDbkIsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbEIsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUMvQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDckIsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUMvQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUU7QUFDMUIsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQzNFLENBQUM7QUFDRDtBQUNBLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDbEMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQyxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUM5QyxJQUFJLE9BQU8sT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzFELEVBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuVCxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLHVCQUF1QixHQUFHO0FBQ25DLEVBQUUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxFQUFFLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN4QixFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRTtBQUMvQyxJQUFJLEdBQUcsR0FBRztBQUNWLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksVUFBVSxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRTtBQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JCLEtBQUssQ0FBQztBQUNOLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0Q7QUFDQSxNQUFNLGVBQWUsR0FBRyxTQUFTLHNCQUFzQixHQUFHO0FBQzFELEVBQUUsTUFBTSxNQUFNLEdBQUcsbUVBQW1FLENBQUM7QUFDckYsRUFBRSxPQUFPLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxHQUFHLEtBQUssRUFBRTtBQUM5RSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLGVBQWUsRUFBRTtBQUNqRCxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDcEMsUUFBUSxJQUFJLEVBQUUsV0FBVztBQUN6QixPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQ3hCLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0QsTUFBTSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM3QyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLENBQUM7QUFDSixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUM7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ2UsbUJBQW1CLENBQUMsQ0FBQyxFQUFFO0FBR3RDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEdBQUcsRUFBRSxLQUFLLGtCQUFrQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7QUFDMUwsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUI7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4QixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4QixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QixPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsQyxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM1QixPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3RIO0FBQ1ksbUJBQW1CLENBQUMsQ0FBQyxFQUFFO0FBQ25DO0FBQ0EsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2IsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksR0FBRyxTQUFTLFdBQVcsR0FBRztBQUNsQyxFQUFFLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ3JDLElBQUksSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksT0FBTyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRSxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZO0FBQ2pDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxHQUFHLEdBQUcsU0FBUyxVQUFVLEdBQUc7QUFDaEMsRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsRUFBRSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDcEIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNsQyxJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxJQUFJLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsWUFBWTtBQUNoQyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxHQUFHLFNBQVMsV0FBVyxHQUFHO0FBQ2xDLEVBQUUsSUFBSSxlQUFlLEdBQUcsU0FBUyxzQkFBc0IsR0FBRztBQUMxRCxJQUFJLE9BQU8sZUFBZSxDQUFDO0FBQzNCLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxlQUFlLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHO0FBQ25CLElBQUksVUFBVSxFQUFFLFNBQVMsZUFBZSxDQUFDLE9BQU8sRUFBRTtBQUNsRCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUc7QUFDZixNQUFNLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzFCLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDckQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQztBQUNBLFFBQVEsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDdkQsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUM3QyxRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQy9ELE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNyQyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3JELFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3ZELFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDN0MsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNwRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQy9CLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDL0MsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEQsUUFBUSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFO0FBQ3hDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDdEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLFNBQVMsWUFBWSxHQUFHO0FBQ3JDLE1BQU0sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsU0FBUyxpQkFBaUIsR0FBRztBQUMvQyxNQUFNLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMLElBQUksR0FBRyxFQUFFLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxHQUFHLEVBQUUsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLEVBQUUsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFO0FBQzdDLE1BQU0sS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2pDLFFBQVEsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUI7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVTtBQUN6QixJQUFJLElBQUk7QUFDUixJQUFJLFNBQVM7QUFDYixJQUFJLGFBQWEsR0FBRyxLQUFLO0FBQ3pCLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEIsTUFBTSxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUNwQyxRQUFRLElBQUksRUFBRSxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7QUFDckMsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlELFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNsRCxZQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNqQztBQUNBLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDbEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO0FBQ25DLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM1RCxRQUFRLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUNwQyxVQUFVLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEIsVUFBVSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRTtBQUM3QyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLEVBQUU7QUFDL0QsUUFBUSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7QUFDakMsUUFBUSxJQUFJLEVBQUUsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO0FBQ3JDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5RCxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDL0MsWUFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN0QyxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUM1QixRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3hDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekQsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxHQUFHLEdBQUcsU0FBUyxVQUFVLEdBQUc7QUFDaEMsRUFBRSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsRUFBRSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEdBQUc7QUFDbEIsSUFBSSxRQUFRLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDdEMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQzFCLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDaEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxJQUFJLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLFlBQVk7QUFDaEMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEI7QUFDQSxNQUFNLE1BQU0sQ0FBQztBQUNiLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNYLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEI7QUFDQSxNQUFNLFdBQVcsQ0FBQztBQUNsQixFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxHQUFHO0FBQ2IsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNYLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFDWCxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN0RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDcEIsSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7QUFDNUMsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDO0FBQ0EsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xCLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQ25CLENBQUM7QUFDRDtBQUNBLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7QUFDekIsRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDRDtBQUNBLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDdkIsRUFBRSxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFDRDtBQUNBLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7QUFDekIsRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFDRDtBQUNBLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNsQixFQUFFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQztBQUMxQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdCLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ2hELENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNyQixFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFDekUsQ0FBQztBQUNEO0FBQ0EsU0FBUyxvQkFBb0IsR0FBRztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQjtBQUNBLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUNEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksU0FBUyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxNQUFNLGNBQWMsQ0FBQztBQUNyQixFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUU7QUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRztBQUNkLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFVBQVUsR0FBRztBQUNuQixJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFCLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUN2QixRQUFRLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQ3RDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLEdBQUc7QUFDbkIsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUseUNBQXlDLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNyQixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRTtBQUM1QixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssRUFBRTtBQUNyQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN2RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUMzQixJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsOENBQThDLENBQUMsQ0FBQztBQUMzRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLG1CQUFtQixDQUFDLEtBQUssRUFBRTtBQUM3QixJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQzNFLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtBQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUNwQixJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sZUFBZSxTQUFTLGNBQWMsQ0FBQztBQUM3QyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUU7QUFDbkUsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzdDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNoQyxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUU7QUFDckMsTUFBTSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUMzQixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLEdBQUcsRUFBRTtBQUMxQjtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7QUFDdEI7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLE1BQU0saUJBQWlCLFNBQVMsY0FBYyxDQUFDO0FBQy9DLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFO0FBQzNFLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ25DLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFO0FBQ3BGLE1BQU0sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQ2pDLE1BQU0sTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQ3pCLE1BQU0sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUM3QyxNQUFNLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztBQUN6QyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN2RixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUN2QyxRQUFRLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDakIsTUFBTSxJQUFJLEVBQUUsRUFBRSxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO0FBQzdELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUMzQixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLEdBQUc7QUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztBQUNyQyxNQUFNLEtBQUs7QUFDWCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUNwQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxhQUFhLENBQUM7QUFDcEIsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLElBQUksSUFBSSxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBLEVBQUUsZ0JBQWdCLEdBQUc7QUFDckIsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxlQUFlLEdBQUc7QUFDeEIsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxHQUFHO0FBQ3BCLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkQsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUM5QixJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDckM7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDakMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLFNBQVMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzVELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pELElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxJQUFJLEtBQUssSUFBSSxRQUFRLEdBQUcsVUFBVSxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUU7QUFDckUsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUU7QUFDakMsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7QUFDOUMsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRCxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztBQUMxQyxJQUFJLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25HO0FBQ0EsSUFBSSxLQUFLLElBQUksUUFBUSxHQUFHLFVBQVUsRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFO0FBQ3JFLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNsQixJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUMxQyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRDtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLDZCQUE2QixFQUFFO0FBQ3RELE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztBQUMvQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzFCLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ3RCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO0FBQzNDLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRSxLQUFLLEdBQUcsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQzVELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFDLFFBQVEsTUFBTSxJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUU7QUFDN0IsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNqRDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzFDLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHO0FBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHO0FBQ2hCLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN6QixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7QUFDM0MsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUI7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixJQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQ3pDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM3QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFO0FBQy9DLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRCxNQUFNLE9BQU8sWUFBWSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBQ3RCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QyxJQUFJLE9BQU8sWUFBWSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3JFLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDMUMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDM0IsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDVixJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xCLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtBQUNyQyxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxLQUFLLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUN2RCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNoRCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7QUFDL0MsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsc0JBQXNCLEdBQUcsRUFBRTtBQUN4QztBQUNBLElBQUksc0JBQXNCLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0Q7QUFDQSxJQUFJLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZO0FBQ3BFLE1BQU0sTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2QyxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1RCxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsTUFBTSxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDL0I7QUFDQSxNQUFNLEtBQUssSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFLEtBQUssR0FBRyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDOUQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDNUMsVUFBVSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sYUFBYSxDQUFDO0FBQzNCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFlBQVk7QUFDbkUsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNuRCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2xELEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7QUFDbkQsSUFBSSxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzVDLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7QUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDbEQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQ3hFLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDMUIsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RTtBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMzQyxNQUFNLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFO0FBQ25CLFFBQVEsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQixJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSztBQUNyRCxNQUFNLE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSTtBQUNqQyxRQUFRLElBQUk7QUFDWixVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQzNCLFlBQVksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNyQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RDtBQUNBLFlBQVksSUFBSSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDbEQsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlCLGdCQUFnQixNQUFNO0FBQ3RCLGVBQWUsQ0FBQyxDQUFDO0FBQ2pCLGFBQWE7QUFDYjtBQUNBLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkQsWUFBWSxPQUFPO0FBQ25CLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RCxVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEIsVUFBVSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3BCLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFNBQVM7QUFDVCxPQUFPLENBQUM7QUFDUjtBQUNBLE1BQU0sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJO0FBQ3pCLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3hCLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN6QixRQUFRLEtBQUssRUFBRSxJQUFJO0FBQ25CLFFBQVEsS0FBSztBQUNiLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixHQUFHO0FBQ3JCLElBQUksTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzNDLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxJQUFJLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLFFBQVEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksRUFBRTtBQUN0QyxNQUFNLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDdkIsUUFBUSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNyRDtBQUNBLFFBQVEsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsTUFBTSxLQUFLLE1BQU0sWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3pELFFBQVEsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQy9ELFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xGLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUk7QUFDOUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDeEIsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuQixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckMsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QjtBQUNBLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsS0FBSyxHQUFHLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUM1RCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUM3QixJQUFJLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMvQjtBQUNBLElBQUksS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7QUFDaEMsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxLQUFLLElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRSxLQUFLLEdBQUcsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQzlELFFBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDOUMsVUFBVSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUM3QixJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUMxQixRQUFRLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDM0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDckQsUUFBUSxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQzNCLFVBQVUsVUFBVTtBQUNwQixVQUFVLFFBQVEsRUFBRSxTQUFTLEdBQUcsQ0FBQztBQUNqQyxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUMzQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ25DLFFBQVEsYUFBYSxDQUFDLElBQUksQ0FBQztBQUMzQixVQUFVLFVBQVU7QUFDcEIsVUFBVSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFDN0IsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEMsTUFBTSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTTtBQUN4RSxNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtBQUN4QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUNuRCxJQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRSxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3pDLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFELElBQUksTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RztBQUNBLElBQUksSUFBSSxhQUFhLEVBQUU7QUFDdkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELE1BQU0sSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUN2QyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRTtBQUN2QyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxLQUFLLElBQUksUUFBUSxHQUFHLFVBQVUsRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFO0FBQ3JFLE1BQU0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN2QixRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtBQUMxQyxRQUFRLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEU7QUFDQSxRQUFRLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN4QyxVQUFVLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNwRSxNQUFNLElBQUksY0FBYyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxLQUFLLENBQUMsRUFBRTtBQUM3QyxRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzlDLFVBQVUsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUNyQyxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDNUMsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUM5QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLE1BQU0sU0FBUyxJQUFJLGNBQWMsRUFBRTtBQUM1QyxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEU7QUFDQSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUN4QyxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUztBQUMxRCxNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtBQUN4QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDdkIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUU7QUFDL0QsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQ7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEMsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEMsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEc7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLFNBQVMscUJBQXFCLENBQUMsV0FBVyxFQUFFO0FBQzVDLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFDYixFQUFFLE9BQU8sWUFBWTtBQUNyQixJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsTUFBTSxvQkFBb0IsU0FBUyxLQUFLLENBQUMsYUFBYSxDQUFDO0FBQ3ZELEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxrQkFBa0IsU0FBUyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDdkQ7QUFDQSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQ7QUFDQSxNQUFNLGtCQUFrQixTQUFTLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN2RDtBQUNBLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNoRDtBQUNBLFNBQVMsc0JBQXNCLENBQUM7QUFDaEMsRUFBRSxJQUFJO0FBQ04sRUFBRSxHQUFHO0FBQ0wsRUFBRSxRQUFRLEdBQUcsS0FBSztBQUNsQixFQUFFLGFBQWEsR0FBRyxJQUFJO0FBQ3RCLENBQUMsRUFBRTtBQUNILEVBQUUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxNQUFNLENBQUM7QUFDYjtBQUNBLEVBQUUsT0FBTyxJQUFJLEVBQUU7QUFDZixJQUFJLE1BQU0sS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUM3QixNQUFNLElBQUksYUFBYSxFQUFFO0FBQ3pCLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLFFBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsU0FBUyxHQUFHLFVBQVUsRUFBRTtBQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGLE1BQU0sTUFBTTtBQUNaLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5TTtBQUNBLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFO0FBQ3BELEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO0FBQ3hHLEVBQUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDVjtBQUNBLEVBQUUsT0FBTyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQztBQUNuQixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekIsRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQ2hCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNmLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0MsRUFBRSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsT0FBTyxTQUFTLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUN2RCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDakIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDZCxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDaEMsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDbEMsRUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ2xDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEcsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQzFCLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFDRDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSxTQUFTLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7QUFDcEQsRUFBRSxPQUFPLE1BQU0sS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDbkcsQ0FBQztBQUNEO0FBQ0EsTUFBTSxJQUFJLENBQUM7QUFDWCxFQUFFLFdBQVcsQ0FBQztBQUNkLElBQUksVUFBVTtBQUNkLElBQUksSUFBSTtBQUNSLElBQUksU0FBUztBQUNiLElBQUksUUFBUTtBQUNaLElBQUksR0FBRztBQUNQLElBQUksZUFBZTtBQUNuQixJQUFJLFNBQVM7QUFDYixJQUFJLGdCQUFnQjtBQUNwQixJQUFJLGdCQUFnQjtBQUNwQixHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLElBQUksTUFBTSxVQUFVLEdBQUc7QUFDdkIsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNaLEtBQUssQ0FBQztBQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLGVBQWUsQ0FBQztBQUN6RCxNQUFNLE9BQU8sV0FBVyxHQUFHO0FBQzNCLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFBRTtBQUNqRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQzFELE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ3pCLE1BQU0sR0FBRztBQUNULE1BQU0sUUFBUTtBQUNkLE1BQU0sYUFBYSxFQUFFLEtBQUs7QUFDMUIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDbEUsTUFBTSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDckIsTUFBTSxTQUFTLEVBQUUsS0FBSztBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUc7QUFDaEIsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUc7QUFDbEIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JILEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRTtBQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQ7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUQsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksb0JBQW9CLENBQUMsQ0FBQztBQUN6RyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHO0FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ2pCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtBQUM1QyxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLElBQUksR0FBRztBQUNiLElBQUksTUFBTTtBQUNWLE1BQU0sT0FBTztBQUNiLE1BQU0sUUFBUTtBQUNkLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDYixJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2I7QUFDQSxJQUFJLElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQzVFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUN0QixLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRDtBQUNBLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakUsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ25CLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7QUFDdEUsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRztBQUNmLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMzQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakIsS0FBSyxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtBQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQzVCLEtBQUssTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsZ0JBQWdCLEdBQUc7QUFDckIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksSUFBSSxNQUFNLENBQUM7QUFDZjtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM3QixNQUFNLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLE1BQU0sS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLEVBQUU7QUFDdkMsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRTtBQUN6QyxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDN0QsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDckIsTUFBTSxPQUFPO0FBQ2IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7QUFDckMsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzdDLE1BQU0sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUM3QyxNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQ3BDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxXQUFXLEVBQUU7QUFDL0QsTUFBTSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO0FBQzVDLFFBQVEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRTtBQUMxRCxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ2hILFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHlDQUF5QyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNHLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFO0FBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM1QyxNQUFNLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEYsTUFBTSxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqQyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDO0FBQ2xCLElBQUksT0FBTztBQUNYLElBQUksSUFBSTtBQUNSLElBQUksSUFBSTtBQUNSLElBQUksTUFBTTtBQUNWLElBQUksc0JBQXNCO0FBQzFCLElBQUksaUJBQWlCO0FBQ3JCLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNsRixJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0SCxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDN0QsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDckIsTUFBTSxPQUFPO0FBQ2IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7QUFDckMsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzdDLE1BQU0sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUM3QyxNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQ3BDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQy9FLElBQUksTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7QUFDbkUsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25FLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN0QyxRQUFRLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwRSxRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLE1BQU07QUFDZCxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7QUFDOUMsUUFBUSxNQUFNLEVBQUUsYUFBYTtBQUM3QixRQUFRLElBQUk7QUFDWixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLFlBQVksRUFBRSxNQUFNO0FBQzVCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQzFCLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDN0csTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFFBQVEsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixRQUFRLE9BQU87QUFDZixVQUFVLE1BQU0sRUFBRSxVQUFVLENBQUMsV0FBVztBQUN4QyxTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUNoQztBQUNBLE1BQU0sS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7QUFDNUMsUUFBUSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN4RCxVQUFVLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDcEosWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsb0RBQW9ELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEgsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ2QsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLE9BQU8sRUFBRTtBQUNqRSxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7QUFDdEMsVUFBVSxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBLFFBQVEsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RCxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsUUFBUSxPQUFPO0FBQ2YsVUFBVSxNQUFNLEVBQUUsVUFBVSxDQUFDLFdBQVc7QUFDeEMsU0FBUyxDQUFDO0FBQ1YsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUM7QUFDckIsSUFBSSxPQUFPO0FBQ1gsSUFBSSxJQUFJO0FBQ1IsSUFBSSxtQkFBbUI7QUFDdkIsSUFBSSxJQUFJO0FBQ1IsSUFBSSxnQkFBZ0I7QUFDcEIsR0FBRyxFQUFFO0FBQ0wsSUFBSSxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xGLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLElBQUksTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUMvRSxJQUFJLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7QUFDbEQsTUFBTSxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO0FBQy9ELFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3ZCLFFBQVEsT0FBTztBQUNmLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQ3ZDLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVEsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUMvQyxRQUFRLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDL0MsUUFBUSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUN0QyxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7QUFDN0MsUUFBUSxNQUFNLEVBQUUsYUFBYTtBQUM3QixRQUFRLElBQUk7QUFDWixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLG1CQUFtQjtBQUMzQixRQUFRLGdCQUFnQjtBQUN4QixRQUFRLElBQUk7QUFDWixPQUFPLENBQUMsQ0FBQztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDN0IsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxXQUFXLEVBQUU7QUFDL0QsTUFBTSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsUUFBUSxJQUFJLENBQUMsTUFBTSxJQUFJLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN2RSxVQUFVLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sZUFBZSxDQUFDO0FBQzdCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRztBQUNwQixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hHLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxrQkFBa0IsR0FBRztBQUMzQixJQUFJLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQ3JGLE1BQU0sTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxNQUFNLEtBQUssTUFBTSxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNwRCxRQUFRLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUM5SixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsV0FBVyxFQUFFO0FBQ3pFLFFBQVEsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUQsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDNUUsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLGlCQUFpQixHQUFHLGtFQUFrRSxDQUFDO0FBQzdGLE1BQU0seUJBQXlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbkQ7QUFDQSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRTtBQUNsRSxFQUFFLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLEVBQUUsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7QUFDeEQ7QUFDQSxFQUFFLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRTtBQUN2QixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxTQUFTLEVBQUU7QUFDakIsSUFBSSxNQUFNLFlBQVksR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQjtBQUNBLE1BQU0sT0FBTyxDQUFDLEdBQUcsZUFBZSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN4RixRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ1osT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxlQUFlLEVBQUU7QUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUM7QUFDekMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ1osS0FBSztBQUNMLEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxPQUFPLEdBQUcsSUFBSSxVQUFVLEVBQUU7QUFDOUIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLGVBQWUsSUFBSSxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6RSxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ1osT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxlQUFlLEVBQUU7QUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDWixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFDRDtBQUNBLE1BQU0sV0FBVyxDQUFDO0FBQ2xCLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7QUFDL0IsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNmO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN4QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDNUIsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLHFEQUFxRCxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLE1BQU0sVUFBVSxHQUFHO0FBQ3ZCLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNO0FBQ2xDLE1BQU0sT0FBTyxRQUFRLEdBQUc7QUFDeEIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxZQUFZLEdBQUc7QUFDNUIsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFdBQVcsR0FBRztBQUMzQixRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3hFLE9BQU87QUFDUDtBQUNBLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRTtBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDOUIsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksYUFBYSxHQUFHO0FBQ3RCLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNsQixNQUFNLElBQUksR0FBRyxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMzRCxRQUFRLE1BQU0sR0FBRyxDQUFDO0FBQ2xCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2xCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQzVCLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtBQUMxQyxRQUFRLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2xELE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztBQUN6RCxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUs7QUFDdkIsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMzQjtBQUNBLE1BQU0sT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsR0FBRyxJQUFJLElBQUksR0FBRyxlQUFlLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNyQixVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxFQUFFO0FBQ2pCLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksRUFBRSxDQUFDO0FBQ2Y7QUFDQSxRQUFRLEdBQUc7QUFDWCxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEMsU0FBUyxRQUFRLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRDtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUN6QyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNoQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM5QixVQUFVLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDeEIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO0FBQzdDLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZCLElBQUksTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDdEMsSUFBSSxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ3BCLFFBQVEsRUFBRSxDQUFDO0FBQ1g7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRTtBQUMzQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxzQkFBc0IsRUFBRTtBQUNwRCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdDLElBQUksTUFBTSxHQUFHLEdBQUcsYUFBYSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDL0UsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFLGNBQWMsR0FBRyxDQUFDLEVBQUU7QUFDekQsSUFBSSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDL0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJO0FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDN0IsUUFBUSxJQUFJLEVBQUUsY0FBYyxHQUFHLGVBQWUsRUFBRTtBQUNoRCxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw2REFBNkQsQ0FBQyxDQUFDO0FBQ3pGLFVBQVUsT0FBTyxLQUFLLENBQUM7QUFDdkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2xGLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUUsTUFBTSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUYsTUFBTSxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUM7QUFDeEMsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ2pCLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDckIsTUFBTSxXQUFXLEVBQUUsS0FBSztBQUN4QixNQUFNLE1BQU0sRUFBRSxLQUFLO0FBQ25CLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDbkIsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxNQUFNLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDNUcsTUFBTSxRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUMvQixNQUFNLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsTUFBTSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRDtBQUNBLE1BQU0sTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RztBQUNBLE1BQU0sUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFTLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztBQUNyRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDakIsTUFBTSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDMUQsUUFBUSxNQUFNLEVBQUUsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHO0FBQ3JCLElBQUksTUFBTSxzQkFBc0IsR0FBRztBQUNuQyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTtBQUMzQixNQUFNLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM1QixNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM3QixNQUFNLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM5QixNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM3QixNQUFNLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM5QixNQUFNLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUTtBQUNsQyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM3QixNQUFNLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNqQyxLQUFLLENBQUM7QUFDTixJQUFJLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2pGLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsbUNBQW1DLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHO0FBQ3BCLE1BQU0sZ0JBQWdCLEVBQUUsT0FBTztBQUMvQixNQUFNLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWE7QUFDeEMsTUFBTSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7QUFDbEQsTUFBTSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO0FBQ3hDLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtBQUNwRCxLQUFLLENBQUM7QUFDTixJQUFJLElBQUksUUFBUSxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUNsQixNQUFNLElBQUksR0FBRyxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMzRCxRQUFRLE1BQU0sR0FBRyxDQUFDO0FBQ2xCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDekUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtBQUMzQyxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzVDLFFBQVEsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QztBQUNBLFFBQVEsSUFBSSxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN6QyxVQUFVLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEQsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRyxXQUFXLE1BQU07QUFDakIsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSxXQUFXO0FBQ1gsU0FBUyxNQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzVDLFVBQVUsSUFBSSxXQUFXLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzFDLFlBQVksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELFdBQVcsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzVHLFlBQVksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoQyxXQUFXLE1BQU07QUFDakIsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RixZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUMvQixZQUFZLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCxXQUFXO0FBQ1g7QUFDQSxVQUFVLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQzVDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUc7QUFDcEIsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLEVBQUU7QUFDckgsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUN6SCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUM5QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRTtBQUNuQyxJQUFJLE1BQU07QUFDVixNQUFNLE9BQU87QUFDYixNQUFNLGFBQWE7QUFDbkIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEU7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtBQUNqRCxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDM0gsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekQsVUFBVSxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyw2Q0FBNkMsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDO0FBQ2pILEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUk7QUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUU7QUFDckIsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3JELE1BQU0sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTTtBQUNWLE1BQU0sT0FBTztBQUNiLE1BQU0sYUFBYTtBQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2IsSUFBSSxNQUFNLE9BQU8sR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEosSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxLQUFLO0FBQzdFLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQztBQUN0QixRQUFRLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNuQyxRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUN2QixRQUFRLFNBQVM7QUFDakIsUUFBUSxRQUFRO0FBQ2hCLFFBQVEsR0FBRztBQUNYLFFBQVEsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDOUMsUUFBUSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7QUFDcEMsUUFBUSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0FBQ2xELFFBQVEsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtBQUNsRCxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLEdBQUc7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sTUFBTSxJQUFJO0FBQ2pELE1BQU0sSUFBSSxNQUFNLFlBQVksV0FBVyxDQUFDLGtCQUFrQixFQUFFO0FBQzVELFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0IsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkQsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRTtBQUM1QixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxFQUFFO0FBQzNDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsb0JBQW9CLEdBQUcsQ0FBQztBQUM1RyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsQztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNsRjtBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksWUFBWSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7QUFDaEMsRUFBRSxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5RCxDQUFDO0FBQ0Q7QUFDQSxNQUFNLE9BQU8sQ0FBQztBQUNkLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUU7QUFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ2pELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ2hFLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzVELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUc7QUFDaEIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtBQUMzQyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHO0FBQ25CLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsRDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ3hELFFBQVEsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN6QixPQUFPO0FBQ1AsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzFELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUVBQW1FLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFFBQVEsR0FBRztBQUNqQixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4QjtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQ7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN4RCxRQUFRLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNqQixNQUFNLElBQUksRUFBRSxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMxRCxRQUFRLE1BQU0sRUFBRSxDQUFDO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDZEQUE2RCxDQUFDLENBQUM7QUFDckYsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtBQUM1QyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDekYsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNsRSxJQUFJLElBQUksUUFBUSxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hELE1BQU0sTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsTUFBTSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqRDtBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDaEcsUUFBUSxJQUFJO0FBQ1osVUFBVSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsVUFBVSxJQUFJLENBQUMsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDN0QsWUFBWSxNQUFNLENBQUMsQ0FBQztBQUNwQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hELFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxpQkFBaUIsR0FBRztBQUMxQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQzVDLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksZUFBZSxHQUFHO0FBQ3hCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ25CO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7QUFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzFELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztBQUMxRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLG9CQUFvQixHQUFHO0FBQ3pCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDdkMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRztBQUNqQixNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ2YsS0FBSyxDQUFDO0FBQ04sSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQ25CLE1BQU0sR0FBRztBQUNULE1BQU0sTUFBTSxFQUFFLElBQUk7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQy9DLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJO0FBQzFCLFVBQVUsVUFBVSxHQUFHLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDN0IsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUIsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLE1BQU0sSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO0FBQ2hDLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUN6RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sSUFBSSxHQUFHO0FBQ25CLFFBQVEsR0FBRyxFQUFFLElBQUk7QUFDakIsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQixPQUFPLENBQUM7QUFDUixNQUFNLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztBQUNsQyxRQUFRLFFBQVEsRUFBRSxXQUFXO0FBQzdCLFFBQVEsU0FBUyxFQUFFLElBQUk7QUFDdkIsUUFBUSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVO0FBQzlDLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLE1BQU0sTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDOUcsUUFBUSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFdBQVcsR0FBRztBQUMxQixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUN2QixRQUFRLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztBQUNyQixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDbEQsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxTQUFTO0FBQzFELFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDakIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QztBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzlELFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNuQixVQUFVLEdBQUc7QUFDYixVQUFVLE1BQU0sRUFBRSxXQUFXO0FBQzdCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkM7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM5RCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDbkIsVUFBVSxHQUFHO0FBQ2IsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDMUIsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRztBQUNwQixJQUFJLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQzVDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNqQixNQUFNLElBQUksRUFBRSxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMxRCxRQUFRLE1BQU0sRUFBRSxDQUFDO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDZCQUE2QixDQUFDLENBQUM7QUFDckQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsZ0JBQWdCLEdBQUc7QUFDckIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDM0MsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakM7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDbEMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCLElBQUksTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7QUFDNUMsTUFBTSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUU7QUFDekIsUUFBUSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxxQkFBcUIsR0FBRztBQUM5QixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDdkIsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RFLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUMxQixRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN0QyxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDM0I7QUFDQSxNQUFNLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDL0MsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQyxRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNwQixVQUFVLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQ2pDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUMvRyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFDckgsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzFELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEUsR0FBRztBQUNIO0FBQ0EsRUFBRSwwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUU7QUFDdkQsSUFBSSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDOUIsTUFBTSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQixRQUFRLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ2xDLFVBQVUsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM5QyxZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoRCxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDNUMsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUU7QUFDaEQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoQyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksRUFBRTtBQUNoQyxRQUFRLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvRSxVQUFVLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNsRTtBQUNBLFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDekIsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUM1QixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxLQUFLLE1BQU0sUUFBUSxJQUFJLGdCQUFnQixFQUFFO0FBQy9DLFFBQVEsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDL0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDL0IsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ25CLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEIsVUFBVSxLQUFLLEVBQUUsWUFBWTtBQUM3QixTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUU7QUFDakQsTUFBTSxJQUFJLEVBQUUsWUFBWSxHQUFHLGlCQUFpQixFQUFFO0FBQzlDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtDQUErQyxDQUFDLENBQUM7QUFDekUsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRTtBQUMxQyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDbkU7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQy9DLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPO0FBQ2IsUUFBUSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDO0FBQ3RELFFBQVEsS0FBSyxFQUFFLFdBQVc7QUFDMUIsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtBQUMxQixVQUFVLGVBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDcEQsVUFBVSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDakMsSUFBSSxPQUFPO0FBQ1gsTUFBTSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUM3RyxNQUFNLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJO0FBQ3RILE1BQU0sU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUN2RyxNQUFNLEVBQUUsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxNQUFNLEdBQUcsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxNQUFNLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QyxNQUFNLE1BQU0sRUFBRSxJQUFJO0FBQ2xCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoQyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUc7QUFDckIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pDLFVBQVUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksR0FBRyxZQUFZLFFBQVEsRUFBRTtBQUNqQyxNQUFNLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNqQztBQUNBLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDaEMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEQsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ2hELE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDeEMsUUFBUSxJQUFJLEtBQUssRUFBRTtBQUNuQixVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxTQUFTO0FBQ1QsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLENBQUMsYUFBYSxFQUFFO0FBQ2hDLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxJQUFJLEdBQUcsWUFBWSxRQUFRLElBQUksR0FBRyxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDcEUsTUFBTSxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7QUFDOUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsR0FBRztBQUNmLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDakMsTUFBTSxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFELEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzNDLE1BQU0sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDbkI7QUFDQSxJQUFJLElBQUk7QUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDbkMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzFELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztBQUNyRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuRDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNkLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJO0FBQ3BCLFFBQVEsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQixJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDckMsSUFBSSxJQUFJLFlBQVksR0FBRyxFQUFFO0FBQ3pCLFFBQVEsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNyQixRQUFRLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNqRCxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDeEUsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRTtBQUNuRyxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7QUFDL0UsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDaEMsVUFBVSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsVUFBVSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzNDLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUNsRixXQUFXO0FBQ1g7QUFDQSxVQUFVLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3pCLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoQyxVQUFVLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkM7QUFDQSxVQUFVLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDdkMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQ25GLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQyxVQUFVLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekM7QUFDQSxVQUFVLElBQUksRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNsRCxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDbEYsV0FBVztBQUNYO0FBQ0EsVUFBVSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFNBQVMsTUFBTTtBQUNmLFVBQVUsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkYsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEdBQUcsQ0FBQztBQUNqQixRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLE1BQU0sWUFBWSxHQUFHLElBQUk7QUFDbkMsZ0JBQWdCLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDcEMsVUFBVSxNQUFNLFlBQVksR0FBRyxLQUFLLEtBQUssR0FBRyxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDM0UsVUFBVSxNQUFNLFdBQVcsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BGLFVBQVUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RSxZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEMsV0FBVztBQUNYO0FBQ0EsVUFBVSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQyxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRO0FBQ1IsVUFBVSxJQUFJLEtBQUssRUFBRTtBQUNyQixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7QUFDN0YsV0FBVztBQUNYO0FBQ0EsVUFBVSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFDNUMsTUFBTSxZQUFZLEVBQUUsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUk7QUFDdEIsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssV0FBVyxDQUFDO0FBQ3pCLFFBQVEsS0FBSyxlQUFlLENBQUM7QUFDN0IsUUFBUSxLQUFLLGdCQUFnQixDQUFDO0FBQzlCLFFBQVEsS0FBSyxhQUFhLENBQUM7QUFDM0IsUUFBUSxLQUFLLGNBQWM7QUFDM0IsVUFBVSxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUNoQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QztBQUNBLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUk7QUFDdEIsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN2QixRQUFRLEtBQUssYUFBYSxDQUFDO0FBQzNCLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFDekIsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ3JCLFFBQVEsS0FBSyxnQkFBZ0I7QUFDN0IsVUFBVSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM5QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxpQkFBaUIsR0FBRztBQUMxQixJQUFJLE1BQU0sMkJBQTJCLEdBQUc7QUFDeEMsTUFBTSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDL0IsTUFBTSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDL0IsTUFBTSxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDaEMsTUFBTSxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDN0IsTUFBTSxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDaEMsTUFBTSxlQUFlLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDbkMsTUFBTSxxQkFBcUIsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUMvQyxNQUFNLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNuQyxNQUFNLFFBQVEsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNsQyxNQUFNLFFBQVEsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNsQyxNQUFNLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNuQyxNQUFNLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNuQyxNQUFNLFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTTtBQUN0QyxNQUFNLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtBQUNoQyxNQUFNLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxNQUFNO0FBQ3JDLE1BQU0sY0FBYyxFQUFFLEtBQUssQ0FBQyxPQUFPO0FBQ25DLE1BQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO0FBQ2pDLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckI7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sS0FBSyxNQUFNLEdBQUcsSUFBSSwyQkFBMkIsRUFBRTtBQUNyRCxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0RCxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxRQUFRLEdBQUc7QUFDbkIsVUFBVSxLQUFLLHVCQUF1QjtBQUN0QyxZQUFZLFFBQVEsS0FBSyxDQUFDLElBQUk7QUFDOUIsY0FBYyxLQUFLLFNBQVMsQ0FBQztBQUM3QixjQUFjLEtBQUssYUFBYSxDQUFDO0FBQ2pDLGNBQWMsS0FBSyxXQUFXLENBQUM7QUFDL0IsY0FBYyxLQUFLLE9BQU87QUFDMUIsZ0JBQWdCLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsY0FBYztBQUNkLGdCQUFnQixTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxXQUFXO0FBQzFCLFlBQVksUUFBUSxLQUFLLENBQUMsSUFBSTtBQUM5QixjQUFjLEtBQUssS0FBSyxDQUFDO0FBQ3pCLGNBQWMsS0FBSyxLQUFLO0FBQ3hCLGdCQUFnQixTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN2QyxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGNBQWM7QUFDZCxnQkFBZ0IsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNsQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssVUFBVSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxVQUFVLENBQUM7QUFDMUIsVUFBVSxLQUFLLFdBQVcsQ0FBQztBQUMzQixVQUFVLEtBQUssV0FBVztBQUMxQixZQUFZLFFBQVEsS0FBSyxDQUFDLElBQUk7QUFDOUIsY0FBYyxLQUFLLFVBQVUsQ0FBQztBQUM5QixjQUFjLEtBQUssU0FBUyxDQUFDO0FBQzdCLGNBQWMsS0FBSyxVQUFVLENBQUM7QUFDOUIsY0FBYyxLQUFLLFNBQVMsQ0FBQztBQUM3QixjQUFjLEtBQUssUUFBUTtBQUMzQixnQkFBZ0IsU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdkMsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxjQUFjO0FBQ2QsZ0JBQWdCLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDdEMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLGNBQWM7QUFDN0IsWUFBWSxRQUFRLEtBQUssQ0FBQyxJQUFJO0FBQzlCLGNBQWMsS0FBSyxNQUFNLENBQUM7QUFDMUIsY0FBYyxLQUFLLFlBQVk7QUFDL0IsZ0JBQWdCLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsY0FBYztBQUNkLGdCQUFnQixTQUFTLEdBQUcsWUFBWSxDQUFDO0FBQ3pDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxRQUFRO0FBQ3ZCLFlBQVksUUFBUSxLQUFLLENBQUMsSUFBSTtBQUM5QixjQUFjLEtBQUssU0FBUyxDQUFDO0FBQzdCLGNBQWMsS0FBSyxxQkFBcUIsQ0FBQztBQUN6QyxjQUFjLEtBQUssb0JBQW9CO0FBQ3ZDLGdCQUFnQixTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN2QyxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGNBQWM7QUFDZCxnQkFBZ0IsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssZ0JBQWdCO0FBQy9CLFlBQVksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN4QztBQUNBLFlBQVksSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsQyxjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUs7QUFDMUQsY0FBYyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDcEgsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSxPQUFPLEVBQUU7QUFDekIsY0FBYyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxXQUFXO0FBQzFCLFlBQVksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLGNBQWMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNoQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVO0FBQ1YsWUFBWSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUM1QyxjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsa0RBQWtELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLGFBQWE7QUFDYjtBQUNBLFlBQVksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUM5QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtBQUNyQyxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDdEIsWUFBWSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxXQUFXO0FBQ1g7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDakMsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLE1BQU0sU0FBUyxHQUFHO0FBQ3hCLFFBQVEsR0FBRyxFQUFFLElBQUk7QUFDakIsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQixRQUFRLE1BQU0sRUFBRSxJQUFJO0FBQ3BCLE9BQU8sQ0FBQztBQUNSLE1BQU0sT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQ2xDLFFBQVEsUUFBUTtBQUNoQixRQUFRLFNBQVM7QUFDakIsT0FBTyxDQUFDLENBQUM7QUFDVDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6QyxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDekIsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFVBQVUsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUN6QyxPQUFPLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ25DLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN6QixVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLFNBQVM7QUFDVDtBQUNBLFFBQVEsVUFBVSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQzdDLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN2QixRQUFRLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUc7QUFDcEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQ3pDLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsTUFBTSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEM7QUFDQSxNQUFNLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RDtBQUNBLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUMxQixVQUFVLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLFNBQVM7QUFDVDtBQUNBLFFBQVEsV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQztBQUMxRSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxTQUFTLHNCQUFzQixDQUFDLE1BQU0sRUFBRTtBQUM1QyxNQUFNLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkM7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ3hELFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekMsUUFBUSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN2QixRQUFRLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDeEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekUsTUFBTSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEM7QUFDQSxNQUFNLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO0FBQ2hDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtBQUM3QyxVQUFVLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDM0csTUFBTSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRTtBQUM1QixJQUFJLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFO0FBQzlDLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUk7QUFDekQsTUFBTSxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRTtBQUNwRCxRQUFRLElBQUksY0FBYyxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUU7QUFDOUMsVUFBVSxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxFQUFFO0FBQ3JDLElBQUksSUFBSSxXQUFXLENBQUMsb0JBQW9CLEdBQUcsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxJQUFJLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFO0FBQzlDLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUk7QUFDekQsTUFBTSxLQUFLLE1BQU07QUFDakIsUUFBUSxJQUFJO0FBQ1osT0FBTyxJQUFJLGVBQWUsRUFBRTtBQUM1QixRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEMsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUU7QUFDekIsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzVELElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEQsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtBQUMxQixVQUFVLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUN2RCxJQUFJLElBQUksS0FBSztBQUNiLFFBQVEsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxTQUFTLElBQUksR0FBRztBQUNwQixNQUFNLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFRLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDakQsVUFBVSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsVUFBVSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxHQUFHLFNBQVMsRUFBRTtBQUNqRSxZQUFZLGdCQUFnQixJQUFJLEtBQUssQ0FBQztBQUN0QyxZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDN0MsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsWUFBWSxPQUFPO0FBQ25CLFdBQVc7QUFDWDtBQUNBLFVBQVUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4QyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQzNELFlBQVksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDMUcsY0FBYyxJQUFJLFNBQVMsS0FBSyxnQkFBZ0IsRUFBRTtBQUNsRCxnQkFBZ0IsSUFBSSxXQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDekUsa0JBQWtCLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN2RCxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLGdCQUFnQixFQUFFLENBQUM7QUFDbkMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0FBQ3ZCLGVBQWU7QUFDZjtBQUNBLGNBQWMsT0FBTztBQUNyQixhQUFhO0FBQ2I7QUFDQSxZQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUNuQixXQUFXLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDbkQsVUFBVSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywrREFBK0QsQ0FBQyxDQUFDLENBQUM7QUFDcEgsVUFBVSxPQUFPO0FBQ2pCLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ25ELFVBQVUsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUMxQztBQUNBLFVBQVUsSUFBSSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDdkQsWUFBWSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pELFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLElBQUksU0FBUyxFQUFFO0FBQ3JELFlBQVksZ0JBQWdCLElBQUksS0FBSyxDQUFDO0FBQ3RDLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNsQyxVQUFVLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDbkksWUFBWSxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtBQUNoRCxjQUFjLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RCxjQUFjLE9BQU87QUFDckIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO0FBQy9CLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDhDQUE4QyxDQUFDLENBQUMsQ0FBQztBQUNuRyxVQUFVLE9BQU87QUFDakIsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDNUQsVUFBVSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQ3hCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQjtBQUNBLElBQUksU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNuQixVQUFVLFNBQVMsQ0FBQztBQUNwQixNQUFNLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFDMUQsUUFBUSxJQUFJLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDdEwsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBQzdGLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNuQixVQUFVLE9BQU8sSUFBSSxDQUFDO0FBQ3RCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUM1QyxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDcEUsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxRQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzlDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25CLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDL0IsUUFBUSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxVQUFVLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUMsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3BFLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3pELFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ3BFLFlBQVksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUMvQyxjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDNUUsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDbEMsY0FBYyxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxhQUFhLE1BQU07QUFDbkIsY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUN0QixhQUFhO0FBQ2IsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNkLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQixVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFDbkYsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDekQsVUFBVSxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3ZCLE1BQU0sT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFO0FBQ3RELFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNuQixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsUUFBUSxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7QUFDckMsSUFBSSxTQUFTLHVCQUF1QixDQUFDLEdBQUcsRUFBRTtBQUMxQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMscUJBQXFCLENBQUMsR0FBRyxFQUFFO0FBQ3hDLE1BQU0sSUFBSTtBQUNWLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2xCLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtBQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1REFBdUQsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7QUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUscURBQXFELENBQUMsQ0FBQztBQUM3RSxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO0FBQ2pELElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDbEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxJQUFJLENBQUM7QUFDYjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2xFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN6QyxNQUFNLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDaEQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseURBQXlELENBQUMsQ0FBQztBQUNuRixRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDekM7QUFDQSxNQUFNLFFBQVEsVUFBVTtBQUN4QixRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsVUFBVSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUM1QyxZQUFZLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUNqQyxXQUFXLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDL0MsWUFBWSxHQUFHLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3RCLFFBQVEsS0FBSyxPQUFPO0FBQ3BCLFVBQVUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQztBQUNBLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDaEQsWUFBWSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDM0MsV0FBVyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQ25ELFlBQVksR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUMxQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0M7QUFDQSxVQUFVLElBQUksVUFBVSxFQUFFO0FBQzFCLFlBQVksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDckQsY0FBYyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUMzQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzFDLGNBQWMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRDtBQUNBLGNBQWMsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDbkQsZ0JBQWdCLEdBQUcsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQztBQUNqRCxlQUFlLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3BELGdCQUFnQixHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLGVBQWU7QUFDZixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtBQUM1QyxZQUFZLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzVDLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxPQUFPO0FBQ3BCLFVBQVUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QztBQUNBLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDcEQsWUFBWSxTQUFTLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDaEQsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFlBQVk7QUFDekIsVUFBVSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFDakI7QUFDQSxVQUFVLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQ25ELFlBQVksRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMvRCxXQUFXLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDcEQsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxFQUFFLEVBQUU7QUFDbEIsWUFBWSxNQUFNLGdCQUFnQixHQUFHLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3RFLFlBQVksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLHFEQUFxRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hLLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsWUFBWSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDbkMsY0FBYyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsRUFBRTtBQUN2RSxnQkFBZ0IsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDM0MsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxRQUFRO0FBQ1IsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRixVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUN2QixRQUFRLFNBQVMsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztBQUN6QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLFNBQVMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDZCxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVELFFBQVEsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxHQUFHLFNBQVMsV0FBVyxHQUFHO0FBQ2xDLEVBQUUsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtBQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUc7QUFDakIsTUFBTSxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEMsTUFBTSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDcEMsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUc7QUFDbkIsSUFBSSxTQUFTLEVBQUUsU0FBUyxjQUFjLEdBQUc7QUFDekMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM5QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTCxJQUFJLFdBQVcsRUFBRSxTQUFTLGdCQUFnQixHQUFHO0FBQzdDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFO0FBQ3hELE1BQU0sSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLEtBQUs7QUFDTCxJQUFJLEtBQUssRUFBRSxTQUFTLFVBQVUsQ0FBQyxZQUFZLEVBQUU7QUFDN0MsTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUN0QjtBQUNBLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN6QixRQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztBQUNwRCxRQUFRLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDMUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7QUFDakMsTUFBTSxJQUFJLE9BQU8sQ0FBQztBQUNsQjtBQUNBLE1BQU0sSUFBSTtBQUNWLFFBQVEsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ25CLFFBQVEsSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzVELFVBQVUsTUFBTSxFQUFFLENBQUM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQzVDLFFBQVEsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckQsUUFBUSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckcsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQztBQUNmO0FBQ0EsTUFBTSxJQUFJO0FBQ1YsUUFBUSxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDNUQsVUFBVSxNQUFNLEVBQUUsQ0FBQztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5RCxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUMzQixVQUFVLE1BQU0sSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDOUQsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLGdCQUFnQixFQUFFLFNBQVMscUJBQXFCLENBQUMsTUFBTSxFQUFFO0FBQzdELE1BQU0sSUFBSSxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNuQyxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUc7QUFDMUIsVUFBVSxRQUFRLEVBQUUsQ0FBQztBQUNyQixVQUFVLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHO0FBQzVDLFVBQVUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQ2pDLFVBQVUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQ2pDLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQztBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDbkQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0FBQzdGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdkQsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDMUMsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBQzlGLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksYUFBYSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0FBQ3ZELE1BQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdkMsTUFBTSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO0FBQzFDLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUM7QUFDZDtBQUNBLE1BQU0sT0FBTyxJQUFJLEVBQUU7QUFDbkIsUUFBUSxJQUFJLEVBQUUsZUFBZSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxJQUFJLFVBQVUsQ0FBQyxFQUFFO0FBQy9FLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUN4RSxZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxVQUFVLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUN6QyxVQUFVLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztBQUM3QyxRQUFRLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDMUM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsRSxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7QUFDOUYsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxVQUFVLFVBQVUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUM1QyxVQUFVLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzlDLFVBQVUsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzlDLFVBQVUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLFVBQVUsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekMsVUFBVSxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN0QyxVQUFVLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyQztBQUNBLFVBQVUsSUFBSSxJQUFJLFlBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUMvQyxZQUFZLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDNUIsY0FBYyxLQUFLLEdBQUc7QUFDdEIsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0EsY0FBYyxLQUFLLEdBQUc7QUFDdEIsZ0JBQWdCLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzFDLGdCQUFnQixNQUFNO0FBQ3RCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDdEgsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUNwRCxZQUFZLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUU7QUFDeEMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEMsUUFBUSxVQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUMsUUFBUSxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUMsUUFBUSxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUMsUUFBUSxPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUM7QUFDeEMsUUFBUSxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDckMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtBQUNwRCxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7QUFDbkYsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxpQkFBaUIsRUFBRSxTQUFTLHNCQUFzQixDQUFDLE1BQU0sRUFBRTtBQUMvRCxNQUFNLElBQUksRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDLEVBQUU7QUFDcEMsUUFBUSxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDM0MsUUFBUSxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDcEIsVUFBVSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHO0FBQzNCLFVBQVUsV0FBVyxFQUFFLEtBQUs7QUFDNUIsVUFBVSxVQUFVO0FBQ3BCLFVBQVUsUUFBUSxFQUFFLENBQUM7QUFDckIsVUFBVSxTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7QUFDL0IsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzlCLE1BQU0sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxJQUFJLGNBQWMsRUFBRSxTQUFTLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtBQUN6RCxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNmLE1BQU0sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN6QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUN6QyxNQUFNLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7QUFDOUMsTUFBTSxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxNQUFNLElBQUksb0JBQW9CLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztBQUNoRDtBQUNBLE1BQU0sT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyQyxRQUFRLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQjtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlELFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO0FBQ2pJLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRixTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNuRCxVQUFVLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsV0FBVyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzdDLFVBQVUsSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUN0QixjQUFjLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0MsWUFBWSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLGNBQWMsS0FBSyxDQUFDLEVBQUU7QUFDcEMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqRCxZQUFZLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwRCxXQUFXO0FBQ1g7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsWUFBWSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDNUQsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDekIsVUFBVSxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNoQyxVQUFVLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0FBQ2pDO0FBQ0EsVUFBVSxRQUFRLElBQUk7QUFDdEIsWUFBWSxLQUFLLENBQUM7QUFDbEIsY0FBYyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNoQyxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssQ0FBQztBQUNsQixjQUFjLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxDQUFDO0FBQ2xCLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVk7QUFDWixjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsV0FBVyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzNDLFFBQVEsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxTQUFTLGlCQUFpQixHQUFHO0FBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRztBQUNuQixVQUFVLEVBQUUsR0FBRyxHQUFHO0FBQ2xCLFVBQVUsRUFBRSxHQUFHLEdBQUc7QUFDbEIsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxPQUFPLEdBQUcsSUFBSTtBQUN4QixVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEI7QUFDQSxNQUFNLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdkMsUUFBUSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQ3RCLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QjtBQUNBLFFBQVEsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNwRCxVQUFVLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN2QyxZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzdDLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDaEMsWUFBWSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNyQyxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsT0FBTyxNQUFNLEdBQUcsVUFBVSxFQUFFO0FBQ3BDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsVUFBVSxPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0QsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNoQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtBQUMzQixZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLEVBQUUsQ0FBQztBQUNuQixVQUFVLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQztBQUMvQyxNQUFNLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDO0FBQzdDLE1BQU0sTUFBTSxlQUFlLEdBQUcsOEJBQThCLENBQUM7QUFDN0QsTUFBTSxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUN0QyxNQUFNLElBQUksWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RSxNQUFNLElBQUksY0FBYyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUs7QUFDakMsVUFBVSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqQyxNQUFNLElBQUksUUFBUSxHQUFHLEVBQUU7QUFDdkIsVUFBVSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxPQUFPLFFBQVEsR0FBRyxNQUFNLEVBQUU7QUFDaEMsUUFBUSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRTtBQUNsRSxVQUFVLEVBQUUsUUFBUSxDQUFDO0FBQ3JCLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRTtBQUM1QixVQUFVLEdBQUc7QUFDYixZQUFZLEVBQUUsUUFBUSxDQUFDO0FBQ3ZCO0FBQ0EsWUFBWSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDcEMsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsQyxXQUFXLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQzNDO0FBQ0EsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckYsVUFBVSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEUsVUFBVSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFLFNBQVMsTUFBTSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzlDLFVBQVUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDOUIsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7QUFDbkUsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQ2hDLGNBQWMsTUFBTSxFQUFFLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSztBQUM3QyxjQUFjLEdBQUc7QUFDakIsY0FBYyxZQUFZLEVBQUUsSUFBSTtBQUNoQyxhQUFhLENBQUM7QUFDZCxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksYUFBYTtBQUMzQixjQUFjLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNqRDtBQUNBLFVBQVUsT0FBTyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQyxZQUFZLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEYsWUFBWSxhQUFhLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUM5QyxZQUFZLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9FLFlBQVksTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekY7QUFDQSxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QyxjQUFjLE1BQU07QUFDcEIsYUFBYSxNQUFNO0FBQ25CLGNBQWMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RDtBQUNBLGNBQWMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseURBQXlELEdBQUcsa0RBQWtELENBQUMsQ0FBQztBQUNoSixnQkFBZ0IsYUFBYSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcEQsZ0JBQWdCLE1BQU07QUFDdEIsZUFBZTtBQUNmLGFBQWE7QUFDYjtBQUNBLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUM5RSxVQUFVLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsVUFBVSxJQUFJLGFBQWEsR0FBRyxhQUFhLElBQUksT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDaEYsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELFdBQVc7QUFDWDtBQUNBLFVBQVUsUUFBUSxJQUFJLGFBQWEsQ0FBQztBQUNwQyxTQUFTLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMvRixVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEMsVUFBVSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbEUsU0FBUyxNQUFNO0FBQ2YsVUFBVSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRCxRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksV0FBVyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzFDLFVBQVUsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUMsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQixVQUFVLFlBQVksRUFBRSxJQUFJO0FBQzVCLFVBQVUsWUFBWSxFQUFFLElBQUk7QUFDNUIsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDckQsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQzVDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxJQUFJO0FBQ1osVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDckIsVUFBVSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDOUQsWUFBWSxNQUFNLEVBQUUsQ0FBQztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUMxRSxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUIsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDM0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUN2QixRQUFRLE9BQU8sV0FBVyxDQUFDO0FBQzNCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTCxJQUFJLFFBQVEsRUFBRSxTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDbkQsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLE1BQU0sTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsTUFBTSxJQUFJO0FBQ1YsUUFBUSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO0FBQzNDLFVBQVUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRDtBQUNBLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUMvQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkRBQTZELENBQUMsQ0FBQztBQUMzRixZQUFZLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEMsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELFVBQVUsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNoRCxVQUFVLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QyxZQUFZLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzVDLFlBQVksSUFBSSxFQUFFLElBQUk7QUFDdEIsWUFBWSxZQUFZLEVBQUUsSUFBSTtBQUM5QixXQUFXLENBQUMsQ0FBQztBQUNiLFVBQVUsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BDLFVBQVUsSUFBSSxJQUFJLENBQUM7QUFDbkI7QUFDQSxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDbkQsWUFBWSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMvQixjQUFjLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLGFBQWE7QUFDYjtBQUNBLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEM7QUFDQSxZQUFZLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2QyxjQUFjLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM1QjtBQUNBLGNBQWMsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDM0MsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLGdCQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxlQUFlO0FBQ2YsYUFBYTtBQUNiLFdBQVcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDNUMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7QUFDNUosY0FBYyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2pFLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQztBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsY0FBYyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNsQyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdkIsY0FBYyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hFLGFBQWE7QUFDYixXQUFXLE1BQU07QUFDakIsWUFBWSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3RFLFdBQVc7QUFDWDtBQUNBLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakM7QUFDQSxVQUFVLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFdBQVcsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbEQsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNsQixRQUFRLElBQUksQ0FBQyxZQUFZLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMzRCxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxZQUFZLEVBQUU7QUFDeEIsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNqRCxLQUFLO0FBQ0wsSUFBSSxRQUFRLEVBQUUsU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QztBQUNBLE1BQU0sSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDNUQsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLFVBQVUsRUFBRSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUU7QUFDbEUsTUFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQzFDLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ25ELE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksS0FBSyxFQUFFLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRTtBQUN4RCxNQUFNLElBQUksRUFBRSxHQUFHLFlBQVksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQ3pELE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUMxQjtBQUNBLE1BQU0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQ7QUFDQSxNQUFNLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtBQUNwQyxRQUFRLElBQUksVUFBVSxZQUFZLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQ3pFLFVBQVUsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDNUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtBQUM5QixRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQztBQUNBLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUU7QUFDbEMsUUFBUSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMvRSxPQUFPLE1BQU07QUFDYixRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUM3RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQzlDLFFBQVEsU0FBUyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekMsT0FBTyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixHQUFHLEtBQUssRUFBRTtBQUNsRSxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDeEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRixNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFRLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsUUFBUSxZQUFZLEVBQUUsSUFBSTtBQUMxQixPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFLElBQUksWUFBWSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDOUUsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRTtBQUM5QixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDeEMsVUFBVSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQyxZQUFZLE9BQU8sR0FBRyxDQUFDO0FBQ3ZCLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtBQUMvQyxRQUFRLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEYsT0FBTyxNQUFNO0FBQ2IsUUFBUSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNqRCxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEdBQUcsS0FBSyxFQUFFO0FBQ2hFLE1BQU0sTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUMzQyxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckU7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDOUMsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pELE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0MsTUFBTSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsa0RBQWtELENBQUMsQ0FBQztBQUN4RixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFRLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEIsUUFBUSxZQUFZLEVBQUUsSUFBSTtBQUMxQixPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3BDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUYsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0YsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsUUFBUSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLFlBQVksV0FBVyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDcEYsVUFBVSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUM1QyxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNCLGNBQWMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxRQUFRLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ3RFLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7QUFDbkMsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGVBQWUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUU7QUFDbkQsTUFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQzFDLFFBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3hELE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUU7QUFDOUMsTUFBTSxJQUFJO0FBQ1YsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ25CLFFBQVEsSUFBSSxFQUFFLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtBQUMvRCxVQUFVLE1BQU0sRUFBRSxDQUFDO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RCxRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN4RCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxhQUFhLEVBQUUsU0FBUyxrQkFBa0IsR0FBRztBQUNqRCxNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUN2QixLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkIsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDaEMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssZ0JBQWdCLEVBQUU7QUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUscUNBQXFDLENBQUMsQ0FBQztBQUNwRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUI7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3pDLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixRQUFRLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckM7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxVQUFVLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLFdBQVc7QUFDWDtBQUNBLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNsQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3RCxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNYLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLElBQUksT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxFQUFFLFNBQVMsR0FBRyxVQUFVLEVBQUU7QUFDcEMsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEYsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0M7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2YsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDOUI7QUFDQSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQixRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFRLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFTLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNyRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFNBQVMsTUFBTTtBQUNmLFVBQVUsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNqQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2YsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDakM7QUFDQSxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQixRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM5QixjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFO0FBQzlCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBUyxNQUFNLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRTtBQUNyQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFNBQVMsTUFBTTtBQUNmLFVBQVUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9HO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0QsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsUUFBUSxJQUFJLFVBQVUsS0FBSyxHQUFHLEVBQUU7QUFDaEMsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkksVUFBVSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFFBQVEsU0FBUyxnQkFBZ0IsQ0FBQztBQUN4QyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxVQUFVLFNBQVMsZ0JBQWdCLENBQUM7QUFDMUMsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLElBQUksUUFBUSxHQUFHLFNBQVMsZUFBZSxHQUFHO0FBQzFDLEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNoQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDakQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5RjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtDQUErQyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztBQUM1RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRTtBQUNsQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4QixNQUFNLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDakMsTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUIsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoQyxNQUFNLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHO0FBQ3ZCLElBQUksSUFBSSxRQUFRLEdBQUc7QUFDbkIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3hDLFFBQVEsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNoRSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakksT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE9BQU8sR0FBRztBQUNsQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDbEMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDekMsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDekI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMzQixRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDN0IsUUFBUSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQzNELFVBQVUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QyxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw2REFBNkQsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNyRyxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUscURBQXFELENBQUMsQ0FBQztBQUMvRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sT0FBTyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxZQUFZLEdBQUc7QUFDdkIsTUFBTSxPQUFPO0FBQ2IsUUFBUSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7QUFDL0IsUUFBUSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDN0IsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUI7QUFDQSxNQUFNLFlBQVksR0FBRyxZQUFZO0FBQ2pDLEVBQUUsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ2xDLElBQUksT0FBTyxLQUFLLFlBQVksV0FBVyxDQUFDLEdBQUcsSUFBSSxLQUFLLFlBQVksV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3SSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7QUFDM0MsSUFBSSxJQUFJLElBQUksWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN0QyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckMsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksRUFBRTtBQUNqQyxNQUFNLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQyxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QixHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxTQUFTLEdBQUc7QUFDM0IsSUFBSSxNQUFNLElBQUksR0FBRztBQUNqQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDbkYsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU07QUFDWixRQUFRLElBQUk7QUFDWixRQUFRLElBQUk7QUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2YsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdDLE1BQU0sTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELFFBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQ3BDLFVBQVUsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0QyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDOUIsTUFBTSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxNQUFNLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFRLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxXQUFXLFlBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNwRCxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDNUMsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSTtBQUNkLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekMsWUFBWSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkQsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3ZCLFlBQVksSUFBSSxFQUFFLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLENBQUMsRUFBRTtBQUNuRSxjQUFjLE1BQU0sRUFBRSxDQUFDO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3QyxZQUFZLGVBQWUsQ0FBQyxJQUFJLENBQUM7QUFDakMsY0FBYyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7QUFDN0IsY0FBYyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUc7QUFDekIsYUFBYSxDQUFDLENBQUM7QUFDZixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFO0FBQ3ZELFVBQVUsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzNELFVBQVUsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDdkM7QUFDQSxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsWUFBWSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxZQUFZLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRTtBQUNyRSxjQUFjLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUN0QyxjQUFjLGVBQWUsQ0FBQyxJQUFJLENBQUM7QUFDbkMsZ0JBQWdCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztBQUNuQyxnQkFBZ0IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO0FBQy9CLGVBQWUsQ0FBQyxDQUFDO0FBQ2pCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksZ0JBQWdCLEVBQUU7QUFDaEMsWUFBWSxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzdDLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFdBQVcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7QUFDbEMsUUFBUSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdEU7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakUsVUFBVSxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxVQUFVLElBQUksSUFBSSxZQUFZLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDL0MsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDMUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoRTtBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksWUFBWSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNoQztBQUNBLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRTtBQUMvQixFQUFFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1o7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDWCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQyxDQUFDO0FBQ0Q7QUFDQSxNQUFNLE1BQU0sQ0FBQztBQUNiLEVBQUUsV0FBVyxDQUFDO0FBQ2QsSUFBSSxLQUFLO0FBQ1QsSUFBSSxJQUFJO0FBQ1IsSUFBSSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJLFlBQVksR0FBRyxLQUFLO0FBQ3hCLEdBQUcsRUFBRTtBQUNMLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxZQUFZLFdBQVcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO0FBQ3hFLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxJQUFJO0FBQ1IsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDekQsUUFBUSxNQUFNLENBQUMsQ0FBQztBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFO0FBQ2pDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSSxJQUFJLFlBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUN6QyxNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDdEIsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFVBQVUsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRyxZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDcEMsY0FBYyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3RFLGFBQWE7QUFDYjtBQUNBLFlBQVksT0FBTyxLQUFLLENBQUM7QUFDekIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkIsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RDtBQUNBLFVBQVUsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqRyxZQUFZLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDakYsY0FBYyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDM0IsY0FBYyxTQUFTO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkMsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekI7QUFDQSxZQUFZLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRCxjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNwQyxjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFDM0UsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDM0QsWUFBWSxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JGLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEI7QUFDQSxRQUFRO0FBQ1IsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2pGLFFBQVEsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxlQUFlLEVBQUU7QUFDM0IsUUFBUSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUNsQixVQUFVLENBQUMsR0FBRyxJQUFJO0FBQ2xCLFVBQVUsS0FBSyxHQUFHLElBQUk7QUFDdEIsVUFBVSxFQUFFLEdBQUcsR0FBRztBQUNsQixVQUFVLEVBQUUsR0FBRyxHQUFHO0FBQ2xCLFVBQVUsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzVCLFVBQVUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHO0FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxFQUFFO0FBQ1YsUUFBUSxVQUFVLENBQUM7QUFDbkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLDZDQUE2QyxDQUFDLENBQUM7QUFDdEY7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDcEQsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxVQUFVLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkUsWUFBWSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDN0QsY0FBYyxTQUFTO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDckUsY0FBYyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDM0IsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO0FBQ25DLFlBQVksTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVDO0FBQ0EsWUFBWSxJQUFJLE9BQU8sWUFBWSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekYsY0FBYyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGFBQWE7QUFDYixXQUFXLE1BQU07QUFDakIsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0VBQWtFLENBQUMsQ0FBQztBQUNoRyxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEdBQUcsaUVBQWlFLENBQUMsQ0FBQztBQUMxSDtBQUNBLE1BQU0sSUFBSSxVQUFVLEVBQUU7QUFDdEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsMERBQTBELENBQUMsQ0FBQztBQUNwRixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVCLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsTUFBTSxTQUFTLEVBQUUsQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsNEJBQTRCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLElBQUksTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNoQyxJQUFJLElBQUksUUFBUSxHQUFHLEtBQUs7QUFDeEIsUUFBUSxDQUFDO0FBQ1QsUUFBUSxZQUFZLENBQUM7QUFDckI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3RCLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUM5QixRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUM7QUFDQSxVQUFVLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUNoQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFdBQVcsTUFBTTtBQUNqQixZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFFBQVEsRUFBRTtBQUNwQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEdBQUcsbURBQW1ELENBQUMsQ0FBQztBQUMvRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFNLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUU7QUFDM0MsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJO0FBQ3RCLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQixJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUMzQyxNQUFNLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRTtBQUN4QixRQUFRLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDcEMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxPQUFPLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRCxVQUFVLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4QixVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDakMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDdkIsVUFBVSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEIsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsRUFBRTtBQUNuQyxVQUFVLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQSxVQUFVLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzFELFlBQVksTUFBTTtBQUNsQixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxxQ0FBcUMsR0FBRyxtREFBbUQsQ0FBQyxDQUFDO0FBQ25ILE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLE1BQU0sT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEMsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGlDQUFpQyxDQUFDLE1BQU0sRUFBRTtBQUM1QyxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQUNwQixJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUMzQyxNQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNyQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsc0NBQXNDLEdBQUcsbURBQW1ELENBQUMsQ0FBQztBQUNwSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixNQUFNLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuQixJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxFQUFFLENBQUM7QUFDWDtBQUNBLElBQUksT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDM0MsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsUUFBUSxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDOUIsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxlQUFlLEVBQUU7QUFDbkMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLElBQUksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNoQyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNuQjtBQUNBLElBQUksT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMzRixNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQy9DLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsc0NBQXNDLENBQUMsQ0FBQztBQUM1RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CO0FBQ0EsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDN0MsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztBQUMxRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxVQUFVLENBQUM7QUFDbkI7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDL0IsS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN0QyxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMvQyxRQUFRLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3JDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDaEMsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNmO0FBQ0EsSUFBSSxJQUFJLFVBQVUsS0FBSyxXQUFXLElBQUksVUFBVSxLQUFLLEtBQUssRUFBRTtBQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsS0FBSyxNQUFNLElBQUksVUFBVSxLQUFLLGVBQWUsSUFBSSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxLQUFLLE1BQU0sSUFBSSxVQUFVLEtBQUssZ0JBQWdCLElBQUksVUFBVSxLQUFLLEtBQUssRUFBRTtBQUN4RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25FLElBQUksSUFBSSxRQUFRLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksTUFBTSxHQUFHLG1CQUFtQixJQUFJLFVBQVUsR0FBRyxrQkFBa0IsRUFBRTtBQUN6RSxNQUFNLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoRCxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMxQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDO0FBQzdDLE1BQU0sTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7QUFDcEMsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUUsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsTUFBTSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDcEMsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFFBQVEsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNCLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxlQUFlLEVBQUU7QUFDekIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUNoQyxNQUFNLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLElBQUksT0FBTyxXQUFXLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO0FBQ3pDLElBQUksTUFBTTtBQUNWLE1BQU0sTUFBTTtBQUNaLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25CLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDMUIsSUFBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUNuQyxJQUFJLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDN0M7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3BDLE1BQU0sTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVELE1BQU0sTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7QUFDNUQ7QUFDQSxNQUFNLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRTtBQUMzQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLE1BQU0sT0FBTyxHQUFHLEdBQUcsVUFBVSxFQUFFO0FBQy9CLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxlQUFlLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0UsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNkLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksZUFBZSxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDNUIsVUFBVSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7QUFDcEMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM5QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMzQixJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ25DLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRTtBQUMzRSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekc7QUFDQSxNQUFNLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMvRTtBQUNBLE1BQU0sSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELFVBQVUsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyRCxVQUFVLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4RTtBQUNBLFVBQVUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsVUFBVSxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUU7QUFDaEMsWUFBWSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLFlBQVksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRTtBQUMxRCxjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsa0NBQWtDLENBQUMsQ0FBQztBQUNuSSxZQUFZLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDdkMsWUFBWSxNQUFNO0FBQ2xCLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUM5QixVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDcEUsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztBQUM1QixNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUQ7QUFDQSxJQUFJLElBQUksZUFBZSxFQUFFO0FBQ3pCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDL0IsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNqQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw0Q0FBNEMsR0FBRywrQkFBK0IsQ0FBQyxDQUFDO0FBQ3hHLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUM3QjtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVELFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzlDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEI7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxFQUFFO0FBQzVELFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLFFBQVEsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMzQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDaEQsSUFBSSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQzFEO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNuRCxRQUFRLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2RDtBQUNBLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDcEIsVUFBVSxPQUFPLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoSCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQ2xELFFBQVEsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUNwQixVQUFVLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN6QyxZQUFZLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BELFdBQVc7QUFDWDtBQUNBLFVBQVUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNILFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQ2xELFFBQVEsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELFFBQVEsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDbEQsUUFBUSxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckQsUUFBUSxPQUFPLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxlQUFlLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtBQUN0RCxRQUFRLGVBQWUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyRCxRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLGdCQUFnQixJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7QUFDdkQsUUFBUSxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO0FBQ3ZELFFBQVEsZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELFFBQVEsT0FBTyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLGlCQUFpQixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDdkQsUUFBUSxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckQsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7QUFDbEMsUUFBUSxlQUFlLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsUUFBUSxPQUFPLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkYsT0FBTztBQUNQO0FBQ0EsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7QUFDNUQsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDakIsTUFBTSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDMUQsUUFBUSxNQUFNLEVBQUUsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN0QyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0eEI7QUFDQSxTQUFTLFVBQVUsQ0FBQyxFQUFFLEVBQUU7QUFDeEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUNoQyxJQUFJLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUM1RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFB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LENBQUMsQ0FBQyxDQUFDO0FBQ2xCLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVCLEtBQUs7QUFDTCxJQUFJLFFBQVEsRUFBRSxTQUFTLHFCQUFxQixHQUFHO0FBQy9DLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLE1BQU0sT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDM0MsTUFBTSxJQUFJLEdBQUc7QUFDYixVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNsQixRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDM0I7QUFDQSxRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO0FBQ3JELFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN2QztBQUNBLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBTSxF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LEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQ7QUFDQSxJQUFJLFdBQVcsR0FBRyxTQUFTLGtCQUFrQixHQUFHO0FBQ2hELEVBQUUsSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFHLEVBQUUsSUFBSSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzdULEVBQUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbFQsRUFBRSxJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOWlKLEVBQUUsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL1U7QUFDQSxFQUFFLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7QUFDekMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM1QixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLElBQUksRUFBRTtBQUMvQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsNENBQTRDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3ZDLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksRUFBRTtBQUNwQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsK0JBQStCLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRTtBQUNyRSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdkIsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ2pDLElBQUksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLE9BQU8sUUFBUSxHQUFHLElBQUksRUFBRTtBQUM1QixNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUNwRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztBQUNyQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO0FBQ3RFLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QixJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDakMsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLENBQUM7QUFDVjtBQUNBLElBQUksT0FBTyxRQUFRLEdBQUcsTUFBTSxFQUFFO0FBQzlCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDdEMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUMvQixNQUFNLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRCxJQUFJLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDN0IsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtBQUMzQyxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDdkMsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLCtCQUErQixDQUFDLE9BQU8sRUFBRTtBQUNqRyxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDM0IsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRTtBQUMvQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUMzQixJQUFJLElBQUksS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDeEYsTUFBTSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ3hDLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2xDLFVBQVUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0FBQ0EsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxZQUFZLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLFdBQVc7QUFDWDtBQUNBLFVBQVUsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMvQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN2QyxXQUFXO0FBQ1g7QUFDQSxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLHFCQUFxQixHQUFHO0FBQ3JFLElBQUksSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQ3BCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QixJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNqQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNkO0FBQ0EsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUN0QyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDeEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN4RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUN0QyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDeEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEI7QUFDQSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN4RSxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLEtBQUssTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM3RSxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFDckYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7QUFDNUMsWUFBWSxHQUFHLEdBQUcsWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUMxQixRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ25DLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO0FBQ3JDLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxZQUFZLENBQUM7QUFDckIsSUFBSSxJQUFJLGFBQWEsQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25CLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNyQyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztBQUN2QyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsTUFBTSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckUsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM1QyxRQUFRLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN6RSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixNQUFNLElBQUksS0FBSyxHQUFHLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDN0MsTUFBTSxJQUFJLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxNQUFNLElBQUksVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUM7QUFDdkM7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRTtBQUN4QixRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN6QixVQUFVLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNyQixTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2hDLFVBQVUsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixTQUFTLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2hDLFVBQVUsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixTQUFTLE1BQU07QUFDZixVQUFVLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEMsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDakU7QUFDQSxRQUFRLE9BQU8sWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFVBQVUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNyRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRixLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7QUFDeEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDaEM7QUFDQSxJQUFJLE9BQU8sSUFBSSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3QztBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ3ZCLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUM5QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hDLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUNuQixNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDckIsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7QUFDMUI7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNyQixRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQztBQUMxQztBQUNBLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRTtBQUM5QixRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QyxRQUFRLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUMzQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsQztBQUNBLElBQUksZUFBZSxHQUFHLFNBQVMsc0JBQXNCLEdBQUc7QUFDeEQsRUFBRSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNyRCxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEU7QUFDQSxJQUFJLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRTtBQUN4QixNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLFNBQVMsR0FBRyxFQUFFLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9ELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDMUMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDekMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN6QyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRTtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyw0QkFBNEIsR0FBRztBQUNwRixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDakMsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3pDLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDNUQsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pCLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNsQixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQztBQUNsQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNkLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzVCLE1BQU0sSUFBSSxhQUFhLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEssUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDbkMsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDZixVQUFVLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDM0IsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxRQUFRLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUMsVUFBVSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUU7QUFDN0IsWUFBWSxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFdBQVc7QUFDWDtBQUNBLFVBQVUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxVQUFVLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDekIsVUFBVSxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsVUFBVSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDNUIsWUFBWSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO0FBQ2xDLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLDJCQUEyQixHQUFHO0FBQ2xGLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNqQyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDakMsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZDLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0MsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN6QyxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQzVELElBQUksSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3pFO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDO0FBQ1QsUUFBUSxDQUFDLEdBQUcsWUFBWTtBQUN4QixRQUFRLEVBQUU7QUFDVixRQUFRLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxRQUFRLFNBQVM7QUFDckIsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRixVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUM3QyxVQUFVLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDMUMsVUFBVSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNyQyxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFH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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDcnlFLEVBQUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdYLEVBQUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwNEksRUFBRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDejRDLEVBQUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzl3RCxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FB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RUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNQLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ04sRUFBRSxJQUFJLG1CQUFtQixHQUFHLENBQUM7QUFDN0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssQ0FBQztBQUNOLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNYLEtBQUssRUFBRTtBQUNQLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDWCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxFQUFFO0FBQ1AsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssRUFBRTtBQUNQLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixLQUFLLEVBQUU7QUFDUCxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNWLEtBQUssRUFBRTtBQUNQLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxDQUFDO0FBQ04sR0FBRyxFQUFFO0FBQ0wsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNYLE1BQU0sQ0FBQyxF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RSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pJLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkwsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0SCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hLLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeFMsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0VCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsWixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdmEsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RaLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEVBQUU7QUFDYixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuUCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDblAsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xQLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEVBQUU7QUFDYixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxFQUFFO0FBQ2IsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdQLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTTtBQUNOLFFBQVEsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFD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LFdBQVcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTTtBQUNOLFFBQVEsTUFBTSxJQUFJLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxVQUFVLENBQUMsU0FBUztBQUNoQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2IsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNiLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxXQUFXLEdBQUcscUJBQXFCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuRixRQUFRLFdBQVcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTTtBQUNOLFFBQVEsTUFBTSxJQUFJLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxVQUFVLENBQUMsU0FBUztBQUNoQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2IsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNiLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRSxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxXQUFXLEdBQUcscUJBQXFCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuRixRQUFRLFdBQVcsRUFBRSxDQUFDO0FBQ3RCLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTTtBQUNOLFFBQVEsTUFBTSxJQUFJLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFD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QztBQUNULEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFB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N0MsTUFBTSxFQUFFLEdBQUcsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzdDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN0QyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN2QjtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDcEQsUUFBUSxDQUFDLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtBQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsU0FBUyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUM5QixVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDNUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkQsUUFBUSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxRQUFRLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsUUFBUSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxRQUFRLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN0QyxNQUFNLEVBQUUsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2QsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2QsTUFBTSxFQUFFLEdBQUcsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9DLE1BQU0sRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDZCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDZCxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDckMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkI7QUFDQSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQzdCLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNqQixPQUFPLE1BQU07QUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUM3QixRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNmLE9BQU8sTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDN0IsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLE9BQU8sTUFBTTtBQUNiLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQzdCLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNqQixPQUFPLE1BQU07QUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUM3QixRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNmLE9BQU8sTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDN0IsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLE9BQU8sTUFBTTtBQUNiLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQzdCLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNqQixPQUFPLE1BQU07QUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsT0FBTyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUM3QixRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDakIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUNoRCxJQUFJLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFDaEQsSUFBSSxJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO0FBQ3BELElBQUksSUFBSSxpQkFBaUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQztBQUNBLElBQUksS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNuRSxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDbkUsUUFBUSxJQUFJLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pFLFFBQVEsa0JBQWtCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEdBQUcsVUFBVSxFQUFFO0FBQ3ZFLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDL0Q7QUFDQSxJQUFJLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRTtBQUM5QixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0RTtBQUNBLElBQUksSUFBSSxhQUFhLElBQUksTUFBTSxJQUFJLGFBQWEsSUFBSSxNQUFNLEVBQUU7QUFDNUQsTUFBTSxPQUFPO0FBQ2IsUUFBUSxPQUFPLEVBQUUsSUFBSTtBQUNyQixRQUFRLE1BQU0sRUFBRSxhQUFhO0FBQzdCLFFBQVEsTUFBTSxFQUFFLFVBQVU7QUFDMUIsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsSUFBSSxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUU7QUFDMUQsTUFBTSxJQUFJLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUM5QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPO0FBQ1gsTUFBTSxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDekMsTUFBTSxNQUFNLEVBQUUsU0FBUztBQUN2QixNQUFNLE1BQU0sRUFBRSxNQUFNO0FBQ3BCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLFNBQVMsR0FBRztBQUN4QixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSTtBQUN6QixLQUFLLEdBQUcsRUFBRSxFQUFFO0FBQ1osTUFBTSxTQUFTLGFBQWEsR0FBRztBQUMvQixRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsUUFBUSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxTQUFTLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQzlDLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHVEQUF1RCxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4RyxVQUFVLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3hDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMvQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDeEMsUUFBUSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxRQUFRLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUQsVUFBVSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxVQUFVLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hHLFVBQVUsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckcsVUFBVSxJQUFJLG1CQUFtQixHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzlELFVBQVUsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNsRSxVQUFVLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLHFCQUFxQixJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLFVBQVUsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pFLFVBQVUsU0FBUyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDbEQsVUFBVSxTQUFTLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUN0RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLFFBQVEsS0FBSyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDNUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxJQUFJLEtBQUssRUFBRSxhQUFhLENBQUM7QUFDL0IsTUFBTSxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLElBQUksZUFBZSxHQUFHLEVBQUU7QUFDOUIsVUFBVSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRSxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbEI7QUFDQSxNQUFNLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtBQUNqQyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RCxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbEI7QUFDQSxNQUFNLFVBQVUsRUFBRSxPQUFPLFVBQVUsS0FBSyxNQUFNLEVBQUU7QUFDaEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxRQUFRLFVBQVU7QUFDMUIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTTtBQUNyQixZQUFZLElBQUksT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsWUFBWSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7QUFDdkMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoSSxnQkFBZ0IsSUFBSSxHQUFHO0FBQ3ZCLGtCQUFrQixPQUFPLEVBQUU7QUFDM0Isb0JBQW9CLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLG9CQUFvQixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyQyxtQkFBbUI7QUFDbkIsa0JBQWtCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzFDLGtCQUFrQixRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hELGtCQUFrQixRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQzFELGtCQUFrQixVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxrQkFBa0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDMUMsa0JBQWtCLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckYsaUJBQWlCLENBQUM7QUFDbEIsZUFBZTtBQUNmLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO0FBQ3ZDLGNBQWMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDbkksZ0JBQWdCLEtBQUssR0FBRztBQUN4QixrQkFBa0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RCxrQkFBa0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RCxrQkFBa0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUN2RCxrQkFBa0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDNUMsaUJBQWlCLENBQUM7QUFDbEIsZUFBZTtBQUNmLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksTUFBTSx3QkFBd0IsR0FBRyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZGLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4QixZQUFZLElBQUkscUJBQXFCLEdBQUcsd0JBQXdCLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5RSxZQUFZLElBQUksQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsWUFBWSxPQUFPLE1BQU0sR0FBRyxxQkFBcUIsRUFBRTtBQUNuRCxjQUFjLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDekQsY0FBYyxJQUFJLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRDtBQUNBLGNBQWMsSUFBSSxxQkFBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BELGdCQUFnQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxrQkFBa0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELGlCQUFpQjtBQUNqQixlQUFlLE1BQU0sSUFBSSxxQkFBcUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNELGdCQUFnQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxrQkFBa0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxrQkFBa0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0Usa0JBQWtCLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUIsaUJBQWlCO0FBQ2pCLGVBQWUsTUFBTTtBQUNyQixnQkFBZ0IsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ2hFLGVBQWU7QUFDZjtBQUNBLGNBQWMsa0JBQWtCLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3pFLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEIsVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUN0QixVQUFVLEtBQUssTUFBTTtBQUNyQixZQUFZLElBQUksS0FBSyxFQUFFO0FBQ3ZCLGNBQWMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3ZFLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4QixZQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkIsWUFBWSxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDbkQsWUFBWSxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsS0FBSyxNQUFNLENBQUM7QUFDdEQsWUFBWSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFlBQVksTUFBTSxZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRSxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEIsWUFBWSxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUM7QUFDM0QsWUFBWSxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0UsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFlBQVksS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDbEMsWUFBWSxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNwQyxZQUFZLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoRCxnQkFBZ0IsV0FBVyxDQUFDO0FBQzVCLFlBQVksSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUN4QixnQkFBZ0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsY0FBYyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLGNBQWMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUMsY0FBYyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLGNBQWMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN4QyxnQkFBZ0IsQ0FBQztBQUNqQixnQkFBZ0IsQ0FBQztBQUNqQixnQkFBZ0IsY0FBYyxFQUFFLEdBQUc7QUFDbkMsZ0JBQWdCLGlCQUFpQixFQUFFLElBQUk7QUFDdkMsZUFBZSxDQUFDLENBQUM7QUFDakIsY0FBYyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsY0FBYyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzFCLGFBQWE7QUFDYjtBQUNBLFlBQVksS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUIsWUFBWSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM5QixZQUFZLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksTUFBTSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RSxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEI7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHO0FBQzVDLGNBQWMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNwRCxjQUFjLElBQUksV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELGNBQWMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsY0FBYyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNqRCxnQkFBZ0IsYUFBYSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0QsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLGFBQWEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRTtBQUNBLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDNUQsZ0JBQWdCLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxjQUFjLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxlQUFlLEdBQUcsZUFBZSxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN2SixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssTUFBTTtBQUNyQixZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEIsWUFBWSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RSxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxNQUFNLGNBQWMsR0FBRyxFQUFFLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDMUUsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFlBQVksSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDaEQsWUFBWSxJQUFJLFVBQVUsR0FBRyxFQUFFO0FBQy9CLGdCQUFnQixTQUFTLENBQUM7QUFDMUI7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELGNBQWMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDM0MsY0FBYyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELGNBQWMsU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0QsY0FBYyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QyxjQUFjLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLGNBQWMsU0FBUyxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGNBQWMsU0FBUyxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLFlBQVksSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0MsWUFBWSxJQUFJLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsWUFBWSxJQUFJO0FBQ2hCLGNBQWMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLEdBQUcsRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2pNLGNBQWMsTUFBTSxJQUFJLFNBQVMsQ0FBQztBQUNsQyxhQUFhLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDekIsY0FBYyxJQUFJLEVBQUUsWUFBWSxjQUFjLEVBQUU7QUFDaEQsZ0JBQWdCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDeEMsa0JBQWtCLFlBQVksRUFBRSxFQUFFLENBQUMsU0FBUztBQUM1QyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGVBQWUsTUFBTSxJQUFJLEVBQUUsWUFBWSxjQUFjLEVBQUU7QUFDdkQsZ0JBQWdCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7QUFDekYsZ0JBQWdCLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTSxFQUFFLENBQUM7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLE1BQU07QUFDckIsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3ZDLGNBQWMsTUFBTSxFQUFFLENBQUM7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVTtBQUNWLFlBQVksTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsWUFBWSxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFO0FBQzFELGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHdEQUF3RCxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqSCxjQUFjLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQzdDLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHNEQUFzRCxHQUFHLHlDQUF5QyxDQUFDLENBQUM7QUFDbEksY0FBYyxNQUFNLFVBQVUsQ0FBQztBQUMvQixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sSUFBSSxTQUFTLENBQUMsb0NBQW9DLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLFNBQVM7QUFDVDtBQUNBLFFBQVEsVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0QsUUFBUSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFFBQVEsU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBUSxJQUFJLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM3RTtBQUNBLFFBQVEsSUFBSSxpQkFBaUIsRUFBRTtBQUMvQixVQUFVLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUMxRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQzdCLFVBQVUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO0FBQ2hDLFVBQVUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7QUFDdEQsVUFBVSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSTtBQUMxQyxVQUFVLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJO0FBQzFDLFVBQVUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxhQUFhO0FBQ2hELFVBQVUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxlQUFlO0FBQ3BELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ2xELE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsR0FBRyxLQUFLLEVBQUU7QUFDaEUsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUs7QUFDckMsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEMsTUFBTSxJQUFJLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDO0FBQ3pFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDaEIsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUNqQixNQUFNLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ2pELE1BQU0sSUFBSSxVQUFVLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7QUFDdEQsTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sSUFBSSxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRCxNQUFNLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxNQUFNLElBQUksbUJBQW1CLENBQUM7QUFDOUI7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDcEQsUUFBUSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDcEQsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDbEMsUUFBUSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksZUFBZSxLQUFLLG1CQUFtQixFQUFFO0FBQ3JELFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7QUFDeEMsWUFBWSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0QsV0FBVztBQUNYO0FBQ0EsVUFBVSxtQkFBbUIsR0FBRyxlQUFlLENBQUM7QUFDaEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQztBQUN0QyxVQUFVLEtBQUssR0FBRyxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRTtBQUNBLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksTUFBTSxJQUFJLGFBQWEsQ0FBQztBQUNwQyxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzVDO0FBQ0EsTUFBTSxJQUFJLENBQUMsV0FBVyxJQUFJLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDN0QsUUFBUSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxTQUFTLEVBQUU7QUFDckIsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBRztBQUNyQyxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNsRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSx3QkFBd0IsR0FBRztBQUNuQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN0QixRQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtBQUNwQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLEVBQUU7QUFDeEMsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtBQUNoSSxVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLGdCQUFnQixFQUFFLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRTtBQUNyRCxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3ZELE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkIsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsR0FBRyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFDaGEsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLElBQUksbUJBQW1CLEdBQUcsRUFBRSxHQUFHLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xhLFFBQVEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxHQUFHLG9CQUFvQixHQUFHLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hhLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxLQUFLO0FBQ0wsSUFBSSxrQkFBa0IsRUFBRSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRTtBQUN6RCxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLGlCQUFpQixFQUFFLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3ZELE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLHVCQUF1QixHQUFHLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN4YSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLG9CQUFvQixHQUFHLENBQUMsR0FBRyxzQkFBc0IsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQixHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUN4YSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQixHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQixHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUM7QUFDemEsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDO0FBQ1osTUFBTSxLQUFLO0FBQ1gsTUFBTSxNQUFNO0FBQ1osTUFBTSxRQUFRLEdBQUcsS0FBSztBQUN0QixNQUFNLFdBQVcsR0FBRyxLQUFLO0FBQ3pCLEtBQUssRUFBRTtBQUNQLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtBQUNsQyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUN0RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRTtBQUNoRCxRQUFRLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDckMsUUFBUSxJQUFJLE9BQU8sR0FBRyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxVQUFVLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUN4QyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUN4QyxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUN4QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtBQUM1RSxRQUFRLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFO0FBQzNDLFFBQVEsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7QUFDM0MsVUFBVSxJQUFJLFFBQVEsRUFBRTtBQUN4QixZQUFZLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFdBQVc7QUFDWDtBQUNBLFVBQVUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsU0FBUyxNQUFNLElBQUksUUFBUSxFQUFFO0FBQzdCLFVBQVUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDOUI7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxNQUFNLFNBQVMsR0FBRyxTQUFTLGdCQUFnQixHQUFHO0FBQzlDLEVBQUUsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNqRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUN0RCxJQUFJLEdBQUcsRUFBRSxTQUFTLGVBQWUsR0FBRztBQUNwQyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLElBQUk7QUFDdEIsR0FBRyxDQUFDLENBQUM7QUFDTDtBQUNBLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxTQUFTLEVBQUUsRUFBRSxDQUFDO0FBQzdEO0FBQ0EsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxZQUFZO0FBQzlDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDakMsSUFBSSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ25DLElBQUksTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztBQUNyRCxJQUFJLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzVDLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7QUFDL0MsUUFBUSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztBQUM3QyxRQUFRLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7QUFDM0MsUUFBUSxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxHQUFHLFFBQVEsSUFBSSxlQUFlLENBQUM7QUFDMUUsUUFBUSxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsZUFBZSxDQUFDO0FBQ25ELFFBQVEsTUFBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLGVBQWUsQ0FBQztBQUN4RDtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxVQUFVLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUNoRixVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzNDLFVBQVUsV0FBVyxJQUFJLFdBQVcsQ0FBQztBQUNyQyxVQUFVLFlBQVksSUFBSSxVQUFVLENBQUM7QUFDckMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDekIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDcEIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUM5QjtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsTUFBTSxRQUFRLFNBQVMsS0FBSyxDQUFDLGFBQWEsQ0FBQztBQUMzQyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDbkIsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLElBQUksUUFBUSxHQUFHLFNBQVMsZUFBZSxHQUFHO0FBQzFDLEVBQUUsSUFBSSxnQkFBZ0IsR0FBRztBQUN6QixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUNULElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQ3RCLElBQUksSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDdkIsSUFBSSxLQUFLLEVBQUUsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RDtBQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQzNCLFFBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRCxRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksUUFBUSxHQUFHLENBQUM7QUFDdEIsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQjtBQUNBLE1BQU0sT0FBTyxRQUFRLEdBQUcsTUFBTSxFQUFFO0FBQ2hDLFFBQVEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRCxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsUUFBUSxJQUFJLFVBQVUsQ0FBQztBQUMvQjtBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVILFVBQVUsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUN4QixVQUFVLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDMUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDeEIsVUFBVSxJQUFJLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDaEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxVQUFVLEVBQUU7QUFDL0IsVUFBVSxNQUFNLElBQUksUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFVBQVUsR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzNDLFFBQVEsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxRQUFRLElBQUk7QUFDcEIsVUFBVSxLQUFLLFVBQVU7QUFDekIsWUFBWSxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxVQUFVO0FBQ3pCLFlBQVksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsWUFBWSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDOUIsY0FBYyxJQUFJLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLGNBQWMsUUFBUSxVQUFVO0FBQ2hDLGdCQUFnQixLQUFLLEVBQUUsQ0FBQztBQUN4QixnQkFBZ0IsS0FBSyxFQUFFLENBQUM7QUFDeEIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixrQkFBa0IsTUFBTTtBQUN4QjtBQUNBLGdCQUFnQjtBQUNoQixrQkFBa0IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQ3RFLGtCQUFrQixNQUFNO0FBQ3hCLGVBQWU7QUFDZixhQUFhLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDJCQUEyQixDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLFVBQVU7QUFDekIsWUFBWSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQ3hFLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxVQUFVO0FBQ3pCLFlBQVksSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUM1RSxjQUFjLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3ZELGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxVQUFVLENBQUM7QUFDMUIsVUFBVSxLQUFLLFVBQVUsQ0FBQztBQUMxQixVQUFVLEtBQUssVUFBVSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxVQUFVLENBQUM7QUFDMUIsVUFBVSxLQUFLLFVBQVU7QUFDekIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVTtBQUNWLFlBQVksSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEgsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekYsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxjQUFjLEVBQUU7QUFDNUIsVUFBVSxRQUFRLElBQUksVUFBVSxDQUFDO0FBQ2pDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksb0JBQW9CLEVBQUUsU0FBUyw2QkFBNkIsQ0FBQyxNQUFNLEVBQUU7QUFDekUsTUFBTSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDckM7QUFDQSxNQUFNLE9BQU8sT0FBTyxJQUFJLENBQUMsRUFBRTtBQUMzQixRQUFRLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM5QixRQUFRLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMxQztBQUNBLFFBQVEsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQzdCLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsVUFBVSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdDLFVBQVUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxVQUFVLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUMsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3hDLFVBQVUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLFVBQVUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFVBQVUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDdEMsVUFBVSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFVBQVUsT0FBTztBQUNqQixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7QUFDL0QsS0FBSztBQUNMLElBQUksZUFBZSxFQUFFLFNBQVMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDekUsTUFBTSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDdkIsTUFBTSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDL0I7QUFDQSxNQUFNLElBQUk7QUFDVixRQUFRLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM3QjtBQUNBLFFBQVEsT0FBTyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUNuQyxVQUFVLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLFVBQVUsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksTUFBTSxHQUFHLENBQUM7QUFDeEIsY0FBYyxDQUFDO0FBQ2YsY0FBYyxJQUFJO0FBQ2xCLGNBQWMsTUFBTTtBQUNwQixjQUFjLFNBQVM7QUFDdkIsY0FBYyxlQUFlO0FBQzdCLGNBQWMsSUFBSSxDQUFDO0FBQ25CO0FBQ0EsVUFBVSxRQUFRLElBQUk7QUFDdEIsWUFBWSxLQUFLLE1BQU07QUFDdkIsY0FBYyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN4QyxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRSxjQUFjLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMzQixjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekUsY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxjQUFjLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLGNBQWMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDM0UsY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxjQUFjLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGNBQWMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUUsY0FBYyxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckYsY0FBYyxHQUFHLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztBQUN6QyxjQUFjLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxjQUFjLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2hDO0FBQ0EsY0FBYyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hELGdCQUFnQixJQUFJLFNBQVMsR0FBRztBQUNoQyxrQkFBa0IsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDO0FBQ2pELGtCQUFrQixRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsa0JBQWtCLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxrQkFBa0IsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLGlCQUFpQixDQUFDO0FBQ2xCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLGdCQUFnQiw0QkFBNEIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsZUFBZTtBQUNmO0FBQ0EsY0FBYyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQyxjQUFjLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzlDLGNBQWMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RELGNBQWMsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDL0IsY0FBYyxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMvQixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRSxjQUFjLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMzQixjQUFjLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLGNBQWMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsY0FBYyxRQUFRLElBQUksR0FBRyxJQUFJO0FBQ2pDLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsa0JBQWtCLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDaEMsa0JBQWtCLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDekMsa0JBQWtCLE1BQU07QUFDeEI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLGtCQUFrQixTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLGtCQUFrQixlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzFDLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0EsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixrQkFBa0IsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxrQkFBa0IsZUFBZSxHQUFHLElBQUksQ0FBQztBQUN6QyxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBLGdCQUFnQjtBQUNoQixrQkFBa0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNoRSxlQUFlO0FBQ2Y7QUFDQSxjQUFjLEdBQUcsQ0FBQyxjQUFjLEdBQUcsU0FBUyxLQUFLLENBQUMsQ0FBQztBQUNuRCxjQUFjLEdBQUcsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQ3BELGNBQWMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3hDLGNBQWMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLGNBQWMsT0FBTyxDQUFDLEdBQUcsTUFBTSxHQUFHLFFBQVEsRUFBRTtBQUM1QyxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQy9CO0FBQ0EsZ0JBQWdCLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNyQyxrQkFBa0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsa0JBQWtCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLGlCQUFpQixNQUFNO0FBQ3ZCLGtCQUFrQixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Msa0JBQWtCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLGVBQWU7QUFDZjtBQUNBLGNBQWMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDbEM7QUFDQSxjQUFjLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtBQUN0QyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUMsZ0JBQWdCLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUM3QyxlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRSxjQUFjLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMzQixjQUFjLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLGNBQWMsSUFBSSxJQUFJLENBQUM7QUFDdkI7QUFDQSxjQUFjLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQzFDLGdCQUFnQixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0I7QUFDQSxjQUFjLFFBQVEsSUFBSSxHQUFHLElBQUk7QUFDakMsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixrQkFBa0IsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNoQyxrQkFBa0IsZUFBZSxHQUFHLElBQUksQ0FBQztBQUN6QyxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsa0JBQWtCLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakMsa0JBQWtCLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDMUMsa0JBQWtCLE1BQU07QUFDeEI7QUFDQSxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLGtCQUFrQixTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLGtCQUFrQixlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0EsZ0JBQWdCO0FBQ2hCLGtCQUFrQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hFLGVBQWU7QUFDZjtBQUNBLGNBQWMsR0FBRyxDQUFDLGNBQWMsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQ25ELGNBQWMsR0FBRyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDcEQsY0FBYyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDeEMsY0FBYyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsY0FBYyxPQUFPLENBQUMsR0FBRyxNQUFNLEdBQUcsUUFBUSxFQUFFO0FBQzVDLGdCQUFnQixLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsZ0JBQWdCLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNyQyxrQkFBa0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsa0JBQWtCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLGlCQUFpQixNQUFNO0FBQ3ZCLGtCQUFrQixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Msa0JBQWtCLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLGVBQWU7QUFDZjtBQUNBLGNBQWMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDbEM7QUFDQSxjQUFjLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtBQUN0QyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLE1BQU07QUFDdkIsY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkUsY0FBYyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDM0IsY0FBYyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMvQixjQUFjLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLGNBQWMsR0FBRyxDQUFDLCtCQUErQixHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsY0FBYyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsY0FBYyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsY0FBYyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MsY0FBYyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixjQUFjLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxjQUFjLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCxjQUFjLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGNBQWMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsY0FBYyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxjQUFjLEdBQUcsQ0FBQywrQkFBK0IsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLGNBQWMsR0FBRyxDQUFDLHlCQUF5QixHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsY0FBYyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELGNBQWMsR0FBRyxDQUFDLHNCQUFzQixHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0QsY0FBYyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMvRCxjQUFjLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RDtBQUNBLGNBQWMsSUFBSSxHQUFHLENBQUMsK0JBQStCLEVBQUU7QUFDdkQsZ0JBQWdCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUN4QztBQUNBLGdCQUFnQixPQUFPLENBQUMsR0FBRyxNQUFNLEdBQUcsUUFBUSxFQUFFO0FBQzlDLGtCQUFrQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRCxrQkFBa0IsY0FBYyxDQUFDLElBQUksQ0FBQztBQUN0QyxvQkFBb0IsR0FBRyxFQUFFLGFBQWEsR0FBRyxHQUFHO0FBQzVDLG9CQUFvQixHQUFHLEVBQUUsYUFBYSxJQUFJLENBQUM7QUFDM0MsbUJBQW1CLENBQUMsQ0FBQztBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsR0FBRyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDcEQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDbkM7QUFDQSxjQUFjLElBQUksR0FBRyxDQUFDLCtCQUErQixFQUFFO0FBQ3ZELGdCQUFnQixXQUFXLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFDcEUsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRTtBQUNqRCxnQkFBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQzlELGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxHQUFHLENBQUMsMkJBQTJCLEVBQUU7QUFDbkQsZ0JBQWdCLFdBQVcsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNoRSxlQUFlO0FBQ2Y7QUFDQSxjQUFjLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO0FBQ3hDLGdCQUFnQixXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDckQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRTtBQUM5QyxnQkFBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQzNELGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMxQyxnQkFBZ0IsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNwQyxnQkFBZ0IsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVGLGVBQWU7QUFDZjtBQUNBLGNBQWMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO0FBQ3RDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxnQkFBZ0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzdDLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxNQUFNO0FBQ3ZCLGNBQWMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLGNBQWMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN4QixjQUFjLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFLGNBQWMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUUsY0FBYyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN4RCxjQUFjLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxjQUFjLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxjQUFjLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3pDO0FBQ0EsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLGdCQUFnQixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN2QyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxlQUFlO0FBQ2Y7QUFDQSxjQUFjLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxNQUFNO0FBQ3ZCLGNBQWMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDekM7QUFDQSxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDeEMsZ0JBQWdCLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFDL0MsY0FBYyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTSxDQUFDO0FBQ3hCLFlBQVksS0FBSyxNQUFNLENBQUM7QUFDeEIsWUFBWSxLQUFLLE1BQU0sQ0FBQztBQUN4QixZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssTUFBTTtBQUN2QixjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztBQUNqRjtBQUNBLFlBQVk7QUFDWixjQUFjLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FLFdBQVc7QUFDWDtBQUNBLFVBQVUsUUFBUSxJQUFJLE1BQU0sQ0FBQztBQUM3QixTQUFTO0FBQ1QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO0FBQ3ZELFVBQVUsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsU0FBUyxNQUFNO0FBQ2YsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEQsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3hELE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUN6RCxNQUFNLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUMsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxTQUFTLDRCQUE0QixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDeEQsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekQsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsSUFBSSxTQUFTLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekQsSUFBSSxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQ25ELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFO0FBQ25ELElBQUksSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUMxQixJQUFJLElBQUksSUFBSTtBQUNaLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQixJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkU7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcs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LEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pSLElBQUksSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM1EsSUFBSSxJQUFJLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENB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RUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsTUFBTSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNuRixNQUFNLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLO0FBQzVCLFVBQVUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNO0FBQzlCLFVBQVUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxNQUFNLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25ELFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDNUIsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDMUQsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQzVCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDeEQsVUFBVSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNyRSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLEtB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RSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2USxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVB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LFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixTQUFTLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzNCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixTQUFTLE1BQU07QUFDZixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ25CLFlBQVksU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9DLFlBQVksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxJQUFJLE1BQU0sR0FBRyxTQUFTLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcFIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQztBQUNBLElBQUksTUFBTSxHQUFHLFNBQVMsYUFBYSxHQUFHO0FBQ3RDLEVBQUUsU0FBUyxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNoQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEdBQUc7QUFDckIsSUFBSSxHQUFHLEVBQUUsU0FBUyxVQUFVLENB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VSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzN3QjtBQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDdEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUN4QixJQUFJLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN6QjtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLE1BQU0sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRztBQUNuQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxFQUFFO0FBQ1osVUFBVSxFQUFFLENBQUM7QUFDYjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0IsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxD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LE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3RDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUM1QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMzBGO0FBQ0EsRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDL0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN4QixJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUQsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IsUUFBUSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxJQUFJLEdBQUcs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RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL2hELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbmlELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbGlHLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUNuQixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN4QixJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDdkIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pELE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xGLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixPQUFPO0FBQ1A7QUFDQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFRLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcs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SUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbGlELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDdEIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixRQUFRLE1BQU0sQ0FBQyxDQUFD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RyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxNQUFNLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakMsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEM7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQzNDLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUN2QixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdkQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksTUFBTSxFQUFFLFNBQVMsQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ3ZCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0IsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqRCxRQUFRLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztBQUMvQixNQUFNLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4QyxVQUFVLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLFVBQVUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDL0MsUUFBUSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlDLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDNUQ7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlDLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7QUFDNUUsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNiLFFBQVEsQ0FBQztBQUNULFFBQVEsQ0FBQyxDQUFDO0FBQ1YsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkIsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbkIsTUFBTSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUN2QixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxZQUFZLENBQUM7QUFDN0I7QUFDQSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUN2QixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUM7QUFDbkMsTUFBTSxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN2RCxVQUFVLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0MsVUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQyxRQUFRLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3pELE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDckUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxFQUFFLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDMUQsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtBQUN0RCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDL0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDbEgsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3BCLE1BQU0sSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO0FBQzFCLFFBQVEsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN2QixPQUFPLE1BQU07QUFDYixRQUFRLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsUUFBUSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0FBQzFGLFVBQVUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUMzQyxVQUFVLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsVUFBVSxTQUFTLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RFO0FBQ0EsVUFBVSxJQUFJLFNBQVMsR0FBRyxFQUFFLEVBQUU7QUFDOUIsWUFBWSxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQzVCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvRSxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDeEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEYsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0UsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksZUFBZSxHQUFHLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDeEcsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMzQyxJQUFJLElBQUksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2RCxJQUFJLElBQUksYUFBYSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUMxQixRQUFRLElBQUk7QUFDWixVQUFVLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0QsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3JCLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDBCQUEwQixHQUFHLDBDQUEwQyxDQUFDLENBQUM7QUFDbkcsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksYUFBYSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMzSSxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksbUJBQW1CLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLE1BQU0sSUFBSSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLE1BQU0sSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEYsTUFBTSxJQUFJLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakYsTUFBTSxJQUFJLGVBQWUsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sSUFBSSxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRSxNQUFrQixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5RCxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGNBQXFCLENBQUMsQ0FBQztBQUN0TixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDckMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNwRyxLQUFLLE1BQU0sSUFBSSxDQUFDLGFBQWEsSUFBSSxRQUFRLEVBQUU7QUFDM0MsTUFBTSxJQUFJLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRyxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzdJLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUN4QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDMUcsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsUUFBUSxFQUFFLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ25ELE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQztBQUNuRCxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzlDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtBQUMxRCxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsQ0FBQztBQUNULFFBQVEsQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUMxQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNmLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ2hFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUNaO0FBQ0EsSUFBSSxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtBQUMzRCxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUNyQyxNQUFNLE9BQU8sU0FBUyxnREFBZ0QsR0FBRztBQUN6RSxRQUFRLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNoQyxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDM0IsTUFBTSxPQUFPLFNBQVMsOENBQThDLEdBQUc7QUFDdkUsUUFBUSxPQUFPLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUM5QixNQUFNLE9BQU8sU0FBUyxpREFBaUQsR0FBRztBQUMxRSxRQUFRLE9BQU8sSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckUsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxTQUFTLGlEQUFpRCxHQUFHO0FBQzFFLFFBQVEsT0FBTyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLEdBQUc7QUFDckMsSUFBSSxxQkFBcUIsRUFBRSxTQUFTLDRDQUE0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDM0YsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3hELFFBQVEsT0FBTyxJQUFJLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDdkwsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsTUFBTSxJQUFJLGlCQUFpQixHQUFHLFNBQVMsNEJBQTRCLEdBQUc7QUFDdEUsUUFBUSxPQUFPLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxPQUFPLElBQUksZUFBZSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxzQkFBc0IsQ0FBQztBQUNoQyxDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsT0FBTyxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0FBQ3hEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7QUFHdEQ7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO0FBQzVELEVBQUUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUN4QyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQztBQUNsQixNQUFNLFFBQVEsQ0FBQztBQUNmLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3JDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNyRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDbkQ7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFVBQVUsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzlCLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtBQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO0FBQ3pCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO0FBQ3RFLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsNENBQTRDLENBQUMsQ0FBQztBQUN6RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0FBQ2xDLElBQUksT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDakcsSUFBSSxNQUFNLEtBQUssR0FBRyxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ2pELElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3hDLElBQUksTUFBTSxhQUFhLEdBQUcsY0FBYyxLQUFLLE1BQU0sSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDO0FBQy9FO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDakMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUM3SCxNQUFNLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVHO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkQsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUMxQixRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxVQUFVLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDN0IsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxVQUFVLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFVBQVUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNoQixNQUFNLElBQUksYUFBYSxFQUFFO0FBQ3pCLFFBQVEsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVGLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUN2QixZQUFZLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3QyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0MsVUFBVSxPQUFPLElBQUksT0FBTyxDQUFDO0FBQzdCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxrQkFBa0IsR0FBRztBQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUU7QUFDeEUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7QUFDL0IsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDM0IsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7QUFDbkYsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksUUFBUSxZQUFZLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQzlDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDN0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUU7QUFDekIsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7QUFDekQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7QUFDL0IsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7QUFDMUYsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsWUFBWSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQzdDLE1BQU0sTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0EsTUFBTSxJQUFJLGVBQWUsRUFBRTtBQUMzQixRQUFRLE9BQU8sZUFBZSxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSTtBQUNWLFFBQVEsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ25CLFFBQVEsSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzVELFVBQVUsTUFBTSxFQUFFLENBQUM7QUFDbkIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDOUMsTUFBTSxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsTUFBTSxJQUFJLGVBQWUsRUFBRTtBQUMzQixRQUFRLE9BQU8sZUFBZSxDQUFDO0FBQy9CLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxVQUFVLENBQUM7QUFDMUIsSUFBSSxFQUFFO0FBQ04sSUFBSSxJQUFJO0FBQ1IsSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUNwQixJQUFJLGtCQUFrQjtBQUN0QixJQUFJLG9CQUFvQjtBQUN4QixHQUFHLEVBQUU7QUFDTCxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNsRTtBQUNBLElBQUksT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsSUFBSSxFQUFFO0FBQ04sSUFBSSxJQUFJO0FBQ1IsSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUNwQixJQUFJLGtCQUFrQjtBQUN0QixJQUFJLG9CQUFvQjtBQUN4QixHQUFHLEVBQUU7QUFDTCxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDNUU7QUFDQSxJQUFJLElBQUksZ0JBQWdCLEVBQUU7QUFDMUIsTUFBTSxPQUFPLGdCQUFnQixDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDbEY7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsSUFBSSxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLGtCQUFrQixFQUFFO0FBQ2hFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0I7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sUUFBUSxFQUFFLENBQUMsSUFBSTtBQUNyQixRQUFRLEtBQUssWUFBWSxDQUFDO0FBQzFCLFFBQVEsS0FBSyxHQUFHO0FBQ2hCLFVBQVUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN0QztBQUNBLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFDekIsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDdEM7QUFDQSxRQUFRLEtBQUssU0FBUztBQUN0QixVQUFVLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQSxRQUFRO0FBQ1IsVUFBVSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNsRCxZQUFZLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUQ7QUFDQSxZQUFZLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQ3RELGNBQWMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0Q7QUFDQSxjQUFjLElBQUksV0FBVyxFQUFFO0FBQy9CLGdCQUFnQixJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRTtBQUMxRCxrQkFBa0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDdkYsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLEVBQUUsR0FBRyxXQUFXLENBQUM7QUFDakMsZ0JBQWdCLE1BQU07QUFDdEIsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDM0IsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMvQyxNQUFNLElBQUksTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7QUFDbEU7QUFDQSxNQUFNLFFBQVEsSUFBSTtBQUNsQixRQUFRLEtBQUssWUFBWSxDQUFDO0FBQzFCLFFBQVEsS0FBSyxHQUFHO0FBQ2hCLFVBQVUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN0QztBQUNBLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFDekIsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUMxQixRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDdEM7QUFDQSxRQUFRLEtBQUssU0FBUztBQUN0QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLFVBQVUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsUUFBUSxLQUFLLFFBQVE7QUFDckIsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQyxVQUFVLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsVUFBVSxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsUUFBUSxLQUFLLFVBQVU7QUFDdkIsVUFBVSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFVBQVUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNuQyxVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1QztBQUNBLFVBQVUsSUFBSSxHQUFHLEVBQUU7QUFDbkIsWUFBWSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDaEY7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7QUFDN0MsY0FBYyxPQUFPLEtBQUssQ0FBQztBQUMzQixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw0REFBNEQsQ0FBQyxDQUFDO0FBQzFGLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN4QyxXQUFXLE1BQU0sSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLFlBQVksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUN2QyxXQUFXLE1BQU0sSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLFlBQVksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN4QyxXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssU0FBUztBQUN0QixVQUFVLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsVUFBVSxJQUFJLE1BQU0sRUFBRTtBQUN0QixZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDOUUsV0FBVztBQUNYO0FBQ0EsVUFBVSxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN2QixRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDM0UsVUFBVSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuRCxVQUFVLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsVUFBVSxPQUFPLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxRQUFRLEtBQUssWUFBWSxDQUFDO0FBQzFCLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNELFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMzRSxVQUFVLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxVQUFVLE9BQU8sSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRDtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRCxVQUFVLE9BQU8sSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRDtBQUNBLFFBQVE7QUFDUixVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDO0FBQ2xFLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEQsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDbEQsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsVUFBVSxHQUFHO0FBQzFCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtBQUNqRCxNQUFNLElBQUksSUFBSSxHQUFHO0FBQ2pCLFFBQVEsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDbkUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEdBQUcsR0FBRztBQUNoQixRQUFRLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDakIsUUFBUSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRSxPQUFPO0FBQ1A7QUFDQSxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxXQUFXLFNBQVMsVUFBVSxDQUFDO0FBQ3JDLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDL0MsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3RELEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDdkMsSUFBSSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUN2RCxJQUFJLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLE9BQU8sS0FBSyxDQUFDLENBQUM7QUFDMUYsSUFBSSxJQUFJLEdBQUcsR0FBRyxhQUFhLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sT0FBTyxHQUFHLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDdkYsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ25DLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLE1BQU0sSUFBSSxrQkFBa0IsRUFBRTtBQUM5QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLFVBQVUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUN4QyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEcsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxTQUFTLFNBQVMsVUFBVSxDQUFDO0FBQ25DLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN2QixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0FBQ2xDLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDJDQUEyQyxDQUFDLENBQUM7QUFDeEUsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxTQUFTLFNBQVMsVUFBVSxDQUFDO0FBQ25DLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3JDLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzNDLE1BQU0sTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEtBQUssTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUMzQyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JELE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsdUNBQXVDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDL0MsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN4QyxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0I7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEMsTUFBTSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDcEQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLE1BQU0sVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUNoQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUN4QyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNuQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQzFELE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDLENBQUM7QUFDM0QsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFlBQVksU0FBUyxVQUFVLENBQUM7QUFDdEMsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkUsSUFBSSxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUztBQUNyQixRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDdkI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEMsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBTyxXQUFXLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sV0FBVyxTQUFTLFVBQVUsQ0FBQztBQUNyQyxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQy9DLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtBQUNyQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMzRSxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTO0FBQ3JCLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUN2QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxZQUFZLEdBQUcsU0FBUyxtQkFBbUIsR0FBRztBQUNwRCxFQUFFLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDcEUsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDNUMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM1QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlYLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUM5WCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMs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QUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDN0YsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDckI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdkQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLENBQUM7QUFDbEgsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3JELFFB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SDtBQUNBLEVBQUUsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzdDLElBQUksT0FBTyxJQUFJLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN0RSxJQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7QUFDMUIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUs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QUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdkQsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0FBQzVGLE9BQU87QUFDUDtBQUNBLE1BQU0s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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMvRCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzRCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0I7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hELE1BQU0sTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3BFLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQztBQUNULFFBQVEsQ0FBQztBQUNULE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUNEO0FBQ0EsU0FB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QUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsTUFBTSxPQUFPLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDMUIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsUUFBUSxNQUFNLElBQUksVUFBVSxDQUFDO0FBQzdCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ2xGLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzdDLE1BQU0sS0FBSyxFQUFFLFFBQVE7QUFDckIsTUFBTSxNQUFNLEVBQUUsU0FBUztBQUN2QixNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVU7QUFDdEMsTUFBTSxJQUFJLEVBQUUsT0FBTztBQUNuQixLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNiLElBQUksT0FBTyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDckssSUFBSSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ2xDLElBQUksSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxRQUFRLEdBQUc7QUFDZixNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDN0M7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFDbEQ7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztBQUM5RDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsR0FBRyxFQUFFLFNBQVMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUM5QyxJQUFJLElBQUkseUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLElBQUksSUFBSSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDeEMsSUFBSSxJQUFJLDhCQUE4QixHQUFHLElBQUksQ0FBQztBQUM5QyxJQUFJLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO0FBQ2pDLFFBQVEsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdEMsSUFBSSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakQsSUFBSSxLQUFLLEdBQUcsOEJBQThCLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEY7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLHlCQUF5QixFQUFFO0FBQzNDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1YsSUFBSSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDNUIsSUFBSSxJQUFJLFVBQVUsRUFBRSxhQUFhLENBQUM7QUFDbEMsSUFBSSxJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsSUFBSSxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsVUFBVSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELFVBQVUsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxVQUFVLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksSUFBSSxrQkFBa0IsS0FBSyxrQkFBa0IsRUFBRTtBQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxVQUFVLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUN2QyxNQUFNLElBQUksTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDbkM7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUNoRSxRQUFRLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssa0JBQWtCLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLGtCQUFrQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxrQkFBa0IsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssa0JBQWtCLEVBQUU7QUFDak8sVUFBVSxJQUFJLENBQUMsR0FBRyx5QkFBeUIsRUFBRTtBQUM3QyxZQUFZLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDOUQsTUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLElBQUksQ0FBQyxFQUFFO0FBQ25ELFFBQVEsYUFBYSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QyxRQUFRLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNuRixNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMzSixLQUFLLE1BQU07QUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxRQUFRLGFBQWEsR0FBRyxTQUFTLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFFBQVEsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDcEIsVUFBVSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7QUFDL0IsVUFBVSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7QUFDakMsVUFBVSxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07QUFDbkMsVUFBVSxTQUFTLEVBQUUsYUFBYTtBQUNsQyxTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDbEYsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMxQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRTtBQUNuSSxJQUFJLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdEMsSUFBSSxJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RGLEdBQUcsRUFBRSxTQUFTLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDNUMsSUFBSSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztBQUNqQyxRQUFRLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RDLElBQUksSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxRQUFRLEdBQUc7QUFDZixNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDN0M7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDaEQsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELFFBQVEsSUFBSSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsUUFBUSxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtBQUNBLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssa0JBQWtCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxrQkFBa0IsRUFBRTtBQUNoSixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRTtBQUN4RCxVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDM0MsUUFBUSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtBQUMvQyxVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEI7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEdBQUcsRUFBRSxVQUFVLE9BQU8sRUFBRSxDQUFDLEVBQUU7QUFDM0IsSUFBSSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUNoQyxJQUFJLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ25DLElBQUksSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87QUFDakMsUUFBUSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUN0QyxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQyxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsSUFBSSxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksa0JBQWtCLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2hGO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsRUFBRTtBQUNyQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxJQUFJLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDckM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRTtBQUNyRCxNQUFNLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRCxNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzdFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRCxJQUFJLE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMxQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUNuTCxJQUFJLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO0FBQ2pDLFFBQVEsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdEMsSUFBSSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFFBQVEsR0FBRztBQUNmLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUNsRDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNoRDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztBQUN0RDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtBQUMvQyxVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxRQUFRLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLEVBQUU7QUFDMUYsVUFBVSxPQUFPLEtBQUssQ0FBQztBQUN2QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ2hELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxHQUFHLEVBQUUsVUFBVSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLElBQUksSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNsQyxJQUFJLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO0FBQ2pDLFFBQVEsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdEMsSUFBSSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLElBQUksSUFBSSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQyxJQUFJLElBQUksYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzdCLElBQUksSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsSUFBSSxJQUFJLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNwRjtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsa0JBQWtCLEVBQUU7QUFDcEMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLGVBQWUsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxTQUFTLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssZ0JBQWdCLEVBQUU7QUFDclksTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUNkLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDOUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN4QixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxTQUFTLGNBQWMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRztBQUNuQixNQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87QUFDNUIsTUFBTSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7QUFDaEMsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUM3QixJQUFJLFNBQVMsR0FBRztBQUNoQixNQUFNLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWE7QUFDaEMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM5QixNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pFLFFBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDckIsUUFBUSxJQUFJLEtBQUssRUFBRTtBQUNuQixVQUFVLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxVQUFVLElBQUksT0FBTyxFQUFFO0FBQ3ZCLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEIsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QjtBQUNBLFVBQVUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ3ZCLFlBQVksTUFBTTtBQUNsQixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDNUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNkLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWjtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQzNELFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQ25CLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWixNQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN6QixRQUFRLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDeEIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLElBQUksYUFBYSxHQUFHLFNBQVMsb0JBQW9CLEdBQUc7QUFDcEQsRUFBRSxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN2QixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxTQUFTLEdBQUc7QUFDNUIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtBQUNuQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQ2Q7QUFDQSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQ2Q7QUFDQSxHQUFHLENBQUM7QUFDSixFQUFFLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxJQUFJLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ2xELEVBQUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFO0FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxTQUFTLEdBQUc7QUFDM0IsSUFBSSxJQUFJLE1BQU0sR0FBRztBQUNqQixNQUFNLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDbkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRztBQUNoQixNQUFNLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUN0RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxHQUFHO0FBQ3RCLE1BQU0sT0FBTyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtBQUNwQixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzVCLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtBQUN2QyxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixTQUFTLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLGdCQUFnQixLQUFLLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5RyxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRTtBQUM5QixNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDN0MsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN4QyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBLElBQUksZUFBZSxDQUFDLFlBQVksRUFBRTtBQUNsQyxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksWUFBWSxFQUFFO0FBQzdDLFFBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxFQUFFLE1BQU0sWUFBWSxZQUFZLENBQUMsRUFBRTtBQUM3QyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxrREFBa0QsQ0FBQyxDQUFDO0FBQzVFLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUc7QUFDWixNQUFNLE9BQU87QUFDYixRQUFRLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztBQUM3QixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtBQUMzQixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHO0FBQ3JCLE1BQU0sTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sTUFBTTtBQUNaLFFBQVEsT0FBTztBQUNmLFFBQVEsU0FBUztBQUNqQixRQUFRLE1BQU07QUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2Y7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsUUFBUSxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUM7QUFDakQsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7QUFDdEQsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCO0FBQzlDLFlBQVksTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXhDO0FBQ0EsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUM3QixjQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0FBQy9CLFFBQVEsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0FBQzdCLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVEsU0FBUztBQUNqQixRQUFRLE1BQU07QUFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxHQUFHLENBQUM7QUFDSixFQUFFLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO0FBR3REO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDOUIsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDNUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ2hELEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMzRDtBQUNBLEVBQUUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQzFCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM5QyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbkI7QUFDQSxFQUFFLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO0FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFDRDtBQUNBLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRTtBQUMvQixFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvQixJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDL0M7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUU7QUFDaEMsSUFBSSxPQUFPLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDL0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDOUMsRUFBRSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN0QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxHQUFHLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDNUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNuQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN4QyxJQUFJLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtBQUM1QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxHQUFHLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDeEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEdBQUcsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM3QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMvQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDOUIsSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDeEMsRUFBRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM3QyxFQUFFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQzNDLEVBQUUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLEVBQUUsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckU7QUFDQSxFQUFFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDcEQsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLElBQUksWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDakMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3QyxFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLEVBQUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7QUFDL0IsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwQyxJQUFJ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QUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0EsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUM1QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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QUFJLGNBQWMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFB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RUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcs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LENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyQyxNQUFNLElBQUksWUFBWSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUUsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUMsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDO0FBQy9CO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxRQUFRLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFELFFBQVEsSUFBSSxDQUFD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QixJQUFJLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDMUIsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDakMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7QUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUM7QUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEdBQUcscUJBQXFCLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7QUFDdEQs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UyxFQUFFO0FBQzlDLElBQUksSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5QyxJQUFJLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLElBQUksSUFBSSxJQUFJLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ILElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDckI7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7QUFDbEMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7QUFDMUQsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxH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QVMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDekUsTUFBTSxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1STtBQUNBLE1BQU0sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0I7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsVUFBVSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0M7QUFDQSxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNqRCxZQUFZLFNBQVM7QUFDckIsV0FBVztBQUNY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SyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFD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QUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0Is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QyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3QwQyxFQUFFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLEVBQUUsTUFBTSxVQUFVLFNBQVMsT0FBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUN6QixNQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUMzQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxjQUFjLEdBQUcsU0FBUyxxQkFBcUIsR0FBRztBQUN0RCxFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFB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QUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFRLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0U7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsVUFBVSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsVUFBVSxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7QUFDcEMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQy9CLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFF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QVMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUd0RDtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDdkYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3J3RSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxt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QUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNydEYsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeHRGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzMwRSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbnhELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1QyxNQUFNLGVBQWUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDLzBFLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwOEUsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1dEQsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BEO0FBQ0EsU0FBUyxXQUFXLENBQUMsWUFBWSxFQUFFO0FBQ25DLEVBQUUs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QUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDckIsQ0FBQyxDQUFD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LFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUM1QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0s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Q2hDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7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SSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDakIsQ0FBQyxD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R0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYixFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7QUFDbEUsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUNqRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxvQ0FBb0MsR0FBRyxvQ0FBb0MsQ0FBQztBQUNwRixNQUFNLGlDQUFpQyxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzlGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLGlDQUFpQyxDQUFDO0FBQzlFO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUs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S0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFF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QyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMs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QyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsNENBQTRDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsc0NBQXNDLENBQUM7QUFDdEQsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMs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LEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QyxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRztBQUNwQixVQUFVLEdBQUcsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqQyxTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1A7QUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDYjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QyxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDN0MsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdDLFFBQVEsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FB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RyxFQUFFLENBQUM7QUFDNUMsY0FBYyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdDO0FBQ0EsY0FBYyxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtBQUNyRCxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFPLGdCQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RSxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDckMsZ0JBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztB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QUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLFNBQVMsR0FBRztBQUMxQixJQUFJLEtBQUssRUFBRSxTQUFTLGlCQUFpQixHQUFHO0FBQ3hDLE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNyQyxNQUFNLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDekMsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDL0I7QUFDQSxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDN0MsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsQixRQUFRLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdkIsT0FBTyxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDckQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLElBQUksR0FBRyxRQUFRLENB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QUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsS0FBSyxDQUFDO0FBQ04sR0FBRyxFQUFFLENBQUM7QUFDTjtBQUNBLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzdDLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQy9FLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDNUIsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDM0IsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzNCLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0csSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDMUcsSUFBSSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9HLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksSUFBSSxjQUFjLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQztBQUN2RSxJQUFJLElBQUksWUFBWSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxjQUFjLENBQUMsQ0FBQztBQUN2RSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUI7QUFDQSxJQUFJLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDOUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEU7QUFDQSxNQUFNLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssUUFBUSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQyxFQUFFO0FBQ2hGLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFVBQVUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxZQUFZLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEMsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMs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QUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbFksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xZLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwWSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FB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QUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxFQUFFLE9BQU87QUFDckIsUUFBUSxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNsQyxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUM5QixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxHQUFHLElBQUk7QUFDbkIsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFB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R0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEUsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxLQUFLLEVBQUUsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLFNBQVMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztBQUM5QixVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxVQUFVLENBQUM7QUFDWCxVQUFVLENBQUM7QUFDWCxVQUFVLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7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QUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbjVDLElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJ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QUFDckI7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQzVCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMxQixLQUFLLE1BQU07QUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNqQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1I7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRCxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNyRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDcEIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0QyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUM3RSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ1o7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNuQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtB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QUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2Qs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Q0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxR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QUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxH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O0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FB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LEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcs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LElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUks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LENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FB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R0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxD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Q0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNq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QUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUM7QUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3BCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckIsSUFBSSxNQUFNLEVBQUUsR0FBRyxVQUFVO0FBQ3pCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUMxQixJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRO0FBQ2hDLFVBQVUsTUFBTSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDakIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzFELFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNsQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUMxRCxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakIsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxF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RyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ2hDO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUU7QUFDN0IsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDcEMsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbEMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFO0FBQzFCLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLFVBQVUsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNyQjtBQUNBLFVBQVUsT0FBTyxDQUFDLEdBQUcsUUFB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